본문 바로가기

클린코드

[Refactoring] 12. 반복되는 switch 문

 

코딩으로 학습하는 리팩토링 - 인프런 | 강의

리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직

www.inflearn.com

| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.


반복되는 switch 문
  • 예전에는 switch 문이 한 번 등장만 해도 냄새로 취급되었는데 여러 프로그래밍 언어에서 보다 세련된 형태의 switch 문을 지원해 줌으로써 반복해서 등장하는 동일한 switch 문을 냄새로 취급한다.
  • 반복해서 동일한 switch 문이 존재할 경우, 새로운 조건을 추가하거나 기존의 조건을 변경할 때 모든 switch 문을 찾아서 변경해야 한다.
Before
public class SwitchImprovements {

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

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

=> 반복되는 switch 문을 메서드로 추출한 후 세련된 형태의 switch 문을 사용

* 다음과 같이 표현 가능하다

public class SwitchImprovements {

    public int vacationHours(String type) {
        return switch (type) {
            case "full-time" -> {
                // 다른 로직
                yield 120;
            }
            case "part-time" -> {
                // 다른 로직
                yield 80;
            }
            case "temporal" -> {
                // 다른 로직
                yield 32;
            }
            default -> {
                // 다른 로직
                yield 0;
            }
        };
    }
}

'클린코드' 카테고리의 다른 글

[Refactoring] 14. 성의없는 요소  (0) 2022.09.17
[Refactoring] 13. 반복문  (0) 2022.09.16
[Refactoring] 11. 기본형 집착  (0) 2022.09.14
[Refactoring] 10. 데이터 뭉치  (0) 2022.09.13
[Refactoring] 9. 기능 편애  (0) 2022.09.12