ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

 

 

< ์ด์ „ ์ •๋ฆฌ ๊ธ€  - ์ž์ฃผ ํ•จ๊ป˜ ์“ฐ์ด๋Š” static๊ณผ final >

 

 

Java ๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ž์ฃผ ํ•จ๊ป˜ ์“ฐ์ด๋Š” static๊ณผ final

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ธ์Šคํ„ด์Šค, ์ƒ์„ฑ์ž ๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)์™€ ์ธ์ž(Argument)์˜ ์ฐจ์ด๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ๋ณ€์ˆ˜๋ž€?๐Ÿชฝ"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."    โ–บ ๋ณ€์ˆ˜๋ณ€์ˆ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ’

post-this.tistory.com

 

 

 

< ์ž๋ฐ” ์™„์ „ ์ •๋ณต_ 10์žฅ ํด๋ž˜์Šค์˜ ์ƒ์†๊ณผ ๋‹คํ–ฅ์„ฑ >

 

[Java] ์ž๋ฐ” ์™„์ „ ์ •๋ณต_ 10์žฅ ํด๋ž˜์Šค์˜ ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ (2)

๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ      ์ด ์ฑ…์„ ๊ณ ๋ฅด๊ฒŒ ๋œ ์ด์œ ๋Š” ์นœ๊ตฌ์˜ ์ถ”์ฒœ์ด์—ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ ํ˜€์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์œ ๋กœ

post-this.tistory.com

 

 


 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

1. ๊ธฐ๋ณธ์ ์ธ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

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.print( )๋ฅผ ์‹คํ–‰ํ•˜๋ฉด A ํด๋ž˜์Šค์— ์žˆ๋Š” print ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

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

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

 

 

 

2. ์—…์บ์ŠคํŒ…๊ณผ ๋‹ค์šด์บ์ŠคํŒ…

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

class B extends A {
    @Override
    void print() {
        System.out.println("B ํด๋ž˜์Šค");
    }
    
    void printB() {
        System.out.println("B์—๋งŒ ์žˆ๋Š” ๋ฉ”์„œ๋“œ");
    }
}

public class MethodOverrideing_1 {
    public static void main(String[] args) {

        A aa = new A();   
        B bb = new B();   

        A ab = new B();  
        ab.print();       

        // ab.printB();  

        B b2 = (B) ab;    
        b2.printB();     
    }
}

 

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

๊ทธ๋Ÿฌ๋ฉด printB( ) ๋ฉ”์„œ๋“œ๋Š” B ํด๋ž˜์Šค์—๋งŒ ์žˆ๊ณ  A ํด๋ž˜์Šค์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ printB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ฐธ์กฐ ํƒ€์ž…๋„ ์‹ค์ฒด ๊ฐ์ฒด๋„ B์ธ B bb = new B( );๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ab๋ฅผ ๋‹ค์šด ์บ์ŠคํŒ…ํ•˜๋ฉด ๋œ๋‹ค.


๋‹ค์šด ์บ์ŠคํŒ…์€ ํƒ€์ž…์„ ๋‹ค์‹œ B b2 = (B) ab๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค. ์ด๊ฒƒ์„ ํ˜•๋ณ€ํ™˜์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

3. super( ), this( )

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);
ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๋˜‘๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์ƒ์„ฑ์ž์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด A aa1 = new A( ); ์ด๊ฒƒ์€ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ฝ”๋“œ์ด๋‹ค. super์™€ this๋Š” ์ƒ์„ฑ์ž ์•ˆ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. super๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ์‹œํ‚ค๋ฉฐ, ๋งŒ์ผ ์ƒ์„ฑ์ž์— super๋‚˜ this๊ฐ€ ์—†๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ super๋ฅผ ํฌํ•จ์‹œ์ผœ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  this๋Š” ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์žˆ๋Š” ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ์‹œํ‚จ๋‹ค.(์ƒ์„ฑ์ž๊ฐ€ 2๊ฐœ ์ด์ƒ ์žˆ์–ด์•ผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.) ์ฆ‰ this๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” ์ƒ์„ฑ์ž๋กœ ๊ฐ€์ง€ ์•Š๊ฒŒ ํ•ด์ค€๋‹ค.

B bb1 = new B( );๋ฅผ ์‚ดํŽด๋ณด์ž.

