๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ_ 329p

 

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

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

class A {
    void print() {
         System.out.println("A ํด๋ž˜์Šค")
    }
}

class B extends A {
    @Override
    void print() {
         System.out.println("B ํด๋ž˜์Šค")
    }
}

public class MethodOverrideing_1 {
     public static void main(String[] args) {
         
         A aa = new A();
         aa.print();
         
         B bb = new B();
         bb.print();
         
         A ab = new B();
         ab.print();
     }
}
๋จผ์ € A aa = new A( );์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ์‚ดํŽด๋ณด๋ฉด ํž™ ๋ฉ”๋ชจ๋ฆฌ์— A( ) ์ƒ์„ฑ์ž๋กœ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์ด๋ฅผ A ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•œ ์ฐธ์กฐ ๋ณ€์ˆ˜ aa๊ฐ€ ์ด ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ A ๊ฐ์ฒด ๋‚ด๋ถ€์—๋Š” ์‹ค์ œ ๋ฉ”์„œ๋“œ์˜ ์œ„์น˜ ์ •๋ณด๋งŒ ์ €์žฅ๋˜์–ด์žˆ๊ณ , ์‹ค์ œ print( )๋Š” ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ๋‹น์—ฐํ•˜๊ฒŒ "A ํด๋ž˜์Šค"๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.

B bb = new B( );๋Š” ์ฒ˜์Œ์— A ๊ฐ์ฒด ๋‚ด์˜ print( )๊ฐ€ ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ํ›„ B ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด A๊ฐ์ฒด์˜ ์‹ค์ œ print( )๋Š” ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ๋˜๊ณ  ๊ทธ ํ›„  B ๊ฐ์ฒด์˜ print( ) ๋ฉ”์„œ๋“œ๋„ ๊ฐ™์€ print( ) ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. ์ฆ‰ ํ›„์— ์ƒ๊ธด B์˜ print( ) ๋ฉ”์„œ๋“œ๊ฐ€ ๋จผ์ € ์ƒ๊ธด A์˜ print( ) ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ์–ด์“ฐ๊ธฐ, ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ bb.print( )๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด "B ํด๋ž˜์Šค"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

