CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /Java์—์„œ ๋ฉ”์„œ๋“œ ์žฌ์ •์˜
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์—์„œ ๋ฉ”์„œ๋“œ ์žฌ์ •์˜

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์•ˆ๋…•! ์ด๋ฏธ Java ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•ด ๋งŽ์ด ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ํด๋ž˜์Šค์— ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์— ์ง๋ฉดํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์‚ฌ์šฉํ–ˆ์Œ์„ ๊ธฐ์–ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ณต์œ  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ด ๋™์ž‘์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๊นŒ? ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๋™๋ฌผ์„ ๋‚˜ํƒ€๋‚ด๋Š” Animal ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๊ทธ ์•ˆ์— speak ๋ฉ”์„œ๋“œ ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

public class Animal {

   public void speak() {

       System.out.println("Hello!");
   }
}
์ด์ œ ๋ง‰ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ์•„๋งˆ๋„ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ธ์ƒ์—๋Š” ๋งŽ์€ ๋™๋ฌผ์ด ์žˆ๊ณ  ๋ชจ๋‘ ๋‹ค๋ฅด๊ฒŒ '๋ง'ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์žฌ์ •์˜ ์ž‘๋™ ๋ฐฉ์‹ - 2์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋งํ•˜๊ธฐ ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ผ์˜น์„ ์œ„ํ•œ catSpeak() ๋ฉ”์„œ๋“œ, ํžˆ์‹ฑ์„ ์œ„ํ•œ snakeSpeak() ๋ฉ”์„œ๋“œ ๋“ฑ์„ ๋งŒ๋“œ๋Š” ๋Œ€์‹  speak()๋ฑ€์ด ์‰ญ์‰ญ ๊ฑฐ๋ฆฌ๊ณ , ๊ณ ์–‘์ด๊ฐ€ ์•ผ์˜นํ•˜๊ณ , ๊ฐœ๊ฐ€ ์ง–๋Š”๋‹ค. ๋ฉ”์„œ๋“œ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Wikipedia๋Š” '์˜ค๋ฒ„๋ผ์ด๋”ฉ'์ด๋ผ๋Š” ์šฉ์–ด์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ํ•˜์œ„ ํด๋ž˜์Šค ๋˜๋Š” ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ํ•ด๋‹น ์Šˆํผํด๋ž˜์Šค ๋˜๋Š” ํ•˜์œ„ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์—์„œ ์ด๋ฏธ ์ œ๊ณตํ•œ ๋ฉ”์„œ๋“œ์˜ ํŠน์ • ๊ตฌํ˜„์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์–ธ์–ด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งž์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ๊ฐ ์ž์‹ ํด๋ž˜์Šค์— ๊ณ ์œ ํ•œ ๊ตฌํ˜„์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๊ตฌํ˜„์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ์˜ ๊ตฌํ˜„์„ '๋Œ€์ฒด'ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์—์„œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ๋ด…์‹œ๋‹ค. Animal ํด๋ž˜์Šค ๋ฅผ ์ƒ์†ํ•˜๋Š” 4๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค .

public class Bear extends Animal {
   @Override
   public void speak() {
       System.out.println("Growl!");
   }
}
public class Cat extends Animal {

   @Override
   public void speak() {
       System.out.println("Meow!");
   }
}

public class Dog extends Animal {

   @Override
   public void speak() {
       System.out.println("Woof!");
   }
}


public class Snake extends Animal {

   @Override
   public void speak() {
       System.out.println("Hiss!");
   }
}
"๋‹ค์Œ์€ ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•œ ์ž‘์€ ์ƒํ™œ ๊ฟ€ํŒ์ž…๋‹ˆ๋‹ค. ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด IntelliJ IDE์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋กœ ์ด๋™ํ•˜๊ณ  Ctrl+O๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ ๋ฉ”๋‰ด์—์„œ "Override methods..."๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ถ•ํ‚ค ์‚ฌ์šฉ์— ์ต์ˆ™ํ•ด์ง€์„ธ์š”. ์ฒ˜์Œ๋ถ€ํ„ฐ โ€” ํ”„๋กœ๊ทธ๋žจ์„ ๋” ๋นจ๋ฆฌ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค!ํ•„์š”ํ•œ ๋™์ž‘์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
  1. ๊ฐ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

  2. ์šฐ๋ฆฌ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ๋™์ผํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์šฐ์—ฐ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘์„ ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ ์œ„์— @Override ์ฃผ์„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    ๋ฉ”์„œ๋“œ ์œ„์— @Override ์ฃผ์„์„ ๋ฐฐ์น˜ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ(๋ฐ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ)์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•Œ๋ฆฝ๋‹ˆ๋‹ค. '๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์žŠ๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๊ฒƒ์„ ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.'

  3. ์šฐ๋ฆฌ๋Š” ๊ฐ ํ•˜์œ„ ํด๋ž˜์Šค์— ํ•„์š”ํ•œ ๊ตฌํ˜„์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. speak() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋˜๋ฉด ๋ฑ€์€ ์‰ญ์‰ญ๊ฑฐ๋ฆฌ๊ณ  ๊ณฐ์€ ์œผ๋ฅด๋ ๊ฑฐ๋ฆฝ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ด…์‹œ๋‹ค:

