2013년 1월 29일 화요일

헤드퍼스트 OOAD 들어가기 전 워밍업 (상속, 다형성)

일단 아래 그림을 보자.


두 클래스를 표현한 다이어그램이 있다.

부모가 자식에게 내리 사랑이니 화살표가 잘못된거 아니냐고 따질수도 있는데.

원래 표기법이 이렇다고한다 -0- 

자식이 부모에게 속한다고 표현을... 하여간 이리 아시고

자~ 이걸 소스로 표현해보자 (자바로 설명하는 이유는.... 책이 자바로 설명되어 있으니깐!)

pulbic class Jet extends Airplane {
   private static final int MULTIPLIER = 2;
   public Jet() {
      super()
   }
   public void setSpeed(int speed) {
      super.setSpeed(speed * MULTIPLIER);
   }
   public void accelerate() {
      super.setSpeed(getSpeed() * 2);
   }
}

라고 표현을 했다. 

extends b 는 a가 b를 상속 받겠다는 뜻이다.

super() 는 클래스가 상속한 클래스를 가르킨다. 
즉, Jet의 슈퍼 클래스인 Airplane 의 생성자를 호출하겠다는 뜻이다.

1줄 요약: 상속은 다른 클래스를 기반으로 클래스를 만들게 하고, 중복되는 코드를 피할 수 있게 하는 것.

-다형성 이란?-

다형성 역시 아까  윗 그림을 통해 설명할 수 있다. 위로 올리기 귀찮으니 다시 올린다.


다형성은 상속과 관련이 있다. 한클래스가 다른 클래스를 상속하면, 

다형성은 서브 클래스(Jet)가 슈퍼클래스(Airplane)를 대신할 수 있도록 허용한 것이다.

즉, 코드로 표현하자면.....

Airplane plane = new Airplane();  을 

Airplane plane = new Jet(); 로 표현할 수 있다는 것이닷!!

그럼 다형성을 쓰는 이유가 뭘까??

만약 비행기라는 커다란 클래스가 있다면 비행기에는 필수적인 요소가 들어있다.
하지만 세세하게는 없다는 것이다.
하늘을 난다는 것은 같지만 로켓에는 날개가 없고, 아이언맨도 날지만 날개가 없다. 
쓰는 연료도 다르고, 탑승객 수도 다르다.
이런 세세하고 디테일한 모습은 서브클래스를 만들어서 추가를 하면 되는 것이다.
애초에 비행기라는 슈퍼클래스를 이어 받았으니 코드 중복을 막을 수 있다.

상속과 다형성을 쓰는 이유 = 코드 중복을 막자!! 









댓글 없음:

댓글 쓰기