디자인 패턴
생성 패턴, 구조 패턴, 행위 패턴
생성 패턴
객체의 인스턴스 생성에 관여, 객체 생성을 추상화
- Abstract Factory: 구체적인 클래스에 의존하지 않고 서로 연관 있는 객체들의 조합을 만드는 인터페이스 제공
- Builder: 복잡한 인스턴스를 조립해서 만드는 구조
- Factory Method: 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고 하위 클래스에서 인스턴스를 생성하는 방식
- Prototype: 기존 객체를 복제함으로써 객체를 생성
- Singleton: 전역변수를 사용하지 않고 클래스 하나에 대해 객체를 하나만 생성
구조 패턴
클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
- Adapter: 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할
- Bridge: 기능의 클래스 계층과 구현의 클래스 계층을 연결
- Composite: 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴
- Decorator: 기존에 구현된 클래스에 필요한 기능을 추가하는 패턴
- Facade: 복잡한 시스템에 대해 단순한 인터페이스를 제공
- Flyweight: 다수의 객체가 생성될 때 모두가 갖는 본질적인 요소를 클래스화하여 공유함으로써 메모리를 절약하고 클래스의 경량화를 목적으로 하는 패턴
- Proxy: 실제 객체에 대한 대리 객체, 정보 은닉 역할
행위 패턴
반복적으로 사용되는 객체들의 상호작용을 패턴화한 것
- Command: 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행됨
- Observer: 어떤 클래스에 변화가 일어났을 때 이를 감지하여 해당 클래스를 의존하는 다른 클래스에게 통보하는 것
- Template Method: 상위 클래스에서는 추상적으로 표현하고 하위 클래스에서 구체적으로 표현
- Mediator: 객체의 수가 너무 많아져 통신이 복잡해지면 느슨하게 결합하여 이를 중재
- Interpreter: 여러 형태의 언어 구문을 해석할 수 있게 만드는 패턴
- Iterator: 노출시키지 않으면서 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 하는 패턴
- State: 객체 상태를 캡슐화해서 클래스화함으로써 그것을 참조하게 하는 방식
- Visitor: 해당 클래스가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴
- Strategy: 알고리즘 군을 정의하고 같은 알고리즘을 각각 하나의 클래스로 캡슐화한 후, 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴
- Memento: 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴, Undo 기능을 개발할 때 사용
- Chain of Responsibility: 정적으로 어떤 기능에 대한 처리의 연결이 하드코딩되어 있을 때 기능 처리의 연결 변경이 불가능한데, 이를 동적으로 연결한 경우에는 다르게 처리할 수 있도록 하는 패턴