Written by JS970
on
on
소프트웨어시스템설계 2023-04-05 수업정리
Flow
- Observer Pattern Review
- Template Method Pattern
Observer Pattern Review
Fan-in?
- Fan-in : 외부로부터의 해당 메소드나 클래스로의 association개수
- Observer Pattern의 적용을 통해 fan-in을 줄일 수 있다.
- fan-in이 크다면 코드의 재사용상이 좋다고 볼 수 있다.
- 대표적으로 Scanner Class(java)등 fan-in이 무한대인 클래스들이 있다.
- 하지만 fan-in이 크다는 것은 수정사항이 발생했을때 미치는 영향이 엄청나다는 것을 의미한다.
- 수정, 변경사항 발생 시 Shotgun Surgery를 유발한다.
- 따라서 fan-in이 큰 것 자체는 좋지만, 변경에 의한 영향을 줄이기 위해 DIP를 준수해야 한다.
- 결과적으로 Observer Pattern의 적용은 DIP준수에 기여한다.
About Example UML
- 이전 정리에서 다룬 Observer Pattern UML이다.
- Concrete Entity를 associate하는 Control 클래스들에 대해서는 별다른 패턴을 적용하지 않았었다.
- 예제에서는 따로 고민하지 않았지만 위의 Fan-in관점에서 생각해 봤을 때, 이 역시 Shotgun Surgery를 유발할 가능성이 높다.
- 이 역시 interface로 구현하여 DIP를 준수하도록 설계하는 것에 대해 고려해 볼 필요가 있다.
- 모든 설계가 그렇듯 정답은 없다.
Template Method Pattern
- 따로 패턴으로 정리하기는 하지만 결국 앞서 공부했던 OCP 준수를 위해 고려해야 할 사항에서 다뤘던 내용이다.
- Template Method Pattern이란, 중복 코드를 template method로 추출하고, 서로 다른 코드에 대해서만 abstract method로 superclass에서 선언한 후, subclass에서 override하는 방식을 말한다.
- 아래 UML을 예시로 보자.
- 본 설계에서 LG모터가 추가되는 등, 확장성에 대해 고려해야 한다.(OCP)
- 이를 위해 Motor 라는 superclass를 부모 클래스로 둔다.
- 추가되는 모터들은 Motor 를 상속하는 subclass로 구현한다.
- 이때 move(direction : Direction) : void함수는 Hyundai Motor, LG Motor가 서로 크게 다르지 않다고 한다면 아래와 같이 Template Method를 적용할 수 있다.
- 본 설계에서 LG모터가 추가되는 등, 확장성에 대해 고려해야 한다.(OCP)
- 위와 같이 Template Method Pattern을 이용하여 설계하면 OCP를 더 철저하게 준수할 수 있다. 추가되는 사항(open for extension)에 융통성을 가지며, Motor 의 Concrete Class를 참조하는 객체들의 코드를 수정하지 않도록 수정은 불가능하다(closed for modification).
- 이 설계를 Java로 구현한다고 했을 때, Motor 의 move() 메소드는 final로 선언하여 원천적으로 subclass에서의 override를 막는 것도 고려해 볼 수 있다.