본문 바로가기

Design Pattern

(9)
[디자인패턴] Bridge Pattern (브릿지 패턴) 브릿지 패턴의 목적과 사용이유 브릿지 패턴 다른패턴과의 비교 브릿지 패턴의 목적과 사용이유 Purpose Object Structure에서 (Abstract)Conceptual 과 Implementation을 독립적으로 구분하여 coupling을 줄이기 위해서 Use When Abstraction과 Implementation이 compile time에 바인딩되면 안될때 Abstraction과 Implementation이 독립적으로 확장 가능해야할때 Implementation에 대한 정보는 Client로부터 숨기고 abstraction에 영향가지 않도록 하고 싶을때 -> 결론적으로 Abstraction과 Implementation을 따로 분리하기 위해서!! Initial Problem 각각 Rectangl..
[디자인패턴] Package Principles (패키지에서의 디자인 원칙) 패키지내의 Principles ADP (Acyclic Dependencies principles) SDP (Stable Dependencies Principle) SAP (Stable Abstractions Principle) 패키지내의 Principles - ADP : 패키지들 사이에 cycle이 있다면 하나의 패키지 test하기 위해서 모든 패키지가 다 있어야한다. - SDP : c1이 c2에 디펜던시 있으면 P1이 P2로 디펜던시가 있다고 한다. 따라서 자신보다 stable한 P로만 디펜던시를 갖자 (abstract level이 더 높은 P로만) * Stable = Independent + Responsible (변경될 확률을 측정한게 아니다) - SAP : stable한 패키지는 abstract ..
[디자인패턴] Core Concepts in SW Design (Design에서의 핵심개념) 추상화 - 정보은닉 & 캡슐화 정보은닉 & 캡슐화 모듈성 (Modularity) Cohesion & Coupling 추상화 Abstraction Hiding details : sw의 복잡한 디자인을 간소화시키고 관리하기 위해 자세하지 않는 건 감춘다. 특정 문제로부터 카테고리(핵심) 과 concepts(해당문제의 디테일한 사항)을 나눈다. (For 재사용성) - 핵심을 분리함으로써 핵심을 해결하는 solution을 찾으면 detail이 조금 바뀐 다른 문제에도 적용가능하다. - 특정 문제 instance에 대한 solution을 찾는게 아닌 핵심을 분리하여 그 핵심에 대한 solution을 찾는 것이다. 이렇게 파일을 읽어야하는 문제에서 추상화시켜서 파일이 아닌 입력 buffer를 읽을 수 있는 solu..
[디자인패턴] Visitor Pattern (방문자 패턴) 방문자 패턴의 목적과 사용이유 방문자 패턴이란 방문자 패턴 예시 (Car) accept 메소드 중복 구현 피해보기 (시도) Double Dispatch 고려사항 Summary 방문자 패턴의 목적과 사용이유 Purpose - (방문자 패턴이 필요 없는 경우) runtime에 object들에게 operation을 포함시키는게 타당할때 - (방문자 패턴이 필요한 경우) object 내부에 operation들로 인해 cohesion이 떨어질때 Use When - object구조에 object 속성과 관계없는 operation이 많이 수행되어야 할 때 - object구조는 변하지 않지만 operation들이 많이 변경될 때 - 같은 인터페이스를 구현하는 다수의 object에 대해 연산을 수행해야 하는 operat..
[디자인패턴] Mediator Pattern (중재자 패턴) 중재자 패턴의 목적과 사용이유 중재자 패턴이란 중재자 패턴 vs 옵저버 패턴 중재자 패턴의 예시 Related Patterns and Summary 중재자 패턴의 목적과 사용이유 Purpose - 서로 상호작용하는 object들을 캡슐화함으로써 loose coupling을 유지하기 위해 사용한다. Use When - 객체들 사이에 너무 많은 관계가 얽혀있을때 - 객체들 사이의 상호작용 관계가 복잡할때 중재자 패턴이란 M개의 object 사이에 N개의 관계가 형성되어 있어 아주 복잡하게 얽혀있을때 이를 M:1 관계로 바꿔주기 위해 중재자 패턴을 사용한다. M개의 object 사이에 이들의 관계를 control 하는 Mediator를 하나 넣어서 Mediator가 모든 object들의 communicatio..
[디자인패턴] State Pattern (스테이트 패턴) 스테이트 패턴의 목적과 사용이유 States와 Actions의 다이어그램 스테이트 패턴을 적용시키기 전 스테이트 패턴을 통한 문제 해결 스테이트 패턴 vs 스트래티지 패턴 의문점 Related Patterns 스테이트 패턴의 목적과 사용이유 Purpose - 객체 내부 상태가 바뀜에 따라 객체의 행동을 바꿀 수 있다. Use When - 객체의 행동이 상태로부터 영향 받아야 할 때 - 복잡한 조건들이 객체의 행동을 상태에 연결지을때 - 여러 state들 사이에서의 전이가 뚜렷해져야할 때 States와 Actions의 다이어그램 위는 Gumball 머신에서의 상태, 행동 다이어그램이다. Gumball 머신에서의 상태와 행동을 나열하면 다음과 같다. 상태 (1) 동전 없음 (No Quarter) (2) 동전..
[디자인패턴] Composite Pattern (컴포지트 패턴) Usage of Composite Pattern Composite Pattern VS Decorator Pattern Composite Pattern with Iterator Iterator for Composite Things to Consider Related Patterns Usage of Composite Pattern Purpose - 객체들을 계층구조로 만듦으로써 객체들이 같은 interface를 통해 독립적으로 다뤄지도록 한다. (개별 객체와 복합(composite)객체를 같은 방법으로 다룰 수 있도록 한다.) Use When - 객체들을 계층구조로 나타내야 할 때 - 객체와 복합 객체가 uniformly 다뤄져야 할 때 (called recursive composition) Composit..
[디자인패턴] Iterator Pattern (반복자 패턴) Usage of Iterator Pattern Issues Approach using Iterator Approach using Java's Iterator Summary Related Patterns Usage of Iterator Pattern Purpose - aggregate object의 구현방법을 알지않고 요소에 접근할 수 있도록 하기위해 (*aggregate object : 특정 object들을 배열, 리스트 등.. group형식으로 갖고있는 객체 / container 혹은 collection이라 불린다) Use When - 특정 요소들에 대해 여러가지 순회 방법이 필요할 때 (ex. ArrayList로 순회, 배열로 순회) - 순회하는데에 uniform interface가 필요할 때 Iss..