์ƒ์†2(์‹ฌํ™”)

2023. 2. 1. 12:35ใ†java

์ƒ์† ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” IS-A ๊ด€๊ณ„๊ฐ€ ์ถฉ์กฑ๋˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค.

ex) 

Student is a person

 

//์ƒ์† ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” IS-A ๊ด€๊ณ„๊ฐ€ ์ถฉ์กฑ๋˜๋ฉด ๊ฐ€๋Šฅ.
public class Phone {    //๋ชจ๋ฐ”์ผํฐ
    int phoneNumber;

    public void SendMsg(){
        System.out.println("๋ฌธ์ž ์ „์†ก");
    }
}

class Smartphone extends Phone{
    String os;

    public void playApp(){
        System.out.println("์•ฑ ์‹คํ–‰");
    }
}

--

public class PhoneTest1 {
    public static void main(String[] args) {
        Phone p1 = new Phone();
        Smartphone p2 = new Smartphone();


        //๋‹ค(์–‘ํ•œ)ํ˜•(ํƒœ๋ฅผ ๊ฐ€์ง€๋Š”)์„ฑ(์งˆ)
        Phone p3 =  new Smartphone();
        Smartphone p4 = new Phone(); //์˜ค๋ฅ˜

    }
}

๋ถ€๋ชจ ํด๋ž˜์Šคํ˜•์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ๊ฐ€๋Šฅ.

๋ถ€๋ชจํด๋ž˜์Šคํ˜• ๊ฐ์ฒด๋ช… = new ์ž์‹ํด๋ž˜์Šค์ƒ์„ฑ์ž();

๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

Smartphoe์ด ๊ฐ€์ง€๋Š” os๋‚˜ app์‚ฌ์šฉ ๊ธฐ๋Šฅ์€ ์•ˆ ๋œธ!

p3.๋ถ€๋ชจํด๋ž˜์Šค ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

 

์—ฐ์Šต

public class Cake {
    public void eatCake(){
        System.out.println("์ผ€์ต์„ ๋จน๋‹ค.");
    }
}

class CheeseCake extends Cake{
    public void eatCheeseCake(){
        System.out.println("์น˜์ฆˆ ์ผ€์ต ๋จน๋‹ค.");
    }
}

class StrawberryCheeseCake extends CheeseCake{
    public void eatStrawberryCheeseCake(){
        System.out.println("๋”ธ๊ธฐ ์น˜์ฆˆ ์ผ€์ต ๋จน๋‹ค.");
    }
}

--

public class CakeTest {
    public static void main(String[] args) {
        Cake c1 = new CheeseCake();
        //์น˜์ฆˆ ์ผ€์ดํฌ์ง€๋งŒ ์‚ฌ์šฉ์ž๋Š” ์ผ€์ดํฌ์˜ ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๋ฉ”์†Œ๋“œ 1๊ฐœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
        Cake c2 = new StrawberryCheeseCake();
        CheeseCake c3 = new Cake();   //์˜ค๋ฅ˜
        CheeseCake c4 = new StrawberryCheeseCake();
        StrawberryCheeseCake c5 = new Cake();    //์˜ค๋ฅ˜
    }
}

์ƒ์†์—์„œ ํ˜•๋ณ€ํ™˜๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

c1์€ ํ˜• ๋ณ€ํ™˜ ์ „ ๋ฉ”์†Œ๋“œ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

 

CheeseCake cc1 = (CheeseCake)c1;

ํ˜• ๋ณ€ํ™˜์„ ํ†ตํ•ด ๊ฐ์ฒด์˜ ์ž๋ฃŒํ˜•์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ , ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์†Œ๋“œ๋„ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Cake์™€ CheeseCake ๋ฉ”์†Œ๋“œ ๋‘๊ฐœ ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

CheeseCake c4 = new StrawberryCheeseCake();
Cake cc4 = (Cake)c4;
cc4.eatCake();

์œ„์™€ ๊ฐ™์ด๋„ ๊ฐ€๋Šฅ

์ƒ์† ๋ฐ›์€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ถ€๋ชจํด๋ž˜์Šค๋กœ๋„ ํ˜•๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๊ณ 

ํ˜•๋ณ€ํ™˜ ์‹œ ํ˜•๋ณ€ํ™˜ ํ•œ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ (๋ฌด์กฐ๊ฑด ์ƒ์†๊ด€๊ณ„์—์„œ๋งŒ ๋‚˜์˜ด)

public class Animal {
    public void sound(){
        System.out.println("๋™๋ฌผ์ด ์›๋‹ˆ๋‹ค.");
    }
}

class Dog extends Animal{
    //๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    public void sound(){
        System.out.println("๋ฉ๋ฉ");  //๋ถ€๋ชจํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์ž์‹ํด๋ž˜์Šค์—์„œ ๋ฎ์–ด์”€ ํ—ˆ์šฉ.
    }
}

์ƒ์† ๊ด€๊ณ„์—์„œ ๋ถ€๋ชจํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๋ช…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ž์‹ํด๋ž˜์Šค์—์„œ

์„ ์–ธํ•˜๋ฉด ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ—ˆ์šฉํ•œ๋‹ค.

๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์ž์‹ํด๋ž˜์Šค์—์„œ ๋ฎ์–ด์”€.

