
251
14
장
if 문
함께 보기
●
마틴 파울러의 ‘플래그 인수’ (
https://oreil.ly/RXti-
)
14.4
switch
/
case
/
else
if
문 대체하기
문제
스위치와 케이스가 있는 제어 구조가 있습니다.
해결
다형성 객체로 대체하세요.
설명
스위치는 너무 많은 결정을 함께 결합하고, 새로운 조건이 추가될 때마다 주요 알고리듬
이 변경되어 병합 충돌이 발생하며 개방-폐쇄 원칙(
14
.
3
절 ‘
boolean
변수 재구성하기’ 참조 )
을 위반합니다. 또한 중복된 코드와 매우 큰 메서드 생성을 유발합니다. 이러한 문제를 해결하
기 위해서는 상태 패턴을 사용해 전환을 모델링하고, 전략 패턴이나 메서드 객체를 사용해 분
기를 선택하는 개방-폐쇄 원칙에 따라 계층을 생성하거나 구성해야 합니다.
다음 예제는 여러 가지 오디오 형식을
MP3
로 변환하는 예제입니다.
class Mp3Converter {
convertToMp3(source, mimeType) {
if(mimeType.equals("audio/mpeg")) {
this.convertMpegToMp3(source)
} else if(mimeType.equals("audio/wav")) {
this.convertWavToMp3(source)
} else if(mimeType.equals("audio/ogg")) ...