Self-Dev/Design Patterns R&D
[4] 디자인 패턴 소개 - 디자인 패턴이란?
Khadra
2024. 5. 30. 14:32
출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서
디자인 패턴(Design Pattern)이란?
- 디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책이다.
- 이는 코드에서 반복되는 디자인 문제들을 해결하기 위한 청사진과 비슷하다.
- 패턴은 재사용할 수 있는 코드 조각이 아니라, 특정 문제를 해결하는 일반적인 개념들을 제공한다.
디자인 패턴의 특징
- 문제 해결 방식
- 패턴은 구체적인 코드가 아닌, 문제를 해결하는 방식을 설명한다.
- 따라서 동일한 패턴을 사용해도 프로그램의 코드 구현은 다를 수 있다.
- 맞춤화 가능
- 프로그램의 상황에 맞게 패턴의 개념을 적용하여 맞춤형 해결책을 구현할 수 있다.
- 프로그램의 상황에 맞게 패턴의 개념을 적용하여 맞춤형 해결책을 구현할 수 있다.
알고리즘과의 패턴의 차이점
- 알고리즘은 명확한 절차를 제공하지만, 패턴은 더 상위 수준의 해결책을 제시한다.
- 알고리즘은 요리법과 같지만, 패턴은 설계도에 비유될 수 있다.
알고리즘과 패턴의 비교
- 알고리즘
- 목표를 달성하기 위한 명확한 단계들을 정의한다.
- 예를 들어, 정렬 알고리즘은 데이터를 정렬하기 위한 구체적인 절차를 제공한다.
- 패턴
- 문제를 해결하기 위한 일반적인 설계도를 제공한다.
- 예를 들어, 디자인 패턴은 객체 지향 설계에서 자주 발생하는 문제들을 해결하는 방식들을 설명한다.
패턴은 무엇으로 구성되어 있나요?
디자인 패턴 설명의 구성 요소
디자인 패턴을 효과적으로 설명하기 위해 많은 상황에서 패턴을 매우 형식적으로 설명한다.
패턴 설명에 일반적으로 포함되는 주요 섹션들은 아래 내용을 참고하여야 한다.
패턴 주요 섹션
의도 (Intent)
- 목적: 문제와 그에 대한 해결책을 간략하게 설명한다.
- 핵심 내용: 패턴이 해결하려는 문제와 이를 통해 달성하고자 하는 목표를 명확히 제시한다.
동기 (Motivation)
- 목적: 문제와 패턴이 가능하게 하는 해결책을 추가 설명한다.
- 핵심 내용: 패턴이 왜 필요한지, 그리고 어떻게 문제를 해결하는지에 대한 상세한 설명을 제공한다.
구조 (Structure)
- 목적: 패턴의 각 부분과 이들이 어떻게 연관되어 있는지를 보여준다.
- 핵심 내용: 클래스 다이어그램이나 객체 다이어그램을 통해 패턴의 구조를 시각적으로 나타내어, 각 구성 요소의 역할과 상호 관계를 설명한다.
코드 예시 (Code Example)
- 목적: 여러 인기 있는 프로그래밍 언어로 된 코드 예시를 제공하여 독자들이 패턴의 아이디어를 쉽게 이해할 수 있도록 한다.
- 핵심 내용: 실제 코드 구현을 통해 패턴의 구체적인 동작 방식을 보여주며, 이를 통해 독자가 패턴을 적용하는 방법을 직관적으로 이해할 수 있도록 돕는다.
추가 정보 (Additional Information)
- 적용 (Applicability)
- 패턴을 적용할 수 있는 상황과 적용 시 고려해야 할 사항을 설명한다.
- 구현 단계 (Implementation Steps)
- 패턴을 구현하는 단계별 가이드를 제공한다.
- 다른 패턴과의 관계 (Relationships with Other Patterns)
- 패턴이 다른 패턴들과 어떻게 상호작용하거나 조합될 수 있는지를 설명한다.
- 적용 (Applicability)
패턴의 분류
디자인 패턴은 복잡성, 상세도, 그리고 설계 중인 전체 시스템에 대한 적용 범위에 따라 여러 가지로 분류된다.
이 분류는 도로 건설의 다양한 작업들에 비유할 수 있다. 예를 들어, 교차로를 더 안전하게 만들기 위해 신호등을 설치하거나, 보행자를 위한 지하도가 있는 다층 인터체인지를 구축하는 작업과 같다.
디자인 패턴의 수준별 분류
- 이디엄 (Idiom)
- 설명: 가장 기본적인 하위 수준의 패턴으로, 일반적으로 하나의 프로그래밍 언어에만 해당한다.
- 비유: 간단한 교차로에 신호등을 설치하는 작업.
- 아키텍처 패턴 (Architecture Pattern)
- 설명: 가장 보편적인 상위 수준의 패턴으로, 개발자들은 거의 모든 언어로 구현할 수 있다. 애플리케이션 전체의 구조를 설계하는 데 사용된다.
- 비유: 전체 다층 인터체인지를 구축하는 작업.
패턴의 의도 또는 목적에 따른 분류
디자인 패턴은 그 의도 또는 목적에 따라 다음 세 가지 주요 그룹으로 분류할 수 있다.
생성 패턴 (Creational Pattern)
- 설명: 객체 생성 메커니즘을 제공하여 기존 코드를 재활용하고 유연성을 증가시킨다.
- 예시: Singleton, Factory Method, Abstract Factory, Builder, Prototype
구조 패턴 (Structural Pattern)
- 설명: 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명한다.
- 예시: Adapter, Composite, Proxy, Flyweight, Facade, Bridge, Decorator
행동 패턴 (Behavioral Pattern)
- 설명: 객체 간의 효과적인 의사소통과 책임 할당을 처리한다.
- 예시: Observer, Strategy, Command, Chain of Responsibility, Mediator, Memento, State, Template Method, Visitor, Iterator, Interpreter