객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴
- 생성 패턴 (Creational Pattern)
- 구조 패턴 (Structural Pattern)
- 행위 패턴 (Behavioral Pattern)
- 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.
- 구제적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
- 객체 생성 처리를 서브 클래스로 분리해 처리하도록 캡슐화하는 패턴
- 복합 객체의 생성과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 함. 복잡한 객체의 단계별 생성
- 복사패턴. 인스턴스를 복사하여 새로운 객체 생성. clone(), copy()
- 프로토타입 인스턴스를 이용해 생성할 객체의 종류를 명세하고 이 프로토타입을 복사해 새로운 객체 생성.
- 단 하나의 인스턴스 (전역변수)
- 오직 하나의 클래스 인스턴스만 만들어지도록 하고, 이에 대한 전역적인 접근을 제공. (Static method)
- 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다.
- 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 중점을 둔다.
- Adapter 패턴은 어떤 오브젝트를 캐스팅이 불가능한 다른 클래스의 형태로 변환시켜주는 것입니다.
- 추상화(또는 인터페이스)와 구현을 분리하여 각각을 독립적으로 변형 가능
- 구현 자체도 하나의 추상화 개념으로 다양한 변형이 가능.
- 구현과 독립적으로 인터페이스도 다양함을 가질 수 있다.
- 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴
- 객체의 결합 을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴
- 여러개의 메소드를 사용해 하나의 단순한 기능을 하는 인터페이스를 만드는 패턴.
- 사용자로 하여금 좀더 객체의 여러 기능을 쉽게 이용할수 있도록 한다.
- 객체의 내부에서 참조하는 객체를 직접 만드는 것이 아니라, 없다면 만들고, 만들어져 있다면 객체를 공유하는 식으로 객체를 구성하는 방법이다
- 어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조 하는 것이 아니라, 그 객체를 대행(대리,proxy)하는 객체를 통해 대상객체에 접근하는 방식.
- 이 방식을 사용하면 실제 대상 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할수 있고, 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있다. 프록시 객체와 실제 객체는 같은 인터페이스를 구현하여, 프록시 객체는 실제 객체와 치환(맞바꿈)이 가능하다.
- 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
- 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 중점을 둔다.
- 어떤 요청에 대해서 이를 처리하는 객체를 하나 혹은 여럿을 두어 해당 요쳥이 해결될때까지 연쇄 적으로 연결된 객체 핸들러 함수를 호출하는 방식
- 메소드 하나를 클래스로 분리 하는 방식
- 문장을 해석할때 사용하는 패턴이다. 간단한 쉘커먼드 처리, 통신 프로토콜처리, 수식계산, 도메인 기반 언어(Domain Specific Language - SQL, XML, JSF등)의 해석에 주로 많이 쓰인다.
- 여러개의 원소를 가진 자료구조들(자바의 경우 Map,Set,List, array등)에 대해서 데이터 타입에 상관없이 각 원소에 접근할수 있는 패턴.
- 자바의 경우 Map,Set,List등의 Collection Framework은 모두 Iterable interface를 상속한다.
- 서로 전혀 다른 객체간에 상호 통신이 매우 복잡할때 중재자를 통해 객체간의 통신을 가능하도록 캡슐화하는 방법
- 객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원 할 수 있는 패턴.
- 주 객체의 변경이 일어날때마다 상태를 확인할수 있는 리스너 객체가 있다고 가정하고, 리스너 객체를 주객체에 등록하여 객체에 변경이 일어날때마다 리스너 객체의 함수가 불리게 되도록 하는 방식.
- 상태패턴은 주체 객체에게 여러개의 상태가 존재하고, 상태간에 긴밀한 연결성이 있을 경우에 상태간의 전이를 용이하게 해주는 패턴이다.
- 일반적으로는 객체의 메소드에 대한 알고리즘이 미리 정해져있고, 정해진 알고리즘에 따라 어플리케이션 수행중에 그 메소드가 불리면 정해진 알고리즘이 불리게 된다.
- 어떤 알고리즘이 잘 구현된것이 있는데, 이것을 상황에 맞게 조금씩 다르게 확장해야 하는 경우에 유용한 패턴이다.
- 방문자 패턴은 여러 객체들에 대해 객체의 동작들을 지정하는 방식(N:N) 이다.