-
switch문은 Object Oriented 같지 않다 (<?)
-
객체지향의 가장 큰 이점은 의존성 관리 능력이다
-
모듈A가 모듈B를 사용할 때 A → B
- source code dependency : 소스코드 변경시 사용처 코드를 변경해야 하는 것
- run time dependency : 실제로 메모리에 올라와서 실행할 때 호출되는 것
- 독립적으로 컴파일이 불가능하다
- C에서는 헤더파일이 변경되면, 해당 헤더파일을 갖고 있던 모든 파일이 다시 컴파일 되곤 했다.
-
하지만, 객체 지향을 사용하면 runtime 의존성을 그대로 둔 채, soure code 의존성을 역전 시킬 수 있다. (Dependency Inversion Principle)
- polymorphic Interface를 삽입하여, 모듈 A는 인터페이스에 의존하고 모듈 B는 인터페이스로부터 derive 한다.
- A → I ← B Inversion 소스코드 의존성
- A ← B 소스코드 의존성 (역전)
- A → B 런타임 의존성
- B source code의 의존성은 run time의존성과 반대가 된다.
- 독립적인 개발과 배포가 가능해진다 Independent Deployability
- 병렬개발이 가능해진다: 유일하게 개발자를 추가했을 때 효율이 올라가는 Case
-
그러나 switch문장은 독립적 배포에 방해가 된다. 각 case에 해당하는 문장은 외부 모듈에 의존성을 갖는다. 다수의 다른 모듈에 의존성을 가질 수 있다. fan-out-problem
- switch문장을 polymorphic interface호출로 변환하여 해결
- case에 있는 문장들을 별도의 클래스로 추출하여 변경 영향이 발생하지 않도록 한다