โ˜•Java

[Java ์ดํ•ดํ•˜๊ธฐ] 21. Java์˜ ์ƒ์†

Luvbit 2024. 5. 31. 17:55

๐Ÿฉท ์—„๋งˆํ† ๋ผ ์•„๊ธฐํ† ๋ผ ๐Ÿฉท


 

๐Ÿฉท Java์˜ ์ƒ์†์ด๋ž€?

์ƒ์†์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์ƒ์†์„ ํ†ตํ•ด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿ’›

์œ„์— ๋‘ ๋งˆ๋ฆฌ์˜ ํ† ๋ผ๊ฐ€ ๋ณด์ด์‹œ๋‚˜์š”? ์—„๋งˆํ† ๋ผ์™€ ์•„๊ธฐํ† ๋ผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋‘ ํ† ๋ผ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋‘ ํ† ๋ผ์˜ ๊ณตํ†ต์ ์ด ๋ฌด์—‡์ผ๊นŒ์š”?

 

๋‘˜ ๋‹ค ํ† ๋ผ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.

ํ† ๋ผ์˜ ํŠน์ง•์„ 2๊ฐ€์ง€๋งŒ ๋ฝ‘์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ† ๋ผ๋Š” ๊นก์ถฉ๊นก์ถฉ ๋›ฐ๋ฉฐ, ๋‹น๊ทผ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