A ab = new B( )์ธ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž. ์ฒ˜์Œ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •์€ B bb = new B( );์™€ ๊ฐ™๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ ์ ์€ A ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ A ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ab.print( )๋Š” ์‹ค์ œ A ๊ฐ์ฒด์˜ print( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋˜๋Š”๋ฐ, A ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” print( ) ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฏธ B ๊ฐ์ฒด๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๊ฒฐ๋ก ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฐ’์€ "B ํด๋ž˜์Šค"๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋•Œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋ฎ์–ด์“ฐ๊ธฐ๋Š” ์•„๋‹ˆ๋‹ค. ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์€ ์ด์ „์— ์žˆ๋˜ ๊ฒƒ์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ์šด ํŒŒ์ผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์›๋ž˜ ์žˆ๋˜ ๊ฒƒ์— ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ฌ๋ผ ํƒ€๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 ๋ถ€๋ชจ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ

class Animal {
    void cry() {
         
    }
}

class Bird extends Animal {
    void cry() {
         System.out.println("์งน์งน")
    }
}

class Cat extends Animal {
    void cry() {
         System.out.println("๋ƒ์˜น")
    }
}

class Dog extends Animal {
    void cry() {
         System.out.println("๋ฉ๋ฉ")
    }
}

public class MethodOverrideing_1 {
     public static void main(String[] args) {
         
         Animal bb = new Bird();
         Animal cc = new Cat();
         Animal dd = new Dog();
         
         bb.cry();
         cc.cry();
         dd.cry();
     }
}
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ Animal ํƒ€์ž…์ด์ง€๋งŒ, ๊ฐ๊ฐ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋์œผ๋ฏ€๋กœ cry( ) ๋ฉ”์„œ๋“œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋‹ค. ์—ฌ๊ธฐ์„œ Animal ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์•„๋ฌด๋Ÿฐ ๊ธฐ๋Šฅ๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” cry( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ธฐ์— ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋ณด์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์€ ๋‹คํ˜•์  ํ‘œํ˜„์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค๋“ค์˜ ๊ฐ์ฒด๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ Animal ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งŒ์ผ ๋ถ€๋ชจ ํด๋ž˜์Šค์— cry( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ๋‹ค๋ฅธ ์ž์‹ ํด๋ž˜์Šค๋Š” cry( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

 

 

 

 ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ

์ด๋ฆ„์€ ๋™์ผํ•˜์ง€๋งŒ, ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ™์€ ๊ณต๊ฐ„์— ์ •์˜ํ•˜๋Š” ๊ฒƒ.

 

Q. ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ์ฐจ์ด์ ์€?

A. ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊นŒ์ง€ ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ผํ•œ ํŒŒ์ผ์„ ๊ฐ™์€ ๊ณต๊ฐ„์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋˜๊ณ , ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ๋‹ค๋ฅด์ง€๋งŒ ์ผ๋ฆ„๋งŒ ๋™์ผํ•œ ํŒŒ์ผ์„ ๊ฐ™์€ ๊ณต๊ฐ„์— ๋ณต์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

 

class Car {
    void sound1() {
         System.out.println("๋ถ€๋ฆ‰๋ถ€๋ฆ‰")
    }
    
    void sound2() {
        System.out.println("๋ถ€๋ฅด๋ฆ‰๋ถ€๋ฅด๋ฆ‰")
    }
}

class Car1 extends Car {
    void sound1() {
         System.out.println("๋นต๋นต")
    }
    
    void sound2(int a) {
         System.out.println("๋น ์•„์•™")
    }
}
์—ฌ๊ธฐ์„œ sound1์€ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋œ๋‹ค. ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ์™€ ๋ฆฌํ„ด ํƒ€์ž… ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. sound2๋Š” Car ํด๋ž˜์Šค์—์„œ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๋ฉ”์„œ๋“œ์˜€์ง€๋งŒ, ํด๋ž˜์Šค Car1์—์„œ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ •์ˆซ๊ฐ’ 1๊ฐœ๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๋‹ฌ๋ผ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด๋•Œ ํด๋ž˜์Šค Car1์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” ์ด 3๊ฐœ๊ฐ€ ๋œ๋‹ค. sound1์€ Car ํด๋ž˜์Šค์™€ Car1 ํด๋ž˜์Šค ๋ชจ๋‘ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ๋กœ 1๊ฐœ, Car์— ์žˆ๋Š” sound2 ๋ฉ”์„œ๋“œ, Car1์— ์žˆ๋Š” ์ •์ˆซ๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋ฐ›๋Š” sound2 ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ์ ‘๊ทผ์ง€์ •์ž

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

class A {
    protected void abc() {}
}

class B extends A {
    public void abc() {}
}

class C extends A {
    protected void abc() {}
}

class D extends A {
    void abc() {}
}

class E extends A {
    private void abc() {}
}
์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•  ๋•Œ ์ ‘๊ทผ์ง€์ •์ž์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋” ๋„“์€ ์ ‘๊ทผ์ง€์ •์ž๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค ํ–ˆ์œผ๋‹ˆ, void abc( ) ์™€ private void abc( )๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์ธ์Šคํ„ด์Šค ํ•„๋“œ์˜ ์ค‘๋ณต_ 340p

 

 ์ธ์Šคํ„ด์Šค ํ•„๋“œ์˜ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

class A {
    int m = 3;
}

class B extends A {
	int m = 4;
}
์ธ์Šคํ„ด์Šค ํ•„๋“œ๋Š” ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•ด๋„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ €์žฅ ๊ณต๊ฐ„์ด ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์‚ดํŽด๋ณด์•˜์„๋•Œ, ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ์˜์—ญ์— ๋ถ€๋ชจ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ์œ„์— ์ž์‹ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋ฐœ์ƒ๋œ๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ํ•„๋“œ์˜ ๊ฒฝ์šฐ B ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „ ๋ถ€๋ชจ ๊ฐ์ฒด A ๊ฐ์ฒด๊ฐ€ ๋จผ์ € ์ƒ์„ฑ๋  ๊ฒƒ์ด๊ณ  ๊ทธ ํ›„ ํด๋ž˜์Šค B์—์„œ ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง„ ๋ฉ”์„œ๋“œ ์ƒ์„ฑ ๊ณผ์ •๊ณผ ๋น„์Šทํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋Š” m=3๊ณผ m=4์ธ ์ด ๋‘ ๊ฐœ์˜ ํ•„๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์ €์žฅ๊ณต๊ฐ„์ด ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์ด ํฐ ์ฐจ์ด๊ฐ€ ๋˜๊ฒ ๋‹ค.

๋งŒ์•ฝ B b = new B( ); ์„ ์–ธํ•˜๊ณ  b.m์˜ ๊ฐ’์„ ํ™•์ธํ•  ๊ฒฝ์šฐ 4๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. b๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๋ฒˆ์ง€๊ฐ€ 100๋ฒˆ์ธ ๊ฒฝ์šฐ, 100๋ฒˆ์—๋Š” B ๊ฐ์ฒด์˜ m = 4 ๊ฐ’์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. A a = new B( )๋กœ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ A ํƒ€์ž…์ด๋ฏ€๋กœ A ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒƒ์ด๊ณ  ๊ทธ ๋ฒˆ์ง€๊ฐ€ 200์œผ๋กœ B ๊ฐ์ฒด์˜ ๋ฒˆ์ง€์™€ ๋‹ค๋ฅผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ์ฒด๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

์ •์  ํ•„๋“œ์˜ ์ค‘๋ณต

A.m = 3;
B.m = 4;

B b = new B();
b.m = 4;
์ •์  ํ•„๋“œ์˜ ์ €์žฅ ๊ณต๊ฐ„์€ ์ •์  ์˜์—ญ์˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋งŒ๋“ค์–ด์ง€๊ณ  ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•œ๋‹ค. ์Šคํƒ์— ํฌํ•จ๋œ A๊ฐ์ฒด์™€ B๊ฐ์ฒด์—๋Š” m์˜ ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ์ง€ ์•Š๊ณ , ํด๋ž˜์Šค ์˜์—ญ ์–ด๋””์— ์ €์žฅ๋˜์–ด์žˆ๋Š”์ง€ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํด๋ž˜์Šค A์™€ B ๋‚ด์— ํฌํ•จ๋œ ์ •์  ํ•„๋“œ์˜ ์ €์žฅ๊ณต๊ฐ„์€ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ •์ ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–ค์ง€ ์‚ดํŽด๋ณด๋ฉด, ์ •์ ํ•„๋“œ์™€ ๊ฐ™์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ •์ ๋ฉ”์„œ๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ๊ณต๊ฐ„์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

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

 

 

 

 


 

 

 

โœ”๏ธ   super_ 349p

 

super ํ‚ค์›Œ๋“œ

๋ถ€๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ํ•„๋“œ๋ช…์˜ ์ค‘๋ณต์œผ๋กœ ๊ฐ€๋ ค์ง„ ๋ถ€๋ชจ์˜ ํ•„๋“œ ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

class A {
    void abc() {
        System.out.println("A ํด๋ž˜์Šค์˜ abc()");
    }
}

class B extends A{
    void abc() {
        System.out.println("B ํด๋ž˜์Šค์˜ abc()");
    }
    
    void bcd() {
         super.abc();
    }
}
B bb = new B();

bb.bcd();
super์„ ์จ์„œ abc๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ A ํด๋ž˜์Šค์˜ abc( )๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

 

Q. this์™€ super์˜ ์ฐจ์ด์ ์€?

A. this๋Š” ์ž๊ธฐ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๋ช…์ด๋‹ค. this( ) ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์˜ ๋˜ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์ƒ์„ฑ์ž ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ํ•ญ์ƒ ์ฒซ ์ค„์— ์œ„์น˜ํ•ด์•ผํ•œ๋‹ค. super๋Š” ๋ถ€๋ชจ์˜ ๊ฐ์ฒด, super( )๋Š” ๋ถ€๋ชจ์˜ ์ƒ์„ฑ์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

 

class A {
    void abc() {
        System.out.println("A ํด๋ž˜์Šค์˜ abc()");
    }
}

class B extends A{
    void abc() {
        System.out.println("B ํด๋ž˜์Šค์˜ abc()");
    }
    
    void bcd() {
         abc();
    }
}
B bb = new B();

bb.bcd();

 

super์„ ์“ฐ์ง€ ์•Š๊ณ  abc( )๋ฅผ ์ž์‹ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์—์„œ ํ˜ธ์ถœํ•˜๊ฒŒ๋˜๋ฉด this ํ‚ค์›Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์‹คํ–‰๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋ž˜์Šค B์— ์žˆ๋Š” abc( ) ์‹คํ–‰ ์ฝ”๋“œ๋Š” ํด๋ž˜์Šค B ๋‚ด๋ถ€์— ์žˆ๋Š” abc( )๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋งŒ์•ฝ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๊ฐ€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์‹คํ–‰๋˜๊ธธ ์›ํ•˜๋Š” ๊ฒฝ์šฐ superํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

 

 

 

 super( ) ๋ฉ”์„œ๋“œ

class A {
    A() {
        this(3);
        System.out.println("A ์ƒ์„ฑ์ž1")
    }
    
    A(int a) {
        System.out.println("A ์ƒ์„ฑ์ž2")
    }
}

class B extends A {
    B() {
         this(3);
         System.out.println("B ์ƒ์„ฑ์ž1")
    }
    
    B(int a) {
         System.out.println("B ์ƒ์„ฑ์ž2")
    }
}
A aa1 = new A();
A aa2 = new A(3);

B bb1 = new B();
B bb2 = new B(3);
aa1์€ ํด๋ž˜์Šค A์— ์žˆ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ๊ฐ€์žฅ ์ฒซ ์ฝ”๋“œ๋Š” this(3)์œผ๋กœ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ •์ˆ˜๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด A(int a)๊ฐ€ ์‹คํ–‰๋˜๊ณ  "A ์ƒ์„ฑ์ž2"๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ๊ทธ ๋‹ค์Œ "A ์ƒ์„ฑ์ž1"์ด ์ถœ๋ ฅ๋œ๋‹ค. aa2๋Š” 3์„ ์ธ์ž๋กœ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค A์— ์žˆ๋Š” A(int a)๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ์ปดํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ๋ถ™์ด๋Š” ๊ฒƒ ์—†์ด "A ์ƒ์„ฑ์ž2"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

bb1์€ ๋ฉ”์„œ๋“œ B์— ์žˆ๋Š” this(3)๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค. this๋กœ ๋‚ด๋ถ€์— ์žˆ๋Š” B(int a)๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ์ด๋•Œ B(int a)์˜ ๊ฐ€์žฅ ์ฒซ ์ค„์—” super๊ฐ€ ๋ถ™๊ฒŒ๋œ๋‹ค. ๋ฌผ๋ก  ์ด super๋Š” ์ปดํŒŒ์ผ์ด ์ž๋™์ ์œผ๋กœ ๋ถ™์ธ ๊ฒƒ์ด๋‹ค. super๋กœ ์ธํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋˜๊ณ  ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž์— ์žˆ๋Š” this(3)์œผ๋กœ ์ธํ•ด A(int a)๊ฐ€ ์‹คํ–‰๋˜์–ด "A ์ƒ์„ฑ์ž2"๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ถœ๋ ฅ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ์€ "A ์ƒ์„ฑ์ž1"์ด ์ถœ๋ ฅ์œผ๋กœ A( ) ๋ฉ”์„œ๋“œ๋ฅผ ๋งˆ๋ฌด๋ฆฌ ์ง“๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์‹œ ํด๋ž˜์Šค B๋กœ ๋Œ์•„์™€ super๊ฐ€ ์ง„ํ–‰๋œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฏ€๋กœ "B ์ƒ์„ฑ์ž 2"๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ   B( ) ๋ฉ”์„œ๋“œ์˜ "B ์ƒ์„ฑ์ž1"๋กœ ๋งˆ๋ฌด๋ฆฌ๋œ๋‹ค. ๊ฐ์ฒด bb2๋Š” ํด๋ž˜์Šค B์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋งŒ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๋ฟ, ๋‚˜๋จธ์ง€ ๊ณผ์ •์€ ๋™์ผํ•˜๋‹ค.

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

 

 

 

 ์ •๋ฆฌ

super( )๋Š” ์ž์‹ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ๊ฐ€์žฅ ์ฒซ ์ค„์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค.

  this.๋Š” ๋ถ€๋ชจํด๋ž˜์Šค์™€ ์ž์‹ํด๋ž˜์Šค์— ์ค‘๋ณต๋˜๋Š” ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ž์‹ํด๋ž˜์Šค์—์„œ ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก this.๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

 

+ Recent posts