본문 바로가기

architecture4

observer design pattern example 위 그림에서 MyTextView->draw() 와 MyGraphView->draw() 를 사용하고 MyIntDocument->getData()를 사용해야 하는 경우 상호간 양방향 참조를 하고 있습니다. 이를 개선하기 위해서 아래와 같이 변경하면 MyTextView와 MyGraphView에서 MyDocument로만 의존성이 있게 됩니다. MyIntDocument에서 MyTextView로의 의존성은 Observable에서 Observer 인터페이스 방향으로 추상화 되었습니다. 위 그림에서 각 구현체 객체들의 일관된 인터페이스로 통신하는 것이 더 좋을 것 같습니다. 의존성 역전(DIP)의 SOLID 원칙을 추가해서 구현해 보면 아래와 같이 MyDocument와 MyView의 인터페이스를 라이브러이 안에 가두어.. 2022. 11. 29.
composite design pattern example 각 다형성의 요소들을 그룹으로 묶어서 같이 관리하고자 할 때 사용할 수 있습니다. 위와 같은 상태에서 FigureGroup도 Rectangle과 Line을 다루는 인터페이스로 같이 사용하기 위해서는 아래와 같이 FigureGroup이 Figure class를 상속하게 해줍니다. 여기서 FigureGroup과 같은 컬랙션을 다시 상속하여 구현할 수 있는데 아래와 같은 다른 예시가 있습니다. Array와 List 방식의 각 Collection으로 Object*를 저장하는 위와 같은 구현이 있을 때 Array와 List도 Collection을 통해 아래와 같이 Object*를 상속하게 만들어서 List에 다시 List를 저장하여 관리하는 기능을 확장할 수 있습니다. 2022. 11. 29.
[My cheat-sheet] PUML 참고 : http://www.plantuml.com/plantuml/uml usecase @startuml usecase_diagram title AM3352 IG Use Cases left to right direction actor LSM #blue package Init { usecase "Init IG FPGA" as Init_UC1 } package SwUpdate { usecase "Self Update" as SwUpdate_UC1 usecase "Forward\n FPGA binary" as SwUpdate_UC2 } LSM --> SwUpdate_UC1 LSM --> SwUpdate_UC2 @enduml class @startuml skinparam classAttributeIconSiz.. 2021. 9. 29.
[My cheat-sheet] Design Patterns 디자인 패턴의 주요 관점: 1) 동일 코드 및 유사 코드까지 통합하려고 객체 지향의 다형성을 이용하여 코드 중복을 제거 하고 2) 객체 지향의 추상화 인터페이스 레벨을 맞추어 기존 코드를 수정하지 않고 새로운 코드를 추가하여 사용하도록 구성하는 방법 VisitorSum::visit(Line(this)) -> Line에서 정보 얻어서 VisitorSum 동작 수행, VisitorSum::visit()의 구현을 바꾸면 원하는 동작을 수정 가능 [문제점] Client에 각 구현 class 의존성 있음 Strategy 여러 상황에 따라 구현이나 알고리즘을 변경하여 사용할 수 있도록 (동적 변경도 가능) 우측 그림에서 Context는 각 Strategy들을 교체하여 사용, Client에서 AlgorithmA/B에.. 2021. 7. 3.