객체지향 원칙
 - 바뀌는 부분은 캡슐화 한다.
 - 상속보다는 구성을 활용한다.
 - 구현이 아닌 인터페이스에 맞춰서 프로그래밍 한다.
 - 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는
   디자인을 사용한다.
 - 클래스 확장에 대새서는 열려 있지만 변경에 대해서는 닫혀 있어야 한다.
 - 추상화된 클래스에 의존 하고 구현 클래스에 의존 하지 말라


1. Iterator 패턴

정의 1 : 무엇인가가 많이 모여 있는 것 중에서 하나씩 끄집어내어
      열거하면서 전체를 검새하면서 처리하는 패턴
정의 2:  컬렉션이 어떤 식으로 구현되었는지 드러내진 않으면서도
         컬렉션 내에 있는 모든 객체에 대해 반복 작업을 처리 할 수
   있도록 한다.

Itarator Pattern

사용자 삽입 이미지

2. Apapter 패턴

정의1 : 이미 제공하는것과 필요한것 과의 사이의 간격을 메우는 패턴
         Wrapper 패턴이라고도 함.
 ※ 클래스에 의한 Adapter패턴(상속을 이용한 것)
 ※ 인스턴스에 의한 Adapter패턴 (위임을 이용한것)
정의2 : 객체를 감싸서 다른 인터페이스를 제공 한다.

 ※Apapter는 Target 인터페이스를 구현하고 Adaptee클래스를 상속받는다

   Apater메서드는 상속받은 Apaptee의 메서드로 위임 시킨다.

Adapter Pattern

사용자 삽입 이미지

3. Template Method 패턴

정의1 : 상위 클래스에서 처리의 흐름을 정하고 하위 클래스에서 구체적인 내용을 결정하는
        디자인 패턴
정의2 : 알고리즘의 개별 단계를 구현하는 방법을 서브 클래스에서 결정 한다.

Template Method Pattern

사용자 삽입 이미지

4. Factory Method 패턴

정의1 : 인스턴스를 생성하는 공장을 Template Method패턴으로 구성한 것이 Factory Method 패턴이다.
정의2 : 생성할 구상 클래스를 서브 클래스에서 결정

Factory Method Pattern

사용자 삽입 이미지

5. Singleton 패턴

정의1 : 지정한 클래스의 인스턴스가 반드시 1개만 존재하도록 하는 패턴
정의2 : 딱 한 객체만 생성되도록 한다.

Singleton Pattern

사용자 삽입 이미지

6. Prototype 패턴

정의1 : 클래스로부터 인스턴스를 만드는것이 아니라 인스턴스를 복사해서 새로운 인스턴스를 만듭니다.
정의2 : 어떤 클래스의 인스턴스를 만드는것이 자원/시간을 많이 잡아 먹거나
  복잡한 경우에는 프로토타입 패턴을 쓴다.

 ※ 종류가 너무 많아 한개의 클래스로  할 수 없는 경우
 ※ 클래스로부터 인스턴스를 생성하기 어려운 경우
 ※ 프레임웍크와 생성할 인스턴스를 분리하고 싶은 경우
 ※ 클라이언트에서는 새로운 인스턴스를 만드는 복잡한 과정을 몰라도 된다.
 ※ 클라이언트에서는 구체적인 형식을 모르더라도 객체를 생성할수 있다.
 ※ 상황에 따라서 객체를 새로 생성하는 것보다 객체를 복사하는것이 더 효
 율적이다.

Prototype Pattern

사용자 삽입 이미지

 7. builder 패턴

 정의1 : 구조를 가진 인스턴스를 쌓아 올리는 패턴
 정의2 : 제품을 여러 단계로 나눠서 만들 수 있도록 제품 생산 단계를 캡슐화하고 싶을때
         사용

Builder Pattern

사용자 삽입 이미지

 8. Abstract Factory 패턴

 정의1 : 추상적인 부품을 조립해서 추상적인 제품을 만드는 추상적인 공장 같은 패턴
 정의2 : 클라이언트에서 구상 클래스를 지정하지 않으면서도 일군의 객체를
         생성할 수 있도록 하는 패턴

Abstract Factory Pattern

사용자 삽입 이미지

 9. Bridge 패턴

 정의 1: 기능의 클래스 계층과 구현의 클래스 계층을 분리하는 패턴
 정의 2: 구현 뿐만 아니라 추상화된 부분가지 변경시켜야 하는 경우 사용

Bridge Pattern

사용자 삽입 이미지

 10. strategy 패턴

정의1 : 알고리즘을 교체해서 동일한 문제를 다른 방법으로 해결 하는 패턴
정의2 : 알고리즘군을 정의하고 각각을 캡슐화하여 바꿔 쓸 수 있게 만듦
        스트래티지 패턴을 이용하면 알고리즘을 활용하는 클라이언트와 독립적으로 알고리즘을
        변경할 수 있다.

Strategy Pattern

