Whiteship's Note

냄새 나는 Switch 코드와 다형성

Java : 2006. 11. 30. 16:02


원문 : Switch Statement code smell and polymorphism
위 글을 보면서 정리하고 있습니다.

switch-case 문을 사용한 소스코드를 보겠습니다.

위 코드를 보시면 swtich-case 문이 두 개의 메소드에서 중복이 되며 이것은 리팩토링이 필요하다는 것을 뜻합니다.

이 코드는 instanceOf 연산자를 사용해서 간추릴 수는 있지만 여전히 중복이 존재합니다. 이럴 때 다형성을 사용하려면 먼저 AbstractShape 클래스나 Shape라는 인터페이스를 만듭니다. 그리고 이를 구현 하거나 상속 받도록 구성합니다.



출처 : http://photos1.blogger.com/blogger/2606/2479/1600/ClassDiagram1.gif

위 UML 대로 코딩한 소스 코드는 다음과 같습니다.

이제 Client 코드에서는 switch 문이 사라집니다.
public class Client {
  private
Shape shape;
  ...
  public double calculateArea() {
      return
shape.getArea();
  }
  public double calculatePerimeter() {
      return
shape.getPerimeter();
  }
}

Clinet의 코드가 처음 것에 비해 굉장히 단순해 졌으며 유연해 졌습니다. 새로운 도형이 추가 되어도 그 도형이 Shape 인터페이스만 구현했다면 이 코드는 수정될 필요가 없어졌습니다.

책임이라는 관점에서 살펴본다면 처음의 Client 코드는 도형의 세부 길이 까지 너무 많은 걸 알고 었는데 반해 여기서는 도형이 뭘 할 줄 아느냐만 (메소드만) 을 이용하고 있습니다.

인터페이스와, 다형성을 사용한 swich문의 중복과 coupling을 해결한 재밌는 글이였습니다.

'Java' 카테고리의 다른 글

... 가변인수(varargs)  (2) 2006.12.11
for each 구문 사용법  (0) 2006.12.11
JUnit Reloaded  (0) 2006.12.07
I/O Stream 구성  (0) 2006.12.07
Checked Exception VS Unchecked Exception  (0) 2006.12.01
냄새 나는 Switch 코드와 다형성  (3) 2006.11.30
Map 인터페이스 살펴보기  (0) 2006.11.29
Abstract Test  (6) 2006.11.28
상속을 이용한 다형성 vs 인터페이스를 이용한 다형성  (0) 2006.11.24
Throwable 계층구조  (0) 2006.11.21
상속에 대하여...  (6) 2006.11.20
top

  1. Favicon of http://zerry82.tistory.com BlogIcon 현동규 2006.12.01 10:57 PERM. MOD/DEL REPLY

    : http://photos1.blogger.com/blogger/2606/2479/1600/ClassDiagram1.gif

    이거 에러떠여~

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.01 12:24 PERM MOD/DEL

    흠~ 희한하네 난 잘 보이는데; 불여우에서 봐봐
    원문에 있는 그림이라서 출처를 붙일 필요는 없는것 같은데 걍 지울까;;

  2. Favicon of http://zerry82.tistory.com BlogIcon 현동규 2006.12.02 14:04 PERM. MOD/DEL REPLY

    어 보인다 -_-;;

Write a comment.