1) this(3)์œผ๋กœ ์ธํ•ด ๊ฐ™์€ ํด๋ž˜์Šค ์•ˆ์— ์žˆ์œผ๋ฉด์„œ, 3์ด๋ผ๋Š” ์ธ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” B(int a)๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
2) ๊ทธ๋Ÿฐ๋ฐ B(int a) ์ƒ์„ฑ์ž๋Š” this๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์ ์œผ๋กœ super๋ฅผ ๋„ฃ์–ด์ค„ ๊ฒƒ์ด๋‹ค.
3) super๋กœ ์ธํ•ด ๋ถ€๋ชจํด๋ž˜์Šค์— ์žˆ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž(A)๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค.
4) A ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž A์— this(3)์ด ์žˆ์œผ๋‹ˆ, intํ˜• ์ธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›๋Š” A ์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค.
5) A(int a)๊ฐ€ ์‹คํ–‰๋˜์–ด ๋“œ๋””์–ด! "A ์ƒ์„ฑ์ž2"๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.
6) ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์‹œ A ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž A๋กœ ๋Œ์•„์™€ "A ์ƒ์„ฑ์ž 1"์ด ์ถœ๋ ฅ๋œ๋‹ค.
7) ๋˜ ์ „์œผ๋กœ ๋Œ์•„๊ฐ€ B ํด๋ž˜์Šค์˜ B(int a)์˜ "B ์ƒ์„ฑ์ž 2"๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ 
8) ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์žฅ ์ฒ˜์Œ ํ˜ธ์ถœ๋˜์—ˆ๋˜ B ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž B์˜ "B ์ƒ์„ฑ์ž 1"์ด ํ˜ธ์ถœ๋œ๋‹ค.

๋งŒ์•ฝ์— A ab = new B( ); ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด๋ณธ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๊ฒฐ๊ตญ ์ž์‹ ํด๋ž˜์Šค B์˜ B( )๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ๊ณผ์ •๋ถ€ํ„ฐ ๋‹ต๊นŒ์ง€ ๋ชจ๋‘ ๊ฐ™๋‹ค.


 

 

4. ๋ฌธ์ œ 

- ์ˆ˜์ œ๋น„ ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ 2023 ์ฑ… ๋ฌธ์ œ ๋ฐœ์ทŒ

class Parent {
    public Parent() {
        System.out.print("A");
    }
    public void fn() {
        System.out.print("B");
    }
    public void fnA() {
        System.out.print("C");
    }
}

class Child extends Parent {
    public Child() {
        System.out.print("D");
    }
    public void fn() {
        System.out.print("E"); 
    }
    public void fnB() {
        System.out.print("F");
    }
}
Child c = new Child( );
c.fn( );
c.fnA( );

 

 


 

 

1) Child c = new Child( );๋กœ Child ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์œผ๋‹ˆ Child( )๊ฐ€ ํ˜ธ์ถœ๋  ๊ฒƒ์ด๋‹ค. 
2) ๊ทธ๋Ÿฐ๋ฐ Child( ) ๋‚ด๋ถ€์— this๊ฐ€ ์—†๋‹ค. (๋ฌผ๋ก  this๋ฅผ ์“ธ ์ˆ˜ ์—†๋‹ค, ์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋ผ์„œ)
3) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์ ์œผ๋กœ super๋ฅผ ๋„ฃ์–ด ๋ถ€๋ชจ ํด๋ž˜์Šค Parent์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
4) Parent ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์–ด "A"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
5) ๋‹ค์‹œ Child ์ƒ์„ฑ์ž๋กœ ๋Œ์•„์™€์„œ "B"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

6) c.fn( );์€ Child ํด๋ž˜์Šค์— fn ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋‹ˆ "E"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
7) c.fnA( );์€ fnA๊ฐ€ Parent ํด๋ž˜์Šค์— ์žˆ์ง€๋งŒ Child๊ฐ€ Parent ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๋ฐ›๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ์—†์ด Parent ํด๋ž˜์Šค์˜ fnA๊ฐ€ ์‹คํ–‰๋˜์–ด "C"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.



1.
Parent cp = new Child();
cp.fn();
cp.fnA();

2.
Child pc = new Parent():
cp.fn();
cp.fnA():

3.
Parent p = new Parent();
cp.fnB();
์œ„์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ?

1๋ฒˆ์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ์—†์ด ๋‹ค ์‹คํ–‰์ด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ 2๋ฒˆ์˜ ๊ฒฝ์šฐ Child pc = new Parent( );์—์„œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์ธ Child์ธ๋ฐ ํ•˜์œ„ ํด๋ž˜์Šค์ธ ์ฐธ์กฐ ํƒ€์ž… ์•ˆ์— ์ƒ์œ„ ํด๋ž˜์Šค์ธ Parent ๊ฐ์ฒด๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3๋ฒˆ๋„ ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค. Parent๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ํ•˜์œ„ ํด๋ž˜์Šค์ธ Child์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ์œ„ํ•จ์ด ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์€ ์ฐธ์กฐ๋ณ€์ˆ˜ ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