사용자 삽입 이미지

11. Composite 패턴

정의1 : 그룻과 내용물을 동일시해서 재귀적인 구조를 만드는 패턴
정의2 : 클라언트에서 객체 컬렉션과 개별 객체를 똑같이 다룰수 있도록
    함

Composite Pattern

사용자 삽입 이미지

12. Decorator 패턴

정의1 : 객체에 장식을 해가는 패턴
정의2 : 객체에 추가 요소를 동적으로 더할 수 있습니다.
         데코레이터를 사용하면 서브 클래스를 만드는 경우에
   비해 훨씬 유연하게 기능을 확장할 수 있다.

Decorator Pattern

사용자 삽입 이미지

13. Visitor 패턴

정의1 : 데이터 구조와 처리를 분리 한다. 데이터 구조 안을 돌아다니는 주체인
 '방문자'를 나타내는 클래스를 준비해서 그 클래스에게 처리를 맡긴다.
정의2 : 다양한 객체에 새로운 기능을 추가해야 하는데 캡슐화가 별로
        중요하지 않은 경우에는 비지터 패턴을 사용한다.

Visitor Pattern

사용자 삽입 이미지

14. Chain of Responsibility
정의1 : 어떠한 요구가 발생 했을때  그 요구를 처리할 객체를 바로 결정 할 수 없는
 경우에는 다수의 객체를 사슬처럼 연결해 두고 객체의 사슬을 차례로 돌아다니면서
 목적에 맞는 객체를 결정하는 패턴
정의2: 한 요청을 두 개 이상의 객체에서 처리하고 싶다면 역할 사슬 패턴을 사용한다.

Chain of Responsibility Pattern

사용자 삽입 이미지

15. Facade 패턴
정의1 : 대규모 프로그램을 사용해서 처리를 하려면 서로 관련 있는 많은 클래스들을
 적절히 제어 해야 한다. 많은 클래스들을 제어하기 위해서는 '창구'를 준비해야 한다.
 그렇게 하면 많은 클래스들을 개별적으로 제어하지 않아도 '창구'에게 요구만 하면
 일이 끝나기 때문이다.
정의2 : 일련의 클래스에 대해서 간단한 인터페이스를 제공하는 패턴

Facade Pattern

사용자 삽입 이미지

 

Factory Method Pattern

사용자 삽입 이미지

16. Mediator 패턴

정의1 : 마치 카운셀러 처럼 각 멤버로 부터 올라온 보고를 토대로 대국적인 팥단을 해서
 각 멤버에게 지시를 내리는 패턴
정의2 : 서로 관련된 객체 사이의 복잡한 통신과 제어를 한 곳으로 집중시키고자 하는 경우에
        는 미디에이터 패턴을 사용한다.

Mediator Pattern

사용자 삽입 이미지

17. Observer 패턴
정의1 : 관찰대상의 상태가 변하면 관찰자에게 통지되는 패턴
        상태 변화에 따른 처리를 가술할때 유효함
정의2 : 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이
        가고 자동으로 내용이 갱신되는 방식으로 (one-to-many)의존성을 정의 한다.
정의3 : 자바에서 지원하는 java.util.Observer가 있으며 푸시(subject가 보내는),풀 방식
        (옵저버에서 Observale객체로부터 원하는 데이터를 가져 오는 방식)이 있다

Observer Pattern

사용자 삽입 이미지

18. Memento 패턴

정의1 : 상태를 보존한다. 어떤 시점에서의 인스턴스의 상태를 기록해서 저장
 해두었다가 나중에 인스턴스를 그 시점의 상태로 되돌리는 패턴
정의2 : 객체를 이전의 상태로 복구시켜야 하는 경우에는 메멘토 패턴을 쓰
  면 된다.

Memento Pattern

사용자 삽입 이미지

19. State 패턴

정의1 :상태를 클래스로 표현하는 패턴
정의2 : 상태를 기반으로 한 행동을 캡슐화한 다음 위임을 통해서 필요한 행동을
        선택 한다.

State Pattern

사용자 삽입 이미지

20. Flyweight 패턴

정의1 : 인스턴스를 가능한 한 공유시켜 쓸데없이 new를 하지 않도록 하는 패턴
정의2 : 어떤 클래스의 인스턴스 한개만 가지고 여러 개의 "가상 인스턴스"를 제공하
  고 싶다면 사용한다.

Fly Weight Pattern

사용자 삽입 이미지

21. Proxy 패턴

정의1 : 바빠서 그 일을 할 수 없는 본인 객체 대신에 대리인 객체가 어느 정도 일을 처리
 해주는 패턴
정의2 : 객체를 감싸서 그 객체에 대한 접근을 제어 한다.

Proxy Pattern

사용자 삽입 이미지

22. Command 패턴

정의1 : 명령을 클래스로 만든다.
정의2 : 요청을 객체로 감싼다.


Command Pattern

사용자 삽입 이미지




+ Recent posts