2009. 10. 13. 05:18

Switch 문

다른 객체의 속성에 기반 한 switch문을 사용하는 것은 별로 좋은 생각이 아니다. 만약 switch 문을 사용해야 한다면 자기 자신의 데이터를 사용해야지, 다른 객체의 데이터를 사용하면 안된다.

 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 - 마틴 파울러