[Refactoring] 반복되는 switch문

서준교·2023년 12월 19일
0

Refactoring

목록 보기
2/8
post-thumbnail

👉 이 게시글은 inflearn의 코딩으로 학습하는 리팩토링 강의 내용을 바탕으로 작성되었습니다.

예전에는 switch문이 한번만 등장하더라도 code smell로 간주하고 다형성 적용을 권장하였는데, 최근에는 여러 프로그래밍 언어에서 보다 세련된 형태의 switch문을 지원하고 있습니다. 따라서 최근에는 반복해서 등장하는 동일한 switch문을 code smell로 취급하는 추세입니다. 동일한 switch문이 반복되는 경우에는 새로운 조건을 추가하거나, 기존의 조건을 변경할 때 모든 switch문을 찾아서 코드를 수정해야 하는 번거로움이 생기기 때문에 리팩토링이 필요합니다.

public class SwitchImprovements {

    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;
    }
}

위의 코드는 심각한 버그를 유발합니다. 각 case 내부에 break문이 선언되어있지 않기 때문에 어떤 값이 parameter로 들어오더라도 default문이 실행되어 result 변수는 0을 반환하게 됩니다.

위 switch문은 다음과 같이 리팩토링을 할 수 있습니다.

public class SwitchImprovements {

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

JDK 14부터는 arrow operator를 통해 switch문을 위와 같이 보다 간결하고 세련되게 사용할 수 있습니다. 추가적으로, 선언되지 않은 break문에 의한 버그를 사전에 방지할 수 있기 때문에 안정성 또한 확보할 수 있습니다.

profile
매일 성장하는 개발자가 되고 싶습니다. 😊

0개의 댓글