Singleton
- 객체를 단 하나만 사용해야 하는 경우 ex) 세팅 변수
- static을 써서 값을 저장
- 객체가 생성되어 있다면 계속 같은 객체를 return
Strategy
- 모드를 바꿀 때마다 기능이 변경되는 것을 구현 한다고 가정
- strategy 패턴이 없다면 각 기능을 구현해 놓고, 유지보수도 매 기능마다 적용 해야함 => 매우 비효율
- strategy 방식은 모드를 바꿔 끼운다는 컨셉
State
- strategy 방식과 비슷
- 둘의 차이점
- state: 상태마다 할일(켜진 상태, 꺼진 상태) + 상태도 바꿈
- strategy: 모드마다의 기능
Command
- strategy 방식과 비슷
- 둘의 차이점
- command: 일 자체가 변경 => command에 따라 다른 일
- strategy: (검색) 동일한 일을 하고, 모드를 갈아끼우는 형식
Adapter
- 변수, 메소드, 인터페이스가 다를 때 중간에서 변환해주는 것
Proxy
- 실제 작업을 모두 실행하기 보단, 대리자(가벼운)를 먼저 보내서 빠른 서비스가 가능하도록
- 대표적인 예가 유튜브 미리보기
- 제목, 썸네일은 가벼워서 proxy로 제공
- 미리 보기는 동영상을 불러 오는 것이기 때문에, 실제 작업을 요청
Facade
- 사용자 측에서 복잡한 내부관계를 알 필요 없이 메소드로 간단히 실행할 수 있도록 하는 방법
Template
- 큰 틀을 정해놓고 그것을 상속받은 자식은 상세하게 구현하는 것
=> 상속이라고 생각하면 편함
Decorator
- 기존에 있는 것에서 추가로 기능을 달아 놓는 것
ex. 아이템을 먹으면 기존 공격+ 추가 공격
Factory
- 클래스가 많고 복잡할 때 객체가 parameter을 확인하고 알아서 생성해주는 것
Abs.Factory
- factory에 추상화를 입힌 것
- factory가 다양해졌을 때, 그것을 상속해서 다양한 factory를 만들 수 있도록 하는 것.
- 클래스끼리 연결되었을 때 변동이 생기면 알려주는 클래스 기법
- 중간에서 변동을 해주는 객체를 이용하는 것
Composite
- 종류가 다르더라도 포함되는 것과 포함하는 것을 같은 방식으로 다루는 기법