🕊️ Java Lambda로 Switch문 단순화하기

저는 일련의 상수값을 테스트하기 위해 if-else 문보다 switch 문을 사용하는 것을 더 선호합니다. switch 문은 가능한 값이 많을 때 더 간결하고 읽기 쉽기 때문이죠.


다음 코드에서는 요일을 나타내는 열거형과 날짜별로 다른 목표를 프린팅하는 switch 문을 사용합니다.

```

public class ClientApp {
public static void main(String[] args) {
Week week = Week.SATURDAY;
GoalPrinter goalPrinter = new GoalPrinter();
showWeekGoal(goalPrinter, week);
}


private static void showWeekGoal(GoalPrinter goalPrinter,Week week) {
switch (week){
case SATURDAY:
goalPrinter.saturdayGoal();
break;
case SUNDAY:
goalPrinter.sundayGoal();
break;
// 생략
}
}
}

```


이 접근은 결함이 있습니다. Week에 새 요일을 추가해야 하는 경우 GoalPrinter와 ClientApp을 모두 수정해야 합니다. 이는 Open-Closed(SOLID 개방-폐쇄) 원칙에 위배됩니다.


더 개선할 수 있을까요? 실제로 Lambda와 Functional Interface 도움으로 결점을 줄일 수 있습니다.

```

public enum Week {
SATURDAY(GoalPrinter::saturdayGoal),
SUNDAY(GoalPrinter::sundayGoal),
// 생략


public final WeekGoalConsumer<GoalPrinter> consumer;

Week(WeekGoalConsumer<GoalPrinter> consumer) {
this.consumer = consumer;
}
}

```


WeekGoalConsumer를 만들었습니다. 이 인터페이스는 GoalPrinter의 인스턴스를 사용할 수 있습니다.

```

@FunctionalInterface
public interface WeekGoalConsumer<T> {
void execute(T t);
}

```


그리고 마침내, ClientApplication을 수정했습니다.

```

public class ClientApp {
public static void main(String[] args) {
Week week = Week.SUNDAY;
week.consumer.execute(new GoalPrinter());
}
}

```


이 접근 방식은 더 깨끗하고 간결합니다. 열거형에 새로운 상수를 추가해야 할 때, 매번 클라이언트 구현을 변경할 필요가 없습니다.


🐣 최근에 이런 switch 문 코드를 작성할 일이 있었는데, 이 포스팅을 참고해서 수정해야겠네요.

Simplifying Switch Case with Java Lambda

Medium

Simplifying Switch Case with Java Lambda

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 11월 8일 오후 1:29

 • 

저장 52조회 7,011

댓글 1

함께 읽은 게시물

🙉 달레의 찐팬이 되어주실래요? 💕

... 더 보기


타입 안전한 API 모킹으로 프론트엔드 생산성 높이기

이번에 우아한형제들 기술 블로그에 "타입 안전한 API 모킹으로 프론트엔드 생산성 높이기"라는 새 글을 발행하게 되었습니다.

... 더 보기

약점 극복



... 더 보기

< '네이버 다녀요'라는 말에 아무도 무슨 일을 하는지는 묻지 않았다 >

1

... 더 보기

리트코드 102. Binary Tree Level Order Traver

... 더 보기

Binary Tree Level Order Traversal | 알고달레

알고달레

Binary Tree Level Order Traversal | 알고달레