다른 객체의 속성에 기반 한 switch문을 사용하는 것은 별로 좋은 생각이 아니다. 만약 switch 문을 사용해야 한다면 자기 자신의 데이터를 사용해야지, 다른 객체의 데이터를 사용하면 안된다.
위 코드를 보면 getCharge 메소드를 Movie 클래스로 옮겨야 함을 의미한다.
그리고 _movie 에 추상 메소드와 상속을 이용한 다형성을 주어 구현하면 깔끔하게 switch 문을 제거할 수 있다.
출처 : Refactoring - 마틴 파울러
class Rental... double getCharge() { double result = 0; switch(getMovie().getPriceCode()) { case Movie.REGULAR: ... case Movie.NEW_RELEASE ... break; case Movie.CHILDREN: ... break; } return result; } |
위 코드를 보면 getCharge 메소드를 Movie 클래스로 옮겨야 함을 의미한다.
class Rental... double getCharge() { return _movie.getCharge(_daysRented); } |
그리고 _movie 에 추상 메소드와 상속을 이용한 다형성을 주어 구현하면 깔끔하게 switch 문을 제거할 수 있다.
출처 : Refactoring - 마틴 파울러