'메소드 오버로딩'에 해당되는 글 1건

  1. 2007.12.04 자바공부-1.메소드 오버로딩

메소드 오버로딩

 

음악가와 음악가가 다루는 악기들 그러니까 바이올린이라던가 플룻,피아노,첼로등과의

관계는 자바에서 메소드 오버로딩에 관한 개념을 이야기 할 때 좋은 예제가 됩니다.

 

같은 이름의 메소드를 갖고 있는 클래스들

 

음악가는 보통 한 두가지 이상의 연주악기를 다룰 수 있습니다.

대개 피아노를 연주할 수 있으며, 바이올리도 연주할 수 있고, 때로는 플룻도 연주 할 수

있습니다. 음악가는 연주악기가 다르면, 연주악기에 따라 적절하게 연주하는 방법을 바꾸어

가며 해당 연주악기를 연주를 할 수 있습니다.

연주하는 악기가 제각기 다르고,바뀌더라도 음악가가 악기를 가지고 연주를 한다는 그

행위는 항상 같습니다.

이런 개념은 메소드 오버로딩을 활용하는 좋은 예가 됩니다.

 

자바로 음악을 연주하는 연주가와 악기를 만들어 보겠습니다.

 

플룻을 만듭니다.

 

package instrument;

public class Flute {

                           public void sound() {

                                        System.out.println("play the flute");

                           }

}

예제 4 - 1 Flute.java

 

바이올린을 만듭니다.

package instrument;

public class Violin {

                           public void sound() {

                                        System.out.println("play the violin");

                           }

}

예제 4 - 2 Violin.java

 

플룻과 바이올린 클래스는 특별한 것은 없고, 모두 sound()라는 메소드가 있는데

호출하게 되면 플룻은 플룻소리를 내고, 바이올린을 바이올린 소리를 냅니다.

실제로 소리를 내면 좋겠지만 형편상 소리 내는 것 대신 메시지를 화면에 출력을 합니다.

 

연주자를 만들어 보겠습니다.

연주자는 악기를 연주할 수 있으니까 play라는 이름으로 메소드를 가지는게 어울리겠지요.

 

import instrument.*;

public class Player {

             public void play(Violin v) {

                           v.sound();

             }

             public void play(Flute f) {

                           f.sound();

             }

             public static void main(String[] args) {

                           Player player = new Player();

                           player.play(new Flute());                  // Flute 를 연주합니다.

                           player.play(new Violin());                 // Violin을 연주합니다.

             }

}

예제 4 - 3 Player.java

 

Player 클래스는 play 메소드를 통해서 해당 악기의 소리를 냅니다.

연주자는 플룻도 연주할 수 있고, 바이올린도 연주할 수 있기 때문에 메소드 오버로딩을

통해서 play 라는 이름하나로 여러가지의 악기를 연주할 수 있게 해놓았습니다.

 

만약 메소드 오버로딩을 사용하지 않는다면 play 라는 이름을 여러 개로 나누어

void playViolin(Violin v), void playFlute(Flute v)등으로 play라는 메소드를 여러 개의

이름으로 나누어야 합니다.

 메소드 오버로딩을 사용하면  프로그램의 가독성(readability)이 상당히 좋아 지고,

메소드 이름을 일관되고,직관적으로 생각할 수 있게 끔 만들 수 있습니다.

Player 클래스는 play 메소드에 Violin이 인자로 오거나 Flute가 인자로 오거나 어떤

경우라도 적절히 연주할 수 있습니다. Violin이 인자로 오게되면 public void play(Violin v)

메소드가 호출이되고, Flute가 인자로 오게 되면 public void play(Flute f)메소드가 호출

됩니다. 자바 버추얼 머신이 오버로딩된 메소드 인자에 오는 데이터형 정보에 따라서

동적으로 가장 적절한 메소드를 호출해주기 때문입니다.


 

사용자 삽입 이미지

 
 그림 4 - 1 [compile run (Violin.java Flute.java Player.java) ]

Posted by
,