본문 바로가기
컴퓨터 과학/디자인패턴

[디자인 패턴] 디자인 패턴의 역사와 종류

by webcodur 2024. 3. 24.
728x90
반응형

 

목차

     

     

    디자인 패턴

    디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제를 해결하기 위한 해결책을 체계적으로 정리한 것이다. 이러한 패턴들은 개발 과정에서 발생하는 다양한 문제에 대해 재사용 가능한 솔루션을 제공한다. 디자인 패턴의 역사와 발전 과정, 그리고 주요 패턴들에 대해 알아보자.

     

    역사

    • 1987년: 컴퓨터 과학자 워드 커닝햄과 켄트 벡이 Smalltalk 언어를 사용하여 디자인 패턴에 대한 아이디어를 실험하기 시작했다. 이들의 작업은 객체 지향 프로그래밍 커뮤니티에 큰 영향을 미쳤다.
    • 1994년: 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블리시디스 네 명의 저자가 "Design Patterns: Elements of Reusable Object-Oriented Software"라는 책을 출간했다. 이 책은 "Gang of Four(GoF)"로 알려진 저자들에 의해 발표되었으며, 디자인 패턴 분야에서의 기념비적인 작업으로 여겨진다. 이 책은 23가지 디자인 패턴을 소개하며 소프트웨어 설계에 있어 재사용 가능한 설계의 중요성을 강조했다.

     

    종류

    디자인 패턴은 크게 생성(Creational), 구조(Structural), 행위(Behavioral)의 세 가지 주요 유형으로 분류된다. 각각의 패턴 유형은 소프트웨어 설계의 특정 측면에 초점을 맞춘다.

     

    생성 패턴(Creational Patterns)

    생성 패턴은 객체 생성에 관련된 패턴으로, 객체의 생성 과정을 보다 유연하게 만들어 준다. 이는 객체가 생성되는 방식, 객체의 구성, 객체의 표현 방식 등을 추상화함으로써 시스템의 독립성을 향상시키고, 코드의 재사용성을 높인다. 생성 패턴은 객체를 직접 생성하는 대신 객체 생성을 위한 특정 메커니즘을 제공하여, 생성 과정의 복잡성을 줄이고, 객체 생성과 클래스 구현 사이의 의존성을 낮추는 데 초점을 맞춘다.

     

    1. 심플 팩토리: 객체 생성 처리를 한 곳에 집중시켜 간단한 객체 생성 요구에 대응한다.
    2. 추상 팩토리: 관련된 객체의 집합을 생성하기 위한 인터페이스를 제공한다.
    3. 팩토리 메서드: 객체 생성을 서브클래스에게 위임하여 객체 생성에 대한 유연성을 증가시킨다.
    4. 빌더: 복잡한 객체의 생성 과정을 여러 단계로 나눠, 동일한 생성 절차에서 다른 표현 결과를 만들 수 있게 한다.
    5. 프로토타입: 기존 객체를 복사하여 객체를 생성하는 방식으로, 복잡한 객체의 생성 비용을 절감한다.
    6. 싱글톤: 한 클래스에 대한 객체 인스턴스가 오직 하나임을 보장한다.

     

     

    구조 패턴(Structural Patterns)

    구조 패턴은 클래스나 객체를 조합해 더 큰 구조를 만드는 방법에 관한 패턴이다. 이 패턴은 서로 다른 인터페이스를 가진 클래스들이 함께 작동할 수 있도록 하거나, 객체들을 구성하여 새로운 기능을 제공하는 등, 클래스나 객체의 구성 방식에 초점을 맞춘다. 구조 패턴은 기존의 클래스나 객체들을 재사용하여 복잡성을 관리하고, 시스템 내부의 다양한 부분들이 더 잘 협력할 수 있게 만들어 준다.

    1. 어댑터: 호환되지 않는 인터페이스로 인한 클래스들이 함께 작동할 수 있게 해준다.
    2. 컴포지트: 객체들을 트리 구조로 구성하여, 개별 객체와 객체의 집합을 동일하게 처리할 수 있게 한다.
    3. 프록시: 다른 객체에 대한 접근을 제어하거나 기능을 추가하기 위한 대리 객체를 제공한다.
    4. 플라이웨이트: 공유를 통해 대량의 객체들이 소량의 메모리를 사용할 수 있게 한다.
    5. 파사드: 복잡한 시스템에 대한 단순한 인터페이스를 제공하여, 시스템에 접근하기 쉽게 한다.
    6. 데코레이터: 객체에 동적으로 새로운 책임을 추가할 수 있는 방법으로, 상속의 대안으로 사용된다.
    7. 브릿지: 추상화와 구현을 분리하여, 둘을 독립적으로 변형할 수 있게 한다.

     

     

    행위 패턴(Behavioral Patterns)

    행위 패턴은 객체들 사이의 통신과 책임 분배에 관련된 패턴이다. 이러한 패턴은 객체 간의 상호작용 방법 및 책임 할당을 중점적으로 다루며, 특히 객체들이 함께 작동하여 공통의 작업을 수행할 수 있도록 만들어 준다. 행위 패턴은 객체 사이의 결합도를 최소화하고, 각 객체의 책임을 명확히 함으로써 시스템의 유연성과 재사용성을 높인다.

    1. 책임 연쇄: 요청을 처리할 객체를 여러 개 연결한 후, 연쇄적으로 요청을 전달하여 처리할 수 있게 한다.
    2. 커맨드: 요청을 객체의 형태로 캡슐화하여, 사용자 정의 요청에 대한 다양한 처리를 구현할 수 있게 한다.
    3. 인터프리터: 언어의 문법을 위한 표현 방법을 정의하여, 주어진 언어에 대해 해석을 수행할 수 있게 한다.
    4. 반복자: 컬렉션 내부 구조를 노출시키지 않고, 그 요소들을 순회할 수 있는 방법을 제공한다.
    5. 중재자: 객체 간의 복잡한 통신을 캡슐화하여, 객체들이 직접 참조하지 않고도 통신할 수 있게 한다.
    6. 메멘토: 객체의 상태를 캡처하여 외부에 저장함으로써, 이후에 해당 상태로 객체를 복원할 수 있게 한다.
    7. 옵저버: 객체의 상태 변화를 관찰하는 옵저버들에게 변화를 알려, 그에 따른 반응을 할 수 있게 한다.
    8. 발행-구독: 발행자가 이벤트를 발생시키면, 이를 구독하는 구독자들에게 알림을 보내는 방식으로 통신한다.
    9. 상태: 객체의 상태에 따라 객체의 행동을 변경할 수 있게 하여, 객체가 자신의 상태를 내부적으로 변경할 수 있게 한다.
    10. 전략: 알고리즘을 객체로 캡슐화하고, 실행 중에 알고리즘을 교체할 수 있게 한다.
    11. 탬플릿 메소드: 알고리즘의 골격을 정의하고, 일부 단계를 서브클래스에서 구현하게 함으로써, 서브클래스가 알고리즘의 구조를 변경하지 않고 특정 단계를 재정의할 수 있게 한다.
    12. 방문자: 객체 구조의 요소들에 수행할 연산을 객체에서 분리하여, 추가 연산을 쉽게 할 수 있게 한다.

     

    https://webcodur.tistory.com/35 [디자인패턴] 생성 패턴(6) : 싱글톤(Singleton)

    https://webcodur.tistory.com/34 [디자인패턴] 생성 패턴(5) : 프로토타입(Prototype)

    https://webcodur.tistory.com/33 [디자인패턴] 생성 패턴(4) : 빌더(Builder)

    https://webcodur.tistory.com/32 [디자인패턴] 생성 패턴(3) : 팩토리 메서드(Factory Method)

    https://webcodur.tistory.com/31 [디자인패턴] 생성 패턴(2) : 추상 팩토리(Abstract Factory)

    https://webcodur.tistory.com/30 [디자인패턴] 생성 패턴(1) : 심플 팩토리(Simple Factory)

     

    https://webcodur.tistory.com/42 [디자인패턴] 구조 패턴(7) : 브릿지(Bridge)

    https://webcodur.tistory.com/41 [디자인패턴] 구조 패턴(6) : 데코레이터(Decorator)

    https://webcodur.tistory.com/40 [디자인패턴] 구조 패턴(5) : 파사드(Facade)

    https://webcodur.tistory.com/39 [디자인패턴] 구조 패턴(4) : 플라이웨이트(Flyweight)

    https://webcodur.tistory.com/38 [디자인패턴] 구조 패턴(3) : 프록시(Proxy)

    https://webcodur.tistory.com/37 [디자인패턴] 구조 패턴(2) : 컴포지트(Composite)

    https://webcodur.tistory.com/36 [디자인패턴] 구조 패턴(1) : 어댑터(Adapter)

     

    https://webcodur.tistory.com/54 [디자인패턴] 행위 패턴(12) : 방문자(Visitor)

    https://webcodur.tistory.com/53 [디자인패턴] 행위 패턴(11) : 템플릿 메소드(Template Method) https://webcodur.tistory.com/52 [디자인패턴] 행위 패턴(10) : 전략(Strategy)

    https://webcodur.tistory.com/51 [디자인패턴] 행위 패턴(9) : 상태(State)

    https://webcodur.tistory.com/50 [디자인패턴] 행위 패턴(8) : 발행-구독(Publisher-Subscriber)

    https://webcodur.tistory.com/49 [디자인패턴] 행위 패턴(7) : 옵저버(Observer)

    https://webcodur.tistory.com/48 [디자인패턴] 행위 패턴(6) : 메멘토(Memento)

    https://webcodur.tistory.com/47 [디자인패턴] 행위 패턴(5) : 중재자(Mediator)

    https://webcodur.tistory.com/46 [디자인패턴] 행위 패턴(4) : 반복자(iterator)

    https://webcodur.tistory.com/45 [디자인패턴] 행위 패턴(3) : 인터프리터(Interpreter)

    https://webcodur.tistory.com/44 [디자인패턴] 행위 패턴(2) : 커맨드(Command)

    https://webcodur.tistory.com/43 [디자인패턴] 행위 패턴(1) : 책임 연쇄(Chain of Responsibility)

     

     

     

    반응형