728x90
반응형
디자인패턴이란?
특정 문맥에서 공통적으로 발생하는 문제에 대해
재사용 가능한 해결책
목적별로 일정한 패턴이 제시되어 있음
완전한 정답이 되는 알고리즘과 달리 현재 상황에 맞춰 최적화된 패턴을 결정하여 사용하는 것이 좋음
Gof Gang of Four 에서 제시한 총 23개의 패턴이 있음
디자인 패턴의 장점
개발자 간의 원활한 협업이 가능
소프트웨어의 구조를 파악하기 용이
재사용을 통해 개발 시간 단축-메소드나 클래스를 정형화함
설계 변경이 있을 경우 비교적 원활하게 조치가 가능
디자인 패턴의 단점
객체지향적 설계를 고려하여 진행해야함
초기 투자 비용이 많이 들어감 돈,시간 등,,,
디자인패턴
목적에 따른 분류
생성패턴, 구조패턴, 행동 패턴 세가지로 구분
- 생성패턴;
생성 패턴은 객체의 생성과 관련된 패턴
특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 최소화 할 수 있도록 유연성 제공
Abstract Factory | 구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 객체들을 묶어줌 |
Builder | 객체의 생성과 표현을 분리하여 객체를 생성 |
Factory Method | 객체 생성을 서브클래스로 분리하여 위임 캡슐화 |
ProtoType | 원본 객체를 복사하여 객체를 생성 클론 |
Singleton | 한 클래스마다 인스턴스를 하나만 생성하여 어디서든 참조 |
- 구조패턴;
프로그램 내 자료 구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 사용되는 패턴
클래스나 객체를 조합하여 더 큰 구조를 만들 수 있게 해줌
Adaptor | 비호환 인터페이스에 호환성 부여하도록 변환 |
Bridge | 구현부에서 추상층을 분리 후 각자 독립적으로 변형/확장 가능 |
Composite | 트리 구조로 부분/전체 계층 표현, 복합/단일 객체를 구분없이 사용 |
Decorator | 속 사용없이 객체 간 결합을 통해 객체 기능을 동적으로 추가/확장 |
Façade | 상위에 인터페이스 구성하여 서브클래스의 기능을 복잡하게 표현하 지 않고 단순한 인터페이스로 구현 |
Flyweight | 인스턴스를 공유하여 메모리 절약 (클래스 경량화) |
Proxy | 접근이 힘든 객체를 연결하는 인터페이스 역할 (대리 객체 수행) |
- 행위패턴;
반복적으로 사용되는 객체들의 커뮤니케이션을 패턴화
결합도 최소화가 주 목적
객체 사이의 알고리즘 또는 책임을 분배하는 방법에 대해 정의됨
Chain of Responsibility | 처리가능한 객체가 둘 이상 존재하여 한 객체 내 처리 불가 시 다음 객체로 이관 |
Command | 요청 명령어들을 추상/구체 클래스로 분리 후 단순화/캡슐화 |
Interpreter | 언어에 문법 표현 정의 |
Iterator | 접근이 빈번한 객체에 대해 동일 인터페이스 사용 |
Mediator | 객체들간 복잡한 상호작용을 캡슐화하여 객체로 정의 후 중재 |
Memento | 객체를 이전의 특정 시점의 상태로 저장하고 복원 (캡슐화 유지) |
Observer | 한 객체 상태 변화 시 상속되어 있는 객체들에 변화 전달 |
State | 객체의 상태에 따라 동일한 동작을 다르게 처리 |
Strategy | 동일 계열 알고리즘을 개별적으로 캡슐화하여 상호 교환 |
Template Method | 여러 클래스에서 공통 사용 메서드를 상위 클래스에서 정의하고, 하위 클래스마다 다르게 구현해야하는 세부 사항를 개별 구현 |
Visitor | 각 클래스 데이터 구조로부터 처리/연산 기능을 분리하여 별도의 클래스를 만들고, 해당 클래스 메서드가 각 클래스를 돌아다니며 특정 작업을 수행 → 객체 구조 변경 X / 새로운 연산 기능만 추가 |
각자 상황에 맞게 패턴을 적용
뭐가 더 중요한진 애매한 부분이 있음
디자인 패턴이란 필요할 때 마다 찾아보는 식으로 설계할 때 간략하게 아는걸 detail화 시켜서 코드를 작성
728x90
'JAVA Spring FRAMEWORK' 카테고리의 다른 글
[JAVA]JDBC란? (0) | 2024.11.13 |
---|---|
[SQL]Inner Join vs Outer Join (1) | 2024.08.31 |
[Spring Boot ] Spring Initializr 로 시작하기 (0) | 2023.03.14 |
[Spring]FormTag & DataBinding - (1)TextField (1) | 2021.11.29 |
[Spring MVC]Developing Spring Controllers and Views (0) | 2021.11.17 |