์ž์‹ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ ์‚ฌ์šด๋“œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์˜ค๋ฒ„๋ผ์ด๋”ฉ์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฉ”์†Œ๋“œ๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜๋œ ๋ฉ”์†Œ๋“œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ! (ํด๋ž˜์Šค์˜ ์™ธ๋ถ€์—์„œ)

๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€(์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•˜๊ณ  ์žˆ๋Š”)์—์„œ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค ํ˜ธ์ถœ ๊ฐ€๋Šฅ

 

๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” super.์„ ์‚ฌ์šฉํ•œ๋‹ค.

class Dog extends Animal{
    //๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    public void sound(){
        super.sound();    //ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋Š” ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
        System.out.println("๋ฉ๋ฉ");  //๋ถ€๋ชจํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์ž์‹ํด๋ž˜์Šค์—์„œ ๋ฎ์–ด์”€ ํ—ˆ์šฉ.
    }
}

๋ถ€๋ชจํด๋ž˜์Šค์˜ sound ๋ฉ”์†Œ๋“œ๋„ ํ˜ธ์ถœ๋จ.

**

์ƒ์†

- ์ฝ”๋“œ๋ฅผ ์žฌํ™œ์šฉํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฌธ๋ฒ•.

- ์—ฐ๊ด€์ด ์žˆ๋Š”(์ƒ์†์œผ๋กœ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด) ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ๊ณตํ†ต์  ๊ทœ์•ฝ์„ ์คŒ์œผ๋กœ์จ ์ผ๊ด„์  ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

 

์˜ˆ

์นœ๊ตฌ ์ง‘์— ๊ฐ•์•„์ง€, ๊ณ ์–‘์ด ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค๊ณ  ํ•˜์ž.

์ด 5๋งˆ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ฐ๊ฐ ๊ฐ์ฒด์˜ ์ˆ˜๋Š” ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์—์„œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์ž.

 

์šฐ์„  ๊ณต๊ฐ„ 5๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋‘˜์€ ์ž๋ฃŒํ˜•์ด ๋‹ค๋ฅด๋‹ˆ๊นŒ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค.

Puppy p1 =  new Cat (x)

 

๊ทธ๋ž˜์„œ ์ƒ์†์„ ํ†ตํ•ด ํŠน์ •๋œ ์—ฐ๊ด€์„ฑ์„ ๋งŒ๋“ค์–ด์คŒ.

์‚ฌ์‹ค ๋„ˆํฌ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค(๋™๋ฌผ)๊ฐ€ ๊ฐ™์Œ

 

๋™๋ฌผ์ด ๊ฐ€์ง€๋Š” ๊ณต๊ฐ„ 5๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๊ณ ์–‘์ด ๊ฐ•์•„์ง€ ๋ชจ๋‘ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

Ani[] cages = new Ani[5];
//๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ€๋Šฅ
cages[0] = new Ani();
cages[0] = new Cat();
cages[0] = new Puppy();

๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด ๊ฐ์ฒด ์ผ€์ด์ง€๋ผ๋Š” ๋ฐฐ์—ด์— ๊ณ ์–‘์ด์™€ ๊ฐ•์•„์ง€๊ฐ€ ์š”์†Œ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ.

>>๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ๋“ค์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Œ

cages[0] = new Cat();
cages[1] = new Cat();
cages[2] = new Cat();
cages[3] = new Puppy();
cages[4] = new Puppy();

>>๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

>>์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

cages[0].soundCat(); //์˜ค๋ฅ˜

์˜ค๋ฒ„๋ผ์ด๋”ฉ

class Ani{
    public void sound(){
        System.out.println("์šด๋‹ค.");
    }
}
public class Cat extends Ani{
    public void sound(){
        System.out.println("์•ผ์˜น~");
    }
}
class Puppy extends Ani{
    public void sound(){
        System.out.println("๋ฉ๋ฉ!");
    }
}

--

public class AnimalManage {
    public static void main(String[] args) {
        //๊ฐ•์•„์ง€, ๊ณ ์–‘์ด๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„ 5๊ฐœ ๋งŒ๋“ค์–ด์•ผ ํ•จ.
        Ani[] cages = new Ani[5];

        cages[0] = new Cat();
        cages[1] = new Cat();
        cages[2] = new Cat();
        cages[3] = new Puppy();
        cages[4] = new Puppy();

        for(int i = 0; i < cages.length ; i++){
            cages[i].sound();
        }
    }
}

sound ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ์›๋ž˜ ๊ณ ์–‘์ด ๊ฐ•์•„์ง€๊ฐ€ ๊ฐ€์ง„ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. >> ๋‹คํ˜•์„ฑ๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์“ฐ๋Š” ์ด์œ 

 

'java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Object  (0) 2023.02.01
์ธ๋งฅ๊ด€๋ฆฌํ”„๋กœ๊ทธ๋žจ (์ƒ์†,๋‹คํ˜•์„ฑ,์˜ค๋ฒ„๋ผ์ด๋”ฉ)  (0) 2023.02.01
์ƒ์†  (0) 2023.01.31
๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„ ๋กœ๋”ฉ  (0) 2023.01.31
static  (0) 2023.01.31