본문 바로가기
독서에서 한걸음

Repeated Switches

by oncerun 2022. 12. 22.
반응형

 

 

반복되는 switch문에 대한 리팩토링이다.

 

예전에는 switch문이 한 번만 등장해도 다형성 적용을 권장했지만, 최근에는 다형성이 널리 사용되고, 여러 프로그래밍 언어에서 세련된 형태의 switch문을 지원하고 있다.

 

따라서 오늘날은 반복해서 등장하는 동일한 swich문을 냄새로 여긴다.

 

반복해서 동일한 switch문이 존재할 경우, 새로운 조건을 추가하거나 기존의 조건을 변경할 때 모든 switch문을 찾아서 코드를 고쳐야 한다.,

 

동일한 switch문에 적용된다.

 

이는 전에 배웠던 다형성을 적용하여 리팩터링 할 수 있다. 

 

저자도 과거에 비해 현재 프로그래밍 언어의 switch문의 가독성을 향상하는 방법이 많기 때문에 한 번의 switch문에 대해 리팩토링을 권장하지는 않는다.

 

그럼 스위치문이 어떻게 과거에 비해 발전을 했을까? 

public int vacationHours(String type) {
    int result;
    switch (type) {
        case "full-time": result = 120;
        case "part-time": result = 80;
        case "temporal": result = 32;
        default: result = 0;
    }
    return result;
}

 

여긴.. break 없어서 문제가 발생한다. 

 

최신에는 switch Expression이라는 함수형 프로그래밍 방법이 존재한다. 이는 자바 14,15에서 preview로 제공됐고 따라서 자바 17 , 롱텀 서포트 버전부터 사용하는 것이 좋다.

 

public int vacationHours(String type) {
    int result = switch (type) {
        case "full-time" -> 120;
        case "part-time"-> 80;
        case "temporal" -> 32;
        default -> 0;
    };
    
    return result;
}

 

이 경우에는 break가 없어도 된다. 물론 화살표 대신 콜론을 사용해도 된다. 콜론 시 yield를 사용해 결과로 만들 수 있다.

 

public int vacationHours(String type) {
    int result = switch (type) {
        case "full-time" -> {
            //추가적인 로직
            yield 120;
        }
        case "part-time"-> 80;
        case "temporal" -> 32;
        default -> 0;
    };

    return result;
}
반응형

'독서에서 한걸음' 카테고리의 다른 글

Speculative Generality  (0) 2022.12.24
Lazy Element  (0) 2022.12.24
Replace Conditional with Polymorphism  (0) 2022.12.21
타입 코드를 서브클래스로 변경하기  (0) 2022.12.19
Primitive Obsession  (0) 2022.12.19

댓글