728x90
디자인 패턴이란,
특정 문맥에서 공통적으로 발생하는 문제에 대해 쓰이는 재사용 가능한 해결책 목적으로 일정한 패턴을 나타낸 것.
대표적으로 GoF 에서 제시한 23개의 패턴이 있다.
프로젝트를 설계 및 구현 시 필요한 디자인패턴이 있다면 검색 후 사용하도록 하자.
생성패턴
- 객체의 생성과 관련
- 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 최소화 할 수 있도록 유연성 제공
생성패턴 | 의도 |
추상 팩토리(Abstarct Factory) | 구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 객체를 묶음 |
빌더(Builder) | 객체의 생성과 표현을 분리하여 객체를 생성 |
팩토리 메소드(Factory Method) | 객체 생성을 서브클래스로 분리하여 위임(캡슐화) |
프로토타입(Prototype) | 원본 객체를 복사하여 객체를 생성(클론) |
싱글톤(Singleton) | 한 클래스마다 인스턴스를 하나만 생성하여 어디서든 참조 |
구조패턴
- 프로그램 내 자료 구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 사용되는 패턴
- 클래스나 객체를 조합하여 더 큰 구조를 만들 수 있다.
구조패턴 | 의도 |
어댑터(Adatper) | 클래스의 인터페이스를 어떤 클래스에서든 이용할 수 있도록 변환 |
브리지(Bridge) | 구현부에서 추상층을 분리하여 각자 독집적으로 변형하고 확장할 수 있도록 한다. |
컴포지트(Composite) | 객체들의 관계를 트리 구조로 구성하여 표현하는 방식 |
데코레이터(Decorator) | 주어진 상황에 따라 객체에 다른 객체를 덧붙인다. |
파사드(Facade) | 서브 시스템에 있는 인터페이스 집합에 대해 통합된 인터페이스 제공 |
플라이웨이트(Flyweight) | 크기가 작은 여러 개의 객체를 매번 생성하지 않고, 최대한 공유하여 사용하도록 메모리 절약 |
프록시(Proxy) | 실제 기능을 수행하는 객체 대신 가상의 객체를 사용해 로직의 흐름을 제어 |
행동패턴
- 반복적으로 사용되는 객체들의 커뮤니케이션을 패턴화
- 결합도를 최소화 하는것이 목적
행동패턴 | 의도 |
책임연쇄(Chain of Responsibility) |
요청을 받는 객체를 연쇄적으로 묶어 요청을 처리하는 객체를 만날 때까지 객체 Chain을 따라 요청을 전달 |
커맨드(Command) | 요청을 객체의 형태로 캡슐화하여 재사용하거나 취소 |
인터프리터(Interpreter) | 특정 언어의 문법 표현을 정의 |
반복자(Iterator) | 컬렉션 구현 방법을 노출화하지 않으면서 모든 항목에 접근할 수 있는 방법을 제공 |
중재자(Mediator) | 한 집합에 속해있는 객체들의 상호작용을 캡슐화하여 새로운 객체로 정의 |
메멘토(Memento) | 객체가 특정 상태로 다시 되돌아 올 수 있도록 내부 상태를 실체화 |
옵저버(Observer) | 객체 상태가 변할 때 관련 객체들이 그 변화를 전달받아 자동으로 갱신 |
상태(State) | 객체의 상태에 따라 동일한 동작을 다르게 처리 |
전략(Strategy) | 동일 계열의 알고리즘군을 정의하고 캡슐화하여 상호 교환이 가능하게 한다. |
템플릿 메소드(Template Method) | 상위 클래스는 알고리즘의 골격만을 작성하고 구체적인 처리는 서브 클래스로 위임 |
방문자(Visitor) | 객체의 원소에 대해 수행할 연산을 분리하여 별도의 클래스로 구성 |
참고
https://www.youtube.com/watch?v=Mq4MwPXWarI&list=PLlTylS8uB2fBOi6uzvMpojFrNe7sRmlzU&index=3
728x90
'Spring > Spring-detail' 카테고리의 다른 글
Lombok 알고 사용하자! (0) | 2022.09.15 |
---|---|
API를 작성하는 다양한 방법 (0) | 2022.09.15 |
빌드 관리 도구 ( Gradle / Maven ) (0) | 2022.09.14 |
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2022.09.14 |
JPA Auditing 적용 (0) | 2022.09.13 |
댓글