1. 디자인 패턴

자주 사용하는 설계 형태를 정형화해서 이를 유형별로 설계 템플릿을 만들어둔 것으로, 소프트웨어 개발 중 나타나는 과제를 해결하기 위한 방법 중 한가지이다.
다시 말헤, 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미한다.
* 패턴 : 다양한 응용 소프트웨어 시스템들을 개발할 때 서로 간에 공통되는 설계 문제가 존재하는데, 각 해결책 사이에도 공통점이 있으며 이러한 유사점을 패턴이라고 한다.
- 개발자 간 원활한 의사소통, 소프트웨어 구조 파악 용이, 설계 변경에 대한 유연한 대처, 개발의 효율성, 유지보수성, 운용성 등 소프트웨어 품질 향상에 도움을 준다.
- 객체지향 프로그래밍 설계 시 유사한 상황에서 구조적인 문제를 해결할 수 있도록 방안을 제공해주며, GoF(Gang of Four) 분류가 가장 많이 사용된다.
2. 디자인 패턴을 사용할 때의 장점, 단점
장점
|
|
단점
|
|
3. 디자인 패턴의 구성요소
[필수요소 4가지]
- 패턴의 이름 : 패턴을 부를 때 사용하는 이름과 패턴의 유형
- 문제 및 배경 : 패턴이 사용되는 분야 또는 배경, 해결하는 문제를 의미
- 해법 : 패턴을 이루는 요소들, 관계, 협동 과정
- 결과 : 패턴을 사용하면 얻게 되는 이점이나 영향
[추가 요소]
- 알려진 사례 : 간단한 적용 사례
- 샘플 코드 : 패턴이 적용된 원시 코드
- 원리, 정당성, 근거
4. GoF(Gang of Four) 디자인 패턴
객체지향 설계 단계 중 재사용에 관한 유용한 설계를 디자인 패턴화 하였다.
[생성 패턴]
- 객체를 생성하는 것과 관련된 패턴으로, 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하도록 만들어주어 유연성을 높일 수 있고 코드를 유지하기 쉬운 편이다.
- 객체의 생성과 참조 과정을 추상화함으로써 시스템을 개발할 때 부담을 덜어준다.
- 클래스나 객체의 생성과 참조과정을 정의하는 패턴
Factory
Method |
|
Singleton
|
|
Prototype
|
|
Builder
|
|
Abstract
Factory |
|
[구조 패턴]
- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
- 복잡한 형태의 구조를 갖는 시스템을 개발하기 쉽게 만들어주는 패턴
- 새로운 기능을 가진 복합 객체를 효과적으로 작성할 수 있다.
- ex) 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴. 프로그램 내의 자료구조나 인터페이스 구조 등을 설계하는데 많이 활용
Composite
|
|
Adapter
|
|
Bridge
|
|
Decorator
|
|
Facade
|
|
Flyweight
|
|
Proxy
|
|
[행위 패턴]
- 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의한다.
- 메세지 교환과 관련된 것으로, 객체 간의 행위나 알고리즘 등과 관련된 패턴을 말한다.
Chain of Responsibility
(책임 연쇄) |
|
Iterator
(반복자) |
|
Command
(명령) |
|
Interpreter
(해석자) |
|
Memento
(기록) |
|
Observer
(감시자) |
|
State
(상태) |
|
Strategy
(전략) |
|
Visitor
(방문자) |
|
Template Method
|
|
Mediator
(중재자) |
|
5. 디자인 패턴 vs 아키텍처 패턴
- 아키텍처 패턴이 상위 설계에 이용된다.
- 아키텍처 패턴 : 시스템 전체 구조를 설계하기 위한 참조 모델
- 디자인 패턴 : 서브 시스템 내 컴포넌트와 그들 간의 관계를 구성하기 위한 참조모델
https://blog.naver.com/ju_ble/223444300291
네이버 블로그에 2024. 5. 12. 17:18 작성했던 글을 티스토리에 보기 편하게 옮김 !
[Study] 디자인 패턴(Design Pattern)
1. 디자인 패턴 자주 사용하는 설계 형태를 정형화해서 이를 유형별로 설계 템플릿을 만들어둔 것으로, 소...
blog.naver.com
728x90
반응형
'기술 노트' 카테고리의 다른 글
[백준-깃허브] 백준과 깃허브 연동하기, 자동 커밋, 백준허브 (0) | 2024.11.13 |
---|---|
[깃허브] 깃허브(Github) 리드미 3D 잔디 꾸미기 (7) | 2024.09.24 |
[Study] 스프링 시큐리티(Spring Security) (2) | 2024.09.23 |
[Study] 자바 예외(Java Exception) (0) | 2024.09.23 |
IT[Study] 깃 브랜치 전략(git-branch-strategy) (11) | 2024.09.23 |