2011년 5월 26일 목요일

Replace Conditional with Polymorphism

double getSpeed() {
switch (_type) {
case EUROPEAN:
return getBaseSpeed();
case AFRICAN:
return getBaseSpeed() - getLoadFactor() * _numberOfCoconuts;
case NORWEIGIAN_BLUE:
return (_isNailed) ? 0 : getBaseSpeed(_voltage);
}
throw new RuntimeException ("Should be unreachable");
}

객체의 타입에 따라 다른 동작을 선택하는 조건문을 가지고 있는 경우 조건문의 각 부분을 서브클래스에 있는 오버라이딩 메소드로 옮겨라 그리고 원래 메소드를 abstract 로 만들어라

! 동기
  • 타입 코드에 따라서 분기하는 switch 문, 또는 타입 문자열에 따라 분기하는 if-then-else 문이 객체지향 프로그램에서는 일반적이지 않다는 것을 알게 될것이다.

! 절차
  • 조건문이 좀더 큼 메소드의 한 부분이라면, 그 조건문 부분을 취해서 Extract Method를 사용한다.
  • 필요하다면 Move Method를 사용하여 조건문을 상속 구조의 제일 위에 위치 시킨다.
  • 서브 클래스 중에 하나를 선택하여 조건문 메소드를 오버라이드 하는 서브클래스 메소드를 만든다. 조건문에서 필요한 부분을 서브클래스에 복사하고 적절히 수정한다.
  • 조건문의 모든 조건 부분이 서브클래스 메소드로 바뀔 때까지 이 작업을 계속한다.
  • 수퍼 클래스 메소드를 abstract 로 만든다.

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...