(์‹ค์ œ ์‚ฌ์‹ค๊ณผ ๋ฌด๊ด€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

 

์—ฌ๊ธฐ์„œ, ์ €๋ฒˆ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ has-a ๊ด€๊ณ„๋ฅผ ๋– ์˜ฌ๋ ค ๋ด…์‹œ๋‹ค. 'OO์€ OO๋ฅผ ๊ฐ€์ง„๋‹ค'๋ผ๋Š” ๊ฐœ๋…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ƒ์†์€ has-a ๊ด€๊ณ„์™€ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ”ํžˆ is-a๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 'OO์€ OO์ด๋‹ค'๋ผ๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

 

'์•„๊ธฐ ํ† ๋ผ๋Š” ํ† ๋ผ๋ฅผ ๊ฐ€์ง„๋‹ค' vs '์•„๊ธฐ ํ† ๋ผ๋Š” ํ† ๋ผ์ด๋‹ค.' ์–ด๋–ค ํ‘œํ˜„์ด ์ž์—ฐ์Šค๋Ÿฌ์šฐ์‹ ๊ฐ€์š”?

์•„๋งˆ ๋Œ€๋ถ€๋ถ„ ํ›„์ž๊ฐ€ ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๊ณ  ๋Œ€๋‹ตํ•˜์‹ค ๊ฒ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ is-a ๊ด€๊ณ„์ผ ๋•Œ ์ƒ์†์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

ํ† ๋ผ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ† ๋ผ๋ผ๋Š” ํด๋ž˜์Šค์—๋Š” ๋‹น๊ทผ์„ ๋จน๋Š” ๋ฉ”์„œ๋“œ์™€ ๊นก์ถฉ๊นก์ถฉ ๋›ฐ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค..

๋งŒ์•ฝ ์•„๊ธฐํ† ๋ผ์™€ ์—„๋งˆํ† ๋ผ๊ฐ€ ์ด ํ† ๋ผํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ฒŒ ๋˜๋ฉด, ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ์ •์˜ํ•  ํ•„์š” ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ถ”ํ›„์— ์•„๊ธฐํ† ๋ผ์˜ ํ˜•์ œ๋“ค์ด ๋Š˜์–ด๋‚˜๋„, ๋‹น๊ทผ์„ ๋จน๋Š” ๋ฉ”์„œ๋“œ์™€ ๊นก์ถฉ๊นก์ถฉ ๋›ฐ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ž์„ธํ•œ ๊ฑด ์•„๋ž˜์—์„œ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. 

๐Ÿฐ

 

 

 

 

์ƒ์†(Inheritance)์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›์•„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ƒ์†์„ ํ†ตํ•ด ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ (ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€๋ชจ ํด๋ž˜์Šค (Superclass) : ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์— ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
์ž์‹ ํด๋ž˜์Šค (SubClass) :๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
extends ํ‚ค์›Œ๋“œ :Java์—์„œ ์ƒ์†์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

โค๏ธ์ƒ์†์˜ ํŠน์ง•

์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ™•์žฅ์„ฑ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹คํ˜•์„ฑ(Polymorphism) ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ์„ ์–ธ๋œ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ์ผ ์ƒ์† Java๋Š” ๋‹จ์ผ ์ƒ์†๋งŒ์„ ์ง€์›ํ•˜๋ฉฐ, ํ•œ ํด๋ž˜์Šค๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ์ƒ์†์˜ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์ถ”ํ›„์— ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿฉท์ƒ์†์˜ ์žฅ์ 

 

  1. ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด :  ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์—ฌ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ณ„์ธต์  ๊ตฌ์กฐ : ๋…ผ๋ฆฌ์ ์ธ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ดํ•ด์™€ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  3. ์žฌ์‚ฌ์šฉ์„ฑ : ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  4. ๋‹คํ˜•์„ฑ ์ง€์› : ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด ์œ ์—ฐํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 


์ƒ์† ์˜ˆ์ œ)

์ƒ์†์— ๋Œ€ํ•ด์„œ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ํ† ๋ผ ํด๋ž˜์Šค , ๋ถ€๋ชจ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค (Super Class)

 

 

 

 

Rabbit.java

// ๋ถ€๋ชจ ํด๋ž˜์Šค
class Rabbit {
   public void jump() {
        System.out.println("The rabbit jumps.");
    }

   public void eatCarrot() {
        System.out.println("The rabbit eats a carrot.");
    }
}

 

 

 

 

BabyRabbit.java

//์ž์‹ ํด๋ž˜์Šค
class BabyRabbit extends Rabbit {
    public void play() {
        System.out.println("The baby rabbit plays.");
    }
}

 

 

 

 

MotherRabbit.java

// ์ž์‹ ํด๋ž˜์Šค
class MotherRabbit extends Rabbit {
    public void careForBabies() {
        System.out.println("The mother rabbit cares for her babies.");
    }
}

 

 

 

 

Main.java

public class Main {
    public static void main(String[] args) {
        BabyRabbit babyRabbit = new BabyRabbit();
        MotherRabbit motherRabbit = new MotherRabbit();

        // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        babyRabbit.jump();
        babyRabbit.eatCarrot();
        babyRabbit.play();

        // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        motherRabbit.jump();
        motherRabbit.eatCarrot();
        motherRabbit.careForBabies();
    }
}

 

 

์ด ์˜ˆ์ œ์—์„  ์•„๊ธฐ ํ† ๋ผ๋งŒ์˜ ๋ฉ”์„œ๋“œ์™€, ์—„๋งˆ ํ† ๋ผ๋งŒ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ 'jump'์™€ 'eatCarrot' ๋ฉ”์„œ๋“œ๋Š” ์žฌ์ •์˜ํ•  ํ•„์š” ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 


 

 

 

 

" ์š”์•ฝ " 

  • ์ƒ์†์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ๊ธฐ์กด ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›์•„ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ด€๋ฆฌ์™€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • Java์—์„œ๋Š” 'extends' ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์†์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๋‹จ์ผ ์ƒ์†๋งŒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

Java๋Š” 100% ์ƒ์†๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
๋ชจ๋“  ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒ์†์— ๋Œ€ํ•ด์„  ๊ผญ ์ˆ™์ง€ํ•ด์ฃผ์„ธ์š”!

์งˆ๋ฌธ์€ ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”.
๐Ÿฉต๐Ÿฐ๐Ÿฉต