개발 기록
> 디자인 패턴에 대해 알아보기 - 개념과 유형 본문

■
1. 디자인 패턴이란?
소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 할 수 있는 해책.
■
1. GOF 디자인 패턴
* GOF 디자인 패턴?
이미 잘 알려진 생성(Creational), 구조(Structural), 행위(Behavioral) 로 분류된 23개의 디자인 패턴은 4명의 유명한 개발자들에 의해 고안되었다. 이 4명의 개발자들을 the Gang of Four 또는 GoF 라고 부르며, 패턴은 GoF(Gang of Four) 디자인 패턴이라고 한다.
패턴의 의도 또는 목적에 따라 분류할 수 있다.

(1) 생성 패턴 (Creational Pattern)
객체 생성에 관련된 패턴으로, 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.
▶ 1. 추상 팩토리 메서드 (Abstract Factory Methods)
: 동일한 주제의 다른 팩토리를 묶어 준다.
▶ 2. 팩토리 메서드 (Factory Methods)
: 인스턴스 작성을 하위 클래스에게 맡긴다.
▶ 3. 빌더 (Builder)
: 생성과 표기를 분리해 복잡한 객체를 생성한다.
▶ 4. 프로토타입 (Prototype)
: 기존 객체를 복제함으로써 객체를 생성한다.
▶ 5. 싱글톤 (Singleton)
: 단 클래스에 한 객체만 존재하도록 제한한다..
(2) 구조 패턴 (Structural Pattern)
클래스나 객체를 조합해 더 큰 구조를 만드는 패턴으로 예를 들어 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다.
▶ 1. 어댑터 (Adapter)
: 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌운다.
▶ 2. 브리지 (Bridge)
: 추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있다.
▶ 3. 컴퍼지트 (Composite)
: 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있다.
▶ 4. 데코레이터 (Decorator)
: 기존 객체의 매서드에 새로운 행동을 추가하거나 오버라이드 할 수 있다.
▶ 5. 퍼사드 (Facade)
: 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다.
▶ 6. 플라이웨이트 (Flyweight)
: 다수의 유사한 객체를 생성·조작하는 비용을 절감할 수 있다.
▶ 7. 프록시 (Proxy)
: 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공한다.
프록시는 원래 객체에 대한 접근을 제어하므로, 당신의 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 한다..
☞ 적용 ex : 지연된 초기화, 접근제어, 원격 서비스의 로컬 실행, 요청들의 로깅, 요청 결과 캐싱
※ 데코레이터 구조와 비슷하나 이 두 패턴의 차이점은 프록시는 일반적으로 자체적으로 자신의 서비스 객체의 수명 주기를 관리하는 반면 데코레이터의 합성은 항상 클라이언트에 의해 제어된다는 점에서 다르다.

(3) 행동 패턴 (Behavioral Pattern)
객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴으로, 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 중점을 둔다.
▶ 1. 책임 연쇄 (Chain of Responsibility)
: 책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조
▶ 2. 커맨드 (Command)
: 위의 명령어를 각각 구현하는 것보다는 위 그림처럼 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행하는 것
▶ 3. 인터프리터 = 해석자(Interpreter)
: 문법 규칙을 클래스화한 구조를 갖는SQL 언어나 통신 프로토콜 같은 것을 개발할 때 사용
▶ 4. 반복자 (Iterator)
: 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 메서드를 이용해 자료구조를 활용할 수 있도록 해준다.
▶ 5. 중재자 (Mediator)
: 클래스간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 처리 하는 디자인 패턴
▶ 6. 메멘토 (Memento)
: Ctrl + z 와 같은 undo 기능 개발할 때 유용한 디자인패턴. 클래스 설계 관점에서 객체의 정보를 저장
▶ 7. 옵저버 (Observer)
: 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해주는 것
▶ 8. 상태 (State)
: 동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용하는 디자인 패턴
▶ 9. 전략 (Strategy)
: 알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다.
▶ 10. 템플릿 메서드 (Template Meothods)
: 상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정되는 디자인 패턴
▶ 11. 비지터 (Visitor)
: 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 하는 것
참고
https://refactoring.guru/ko/design-patterns/proxy
https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS8616098823
https://ko.wikipedia.org/wiki/%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4_(%EC%B1%85)
'디자인 패턴' 카테고리의 다른 글
| > [GOF Design Pattern] 행동 패턴 : 옵저버 (Observer) 패턴 - 개념과 구현 (0) | 2024.05.17 |
|---|---|
| > [GOF Design Pattern] 생성 패턴 : 팩토리 메서드(Factory Method) 패턴 - 개념과 구현 (0) | 2024.03.09 |
| > [GOF Design Pattern] 행동 패턴 : 커맨드 (Command) 패턴 - 개념과 구현 (0) | 2024.03.06 |
| > [GOF Design Pattern] 행동 패턴 : 전략 (Strategy) 패턴 - 개념과 구현 (6) | 2024.02.05 |
| > [GOF Design Pattern] 구조 패턴 : 프록시(Proxy) 패턴 - 개념과 구현 (0) | 2024.01.17 |