public class Main {

   public static void main(String[] args) {

       Animal animal1 = new Dog();
       Animal animal2 = new Cat();
       Animal animal3 = new Bear();
       Animal animal4 = new Snake();

       animal1.speak();
       animal2.speak();
       animal3.speak();
       animal4.speak();
   }
}
์ฝ˜์†” ์ถœ๋ ฅ:
Woof!
Meow!
Growl!
Hiss!
ํ›Œ๋ฅญํ•œ! ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” Animal ๋ถ€๋ชจ ํด๋ž˜์Šค ์˜ ๊ฐœ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” 4๊ฐœ์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— 4๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ž์‹ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ ๊ฐœ์ฒด๋Š” ๊ณ ์œ ํ•œ ๋™์ž‘์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ฐ ์ž์‹ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์žฌ์ •์˜๋œ speak() ๋ฉ”์„œ๋“œ๋Š” Animal ํด๋ž˜์Šค ์˜ '๋„ค์ดํ‹ฐ๋ธŒ' speak() ๋ฉ”์„œ๋“œ (๋‹จ์ˆœํžˆ 'Hello!'๋ฅผ ํ‘œ์‹œํ•จ)๋ฅผ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ •์˜์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์žฌ์ •์˜ ์ž‘๋™ ๋ฐฉ์‹ - 3
  1. ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋Š” ๋ถ€๋ชจ ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ speak ๋ฉ”์„œ๋“œ์— String ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž์‹ ํด๋ž˜์Šค์˜ ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ์—๋„ String ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    
    public class Animal {
    
       public void speak(String s) {
    
           System.out.println("Hello! " + s);
       }
    }
    
    public class Cat extends Animal {
    
       @Override // Error!
       public void speak() {
           System.out.println("Meow!");
       }
    }
    

  2. ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋Š” ๋ถ€๋ชจ ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•œ ๋ฐ˜ํ™˜ ํ˜•์‹์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    
    public class Animal {
    
       public void speak() {
    
           System.out.println("Hello!");
       }
    }
    
    
    public class Cat extends Animal {
    
       @Override
       public String speak() {         // Error!
           System.out.println("Meow!");
           return "Meow!";
       }
    }
    

  3. ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ์˜ ์•ก์„ธ์Šค ํ•œ์ •์ž๋„ '์›๋ณธ' ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    
    public class Animal {
    	
          public void speak() {
    	
                System.out.println("Hello!");
          }
    }
    
    public class Cat extends Animal {
    
           @Override
           private void speak() {      // Error!
               System.out.println("Meow!");
           }
    }
    
Java์—์„œ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋‹คํ˜•์„ฑ(์ง€๋‚œ ์ˆ˜์—…์—์„œ ์„ค๋ช…ํ•œ OOP์˜ ์›์น™)์„ ๊ตฌํ˜„ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ฃผ์š” ์ด์ ์€ ์ด์ „์— ๋…ผ์˜ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์œ ์—ฐ์„ฑ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹จ์ˆœํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์ธ ํด๋ž˜์Šค ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํด๋ž˜์Šค๋Š” ํŠน์ • ๋™์ž‘(๊ฐœ ์ง–๋Š” ์†Œ๋ฆฌ, ๊ณ ์–‘์ด ์•ผ์˜น)์„ ๊ฐ€์ง€๋ฉฐ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด dogSpeak() , speakCat๊ณผ ๊ฐ™์€ ๋งŽ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹Œ ํ•˜๋‚˜์˜ speak ( ) ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค . () ๋“ฑ
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION