• ์ƒ์†

    2022. 5. 17.

    by. JuneBee

    728x90
    ๋ฐ˜์‘ํ˜•

    Inheritance (์ƒ์†)

    ๐Ÿคฆ๐Ÿป‍โ™€๏ธ ์ƒ์†์˜ ๊ด€๊ณ„๋Š” is - a ๊ด€๊ณ„์ด๋‹ค

    <1> ์ •์˜

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

    ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๋งด๋ฒ„๋ฅผ ๋ฌผ๋ ค๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๊ณ  ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค

    ํ‚ค์›Œ๋“œ : extends

    public class ๋ถ•์–ด๋นตํ‹€ {
    	String product_name;
    	String fillings;
    	int age ; //unit - min
    	
    	void coolDown();
    	void eaten ();
    }
    
    public class ๋ถ•์–ด๋นต extends ๋ถ•์–ด๋นตํ‹€{
    boolean isCarp ; 
    void curse() {}
    }
    

    ๐Ÿงธ์ƒ์†์„ ํ•  ๋•Œ, ๋ถ€๋ชจ์˜ ์ƒ์„ฑ์ž์™€ ์ดˆ๊ธฐํ™” ๋ธ”๋ก์€ ์ƒ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค !

    ์‹ค์Šต

    ๋ถ•์–ด๋นต ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ๋ถ•์–ด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค. ๋ถ•์–ด์ธ๋ฐ ๋ถ•์–ด๋นต์„ ์ƒ์†๋ฐ›์œผ๋ฉด, ์–ต์šธํ•œ ๋ถ•์–ด๊ฐ€ ์ €์ฃผํ• ๊ฒƒ์ด๋‹ค.

    public class ๋ถ•์–ด๋นต{
    
    	//์†์„ฑ
    	String product_name, fillings;
    	int age;
    
    	//๊ฐ€๋Šฅ
    	void coolDown(){
      System.out.println("์‹์–ด๋ฒ„๋ ธ๋‹ค...");
     }
    	void eaten() { 
      System.out.println("์‚ด๋ ค์ค˜...");
     } 
    
    }
    
    public class ๋ถ•์–ด extends ๋ถ•์–ด๋นต{
    /*๊ณ ์œ  ์†์„ฑ, ๊ธฐ๋Šฅ์„ ์ •์˜*/
    
    //์†์„ฑ
    boolean isCarp;
    
    //๊ธฐ๋Šฅ
    void curse{
    	String cursed= isCarp==true? 
      "์ €์ฃผํ• ๊ฑฐ์•ผ ์ธ๊ฐ„.." : "๋”ฐ๋ˆ๋”ฐ๋ˆ";
    	System.out.println(cursed);
    }
    
    }
    
    public class ๋ถ•์–ด๋นต๋งŒ๋“ค๊ธฐ{
    public static void main(String[] args){
    //๋ถ•์–ด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž
    ๋ถ•์–ด ๊ธˆ๋ถ•์–ด = new ๋ถ•์–ด();
    ๋ถ•์–ด ํŒฅ = new ๋ถ•์–ด ();
    
    //๋ถ•์–ดํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    ๊ธˆ๋ถ•์–ด.isCarp = true;
    ํŒฅ.isCarp = false;
    
    /*๋ถ•์–ด ํด๋ž˜์Šค์—๋Š” ๋‚˜์ด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ถ•์–ด๋นต์—์žˆ๋Š” age, fillings, name์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค*/
    ๊ธˆ๋ถ•์–ด.age = 15, ํŒฅ.age = 1;
    ๊ธˆ๋ถ•์–ด.productName = "๋ถ•์–ด๊ฐ€ ์žˆ๋Š” ๋ถ•์–ด๋นต", ํŒฅ.productName="๋ถ•์–ด ์—†๋Š” ๋ถ•์–ด๋นต";
    ๊ธˆ๋ถ•์–ด.fillings = "๋ถ•์–ด๊ฐ€ ๋“ค์–ด์žˆ์–ด์šฉ" ,ํŒฅ.fillings = "ํŒฅ์ด ๋“ค์–ด์žˆ์–ด์šฉ";
    
    ๊ธˆ๋ถ•์–ด.curse(); //"์ €์ฃผํ• ๊ฑฐ์•ผ ์ธ๊ฐ„..." ์„ ์ถœ๋ ฅํ•œ๋‹ค
    ํŒฅ.curse();     //"๋”ฐ๋ˆ๋”ฐ๋ˆ" ์„ ์ถœ๋ ฅํ•œ๋‹ค
    ๊ธˆ๋ถ•์–ด.carp();  // ๋ถ•์–ด๋นต ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค  
    }
    }
    

    ์œ„์˜ ์ฝ”๋“œ์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ์‚ดํŽด๋ณด์ž.

     

    ์ƒ์†์˜ ๊ด€๊ณ„๋Š” is a ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ค

    ๐ŸŸ๊ธˆ๋ถ•์–ด is a ๋ถ•์–ด๋นต

    ๐ŸŸํŒฅ๋ถ•์–ด๋นต is a ๋ถ•์–ด๋นต

    ๐ŸŸ๋ถ•์–ด๋นต is an Object

    ๐ŸŸ ๋ถ•์–ด๋นต๊ณผ ํŒฅ๋ถ•์–ด๋นต์˜ ๊ด€๊ณ„ : ๋ถ•์–ด๋นต↔ํŒฅ๋ถ•์–ด๋นต

    ๐ŸŸ Object์™€ ํŒฅ๋ถ•์–ด๋นต์˜ ๊ด€๊ณ„ : ์˜ค๋ธŒ์ ํŠธ↔ํŒฅ๋ถ•์–ด๋นต

    ๐ŸŸ ํŒฅ๋ถ•์–ด๋นต๊ณผ ๊ธˆ๋ถ•์–ด์˜ ๊ด€๊ณ„ : ๊ธˆ๋ถ•์–ด โ“ํŒฅ๋ถ•์–ด๋นต ๊ธˆ๋ถ•์–ด (๋‰˜๊ตฌ์Šˆ..?) - ํŒฅ๋ถ•์–ด๋นต(ํ˜•๋‹˜..)

    <2> ๋‹จ์ผ ์ƒ์†

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

    ์œ„์˜ UML ์—์„œ ๋ถ•์–ด๋Š” ๋ถ•์–ด๋นต์„ ์ƒ์†๋ฐ›์•„์•ผํ•˜๋Š” ์šด๋ช…์— ์ฒ˜ํ•ด์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ถ•์–ด๋Š” ๋ฌผ๊ณ ๊ธฐ๊ธฐ์— ๋˜ ๋ฌผ๊ณ ๊ธฐ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„๋ณผ๊นŒ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒŒ ๋ฌด์Šจ์ผ์ธ๊ฐ€.. ๋ฌผ๊ณ ๊ธฐ์™€ ๋ถ•์–ด๋นต ํด๋ž˜์Šค ๋ชจ๋‘ ์ฟจ๋‹ค์šด ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ๋ฌผ๊ณ ๊ธฐ์˜ ์ฟจ๋‹ค์šด ๋งค์„œ๋“œ๋Š” ์ˆ˜์˜์„ ํ•˜๋‹ค ์ž ์‹œ ์‰ฌ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์กŒ์ง€๋งŒ, ๋ถ•์–ด๋นต์˜ ์ฟจ๋‹ค์šด์€ ์Œ์‹์ด ์ฐจ๊ฒŒ ์‹๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋•Œ, ๋ถ•์–ด๋Š” ๋”œ๋ ˆ๋งˆ์— ๋น ์ง„๋‹ค...

    ์ด๋Ÿฐ ์ƒํ™ฉ์„ ๋ชจ๋ฉดํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”๋Š” ์ƒ์†์„ ํ•˜๋‚˜๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ์ •ํ–ˆ๋‹ค ์˜ค๋นค ๋„ˆ๋ฌด๊ทน๋‹จ์ ์ด์•ผ..

    ๊ทธ๋ ‡๋‹ค๋ฉด ์ƒ์† ์™ธ์—๋Š” ํด๋ž˜์Šค๋ฅผ ์žฌํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

    ํฌํ•จ๊ด€๊ณ„

    ์ƒ์† ์ด์™ธ์— ํด๋ž˜์Šค๋ฅผ ์žฌํ™œ์šฉ ํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐœ ์ด์ƒ์˜ ํด๋ž˜์Šค์—์„œ ํŠน์„ฑ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ•˜๋‚˜๋Š” ์ƒ์†, ๋‚˜๋จธ์ง€๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค

    ๐Ÿคฆ๐Ÿป‍โ™€๏ธ ํฌํ•จ ๊ด€๊ณ„๋Š” has - a ๊ด€๊ณ„์ด๋‹ค

    public class ๋ฌผ๊ณ ๊ธฐ{
     void swim() { System.out.println("์–ดํ‘ธ์–ดํ‘ธ~"); }
     void coolDown(){ System.out.println("ํ—ฅํ—ฅ..");	} }
    
    public class ๋ถ•์–ด2 extends ๋ถ•์–ด๋นต{ //is a ๊ด€๊ณ„ (๋ถ•์–ด๋นต์„ ์ƒ์†๋ฐ›์€ ๋ถ•์–ด)
    	๋ฌผ๊ณ ๊ธฐ ๋ถ•์–ด;                     //has a ๊ด€๊ณ„ (๋ฌผ๊ธฐ๊ฐ€ has a ๋ถ•์–ด)
    	boolean isCarp;                 //๊ณ ์œ ์˜ ์†์„ฑ, ๊ธฐ๋Šฅ
    	void coolDown(){
      if (isCarp){๋ถ•์–ด.swim();}       //๋ถ•์–ด๋ฉด ํ—ค์—„์นœ๋‹ค
      else{ System.out.println("๋ถ•์–ด๋นต์€ ์ˆ˜์˜ ๋ชปํ•ด");}} } //ํŒฅ์€ ํ—ค์—„ ๋ชป์ณ..
    
    public class ๋ถ•์–ด๋นต๋งŒ๋“ค๊ธฐ{
    public static void main(String[]args)
    {
    //๋ถ•์–ด ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
    ๋ถ•์–ด ๊ธˆ๋ถ•์–ด = new ๋ถ•์–ด(); 
    ๋ถ•์–ด ํŒฅ = new ๋ถ•์–ด ();
    
    //๋ถ•์–ดํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    ๊ธˆ๋ถ•์–ด.isCarp = true;
    ํŒฅ.isCarp = false;
    
    //๊ณ ์œ  ๊ธฐ๋Šฅํ™œ์šฉ
    ๋ถ•์–ด.swim(); //์–ดํ‘ธ์–ดํ‘ธ!
    ํŒฅ.swim();   //๋ถ•์–ด๋นต์€ ์ˆ˜์˜๋ชปํ•ด..
    }
    }
    
    ๐Ÿคฆ๐Ÿป‍โ™€๏ธ ์–ธ์ œ ํฌํ•จ์„ ์“ฐ๊ณ  ์–ธ์ œ ์ƒ์†์„ ์จ์•ผ ํ• ๊นŒ?

    ๐Ÿงธ ๋ฌธ๋ฒ•์ ์ธ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๊ด€์ ์— ๋”ฐ๋ผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค ๐Ÿงธ

    1. ์ƒ์† is -a ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•˜๋Š”๊ฐ€?
    2. ํฌํ•จ has-a ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•˜๋Š”๊ฐ€?

    ๐Ÿ†š ๋ถ•์–ด is a ๋ถ•์–ด๋นต โž•๋ถ•์–ด has a ๋ฌผ๊ณ ๊ธฐ ๐Ÿ†š ๋ถ•์–ด is a ๋ฌผ๊ณ ๊ธฐ โž•๋ถ•์–ด has a ๋ถ•์–ด๋นต

    2๋ฒˆ์ด ๋‚˜์•„ ๋ณด์ด์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ถ•์–ด๋นต ๋งŒ๋“ค๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ๋ฒˆ์จฐ ๊ด€๊ณ„๋กœ ์ˆ˜๋ฆฝ. ์ƒ์†์€ ํ•œ๋ฒˆ๋ฟ์ด๋‹ˆ ์‹ ์ค‘ํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๊ฒฐ์ •ํ•˜์ž

    ์ธํ„ฐํŽ˜์ด์Šค

    ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด extends ๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํด๋ž˜์Šค ์ƒ์†๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜ผ๋ˆ์„ ์ฃผ๋Š” ์ผ์ด ์—†์–ด ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

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

     ๐Ÿคฆ๐Ÿป‍โ™€๏ธ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ํ•˜๋Š”์ผ์€ ๊ฐ™๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ ๋‹ค๋ฅด๊ฒŒ ํ•˜์—ฌ ์กฐ๊ฑด์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋Š” ํ–‰์œ„์ธ๋ฐ, ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๊ฐ™์€ ์กฐ๊ฑด์—์„œ ํ•˜๋Š” ์ผ์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋Š”๊ฒƒ์ด๋‹ค

    ๋งค์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋ž€, ์กฐ์ƒ ํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ ํ•ฉํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

    public class Fish{
    void swim(){
    System.out.println("์–ดํ‘ธ์–ดํ‘ธ");
    }
    }
    
    public class ๋ถ•์–ด extends Fish{
    @override //annotation
    void swim(){ //์žฌ์ •์˜ 
    System.out.println("๋А๋ฆฟ๋А๋ฆฟ");}
    }
    

    ๊ธฐ์กด์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ๋ง๊ทธ๋Œ€๋กœ override ํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค. ๋ถ•์–ด์™€ ์ฐธ์น˜๋Š” ์ˆ˜์˜ํ•˜๋Š” intensity ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ๊ฐ swim ์ด๋ž€ ๊ธฐ๋Šฅ์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๊ฐ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๊ณ ์ณ์„œ ์“ฐ๋Š” ๊ฒƒ์ž„ (๋ฎ์–ด ์“ด๋‹ค๊ณ  ๋ณด๋ฉด ํŽธํ•จ)

    ์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ ์กฐ๊ฑด

    1. ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค
    2. ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜, ํƒ€์ž…, ์ˆœ์„œ๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค
    3. ๋ฆฌํ„ด ํƒ€์ž…์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค
    4. ์ ‘๊ทผ ์ œํ•œ์ž๋Š” ๋ถ€๋ชจ๋ณด๋‹ค ๋ฒ”์œ„๊ฐ€ ๋„“๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•œ๋‹ค
    5. ์กฐ์ƒ๋ณด๋‹ค ๋” ํฐ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์—†๋‹ค

    <4> ์˜ค๋ธŒ์ ํŠธ ํด๋ž˜์Šค

    ์˜ค๋ธŒ์ ํŠธ ํด๋ž˜์Šค๋Š” ๊ฐ€์žฅ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ, ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์กฐ์ƒ์ด๋‹ค. ์ฆ‰, ์˜ค๋ธŒ์ ํŠธ์˜ ๋งด๋ฒ„๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๋งด๋ฒ„๊ฐ€ ๋œ๋‹ค

     

    <5>Super ํ‚ค์›Œ๋“œ

    this ๋ฅผ ํ†ตํ•ด ๋งด๋ฒ„์— ์ ‘๊ทผํ–ˆ๋“ฏ์ด super ๋ฅผ ํ†ตํ•ด ์กฐ์ƒ ํด๋ž˜์Šค ๋งด๋ฒ„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค super. ์„ ์ด์šฉํ•ด ์กฐ์ƒ์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ์กฐ์ƒ์˜ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉ ํ•œ๋‹ค

    void swim(){
    if(isCap) { ๋ถ•์–ด.swim();}
    else{
     System.out.println("๋ถ•์–ด๋นต์€ ์ˆ˜์˜๋ชปํ•ด");
    }
    }
    
    void swim() {
    if(isCarp){ ๋ถ•์–ด.swim();}
    else{ 
    super.swim();} //์กฐ์ƒํด๋ž˜์Šค์˜ ์ฝ”๋“œ ํ˜ธ์ถœ
    
    }
    
    1. ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„ ์‚ฌ์šฉ๋œ ์œ„์น˜์—์„œ ์ ์  ํ™•์žฅํ•ด๊ฐ€๋ฉฐ ์ฒ˜์Œ ๋งŒ๋‚œ ์„ ์–ธ๋ถ€์— ์—ฐ๊ฒฐ๋œ๋‹ค method ๋‚ด๋ถ€ → ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋งด๋ฒ„ ๋ณ€์ˆ˜ → ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋งด๋ฒ„ ๋ณ€์ˆ˜

    1๏ธโƒฃ ์•„๋ž˜ ํด๋ž˜์Šค์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒํ•ด๋ณด์‹œ์˜ค

    2๏ธโƒฃ method์˜ x๋ฅผ ์ฃผ์„ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒํ•ด๋ณด์‹œ์˜ค

    3๏ธโƒฃ child ์˜ x ๋„ ์ฃผ์„ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒํ•ด๋ณด์‹œ์˜ค

    4๏ธโƒฃ Parent ํด๋ž˜์Šค์˜ x๋งŒ ์ฃผ์„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒํ•ด ๋ณด์‹œ์˜ค

    class Parent{ String x = "parent";}
    
    class Child extends Parent{
    String x = "Child";   //memeber ๋ณ€์ˆ˜
    void method(){
    String x = "method";  //local ๋ณ€์ˆ˜
    System.out.println("X: " +x);
    System.out.println("this.x: " + this.x);
    System.out.println("super.x: " + super.x);
    }
    }
    
    class ScopeTest{
    main(){ //main์ฃผ์ €๋ฆฌ ์ƒ๋žตํ–‡์Œ ใ…Ž..
    Child child = new Child();
    child.method();
    }
    }
    

    1๏ธโƒฃ ์˜ˆ์ƒ ๊ฒฐ๊ณผ X: method this.x: child super.x: parent

    2๏ธโƒฃ ์˜ˆ์ƒ ๊ฒฐ๊ณผ X: Child this.x : Child super.x : parent

    3๏ธโƒฃ ์˜ˆ์ƒ ๊ฒฐ๊ณผ X: parent this.x: parent super.x: parent;

    4๏ธโƒฃ ์˜ˆ์ƒ๊ฒฐ๊ณผ X: method this.x: Child super.x: null ERROR

    โญthis ๋ž€ ํ‚ค์›Œ๋“œ๋Š” ๋งด๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋œปํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์—, 1๋ฒˆ ๋ฌธ์ œ์—์„œ this.x๋ฅผ ํ–ˆ์„๋•Œ void ์•ˆ์— ์„ ์–ธ๋œ ๋กœ์ปฌ๋ณ€์ˆ˜(์ง€์—ญ๋ณ€์ˆ˜)์ธ method ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋งด๋ฒ„๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋‹ค!

     

    2. this() ์™€ super()

    (1) this () ๊ฐ€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋“ฏ์ด, super() ๋Š” ์กฐ์ƒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ

      ๐Ÿงธ ์กฐ์ƒ ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋งด๋ฒ„๋“ค์€ ์กฐ์ƒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ค„์ ธ์„œ ์žฌํ™œ์šฉ

      ๐Ÿงธ ์ž์‹ ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋งด๋ฒ„๋“ค๋งŒ ์ž์‹ ํด๋ž˜์Šค ์ƒ์„ฑ์ž์—์„œ ์ดˆ๊ธฐํ™” 

    (2) super()๋Š” ์ž์‹ ํด๋ž˜์Šค ์ƒ์„ฑ์ž์˜ ๋งจ ์ฒซ์ค„์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

      ๐Ÿงธ ์ƒ์„ฑ์ž์˜ ์ฒซ์ค„์—๋งŒ this() ๋˜๋Š” super() ๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค

    (3) ๋ช…์‹œ์ ์œผ๋กœ this() ๋˜๋Š” super() ์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ super()์„ ์‚ฝ์ž…ํ•ด์ง„๋‹ค

      ๐Ÿงธ๋งจ ์ƒ์œ„ Object๊นŒ์ง€ ๊ฐ์ฒด๊ฐ€ ๋‹ค ๋งŒ๋“ค์–ด์ง

    class Parent {
    String name;
    	Parent(String name){
       //super(); -> ์˜ค๋ธŒ์ ํŠธ์˜ ๊ธฐ๋ณธ์ƒ์„ฑ์ž ํ˜ธ์ถœ. ์•„๋ฌด๊ฒƒ๋„ ์•ˆ์จ์žˆ์œผ๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ๋ถˆ๋ฆ„
    	 this.name = name; //this์™€ super๋Š” ๋งจ ์ฒซ์ค„๋งŒ ๊ฐ€๋Šฅ
      }
    }
    
    728x90
    ๋ฐ˜์‘ํ˜•

    '๐Ÿ““ STUDY > JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    ์บก์Аํ™”  (0) 2022.05.17
    ๋‹คํ˜•์„ฑ  (0) 2022.05.17
    ์ถ”์ƒํ™”  (0) 2022.05.17
    ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (1) 2022.05.17
    Class Case Exception  (0) 2022.05.17

    ๋Œ“๊ธ€