디자인 패턴과 종류
Programming/Java 기초

디자인 패턴과 종류

728x90

목차

     


     

    영상 참고하면 이해가 더 쉬울지도1
    영상 참고하면 이해가 더 쉬울지도2

     

    1. 디자인 패턴

    1.1. 디자인 패턴이란?

    소프트웨어 디자인에서 계속 재현되는 문제를 해결하는 재사용 가능한 해결법

    디자인 패턴 예시

    • 객체지향 프로그래밍에서 공통으로 디자인 문제를 찾아내고 해결하는 가이드라인
    • 특정 유형의 프로그래밍 문제를 해결하는 방식을 제공해주는 역할
    • 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정 상황에서 구조적인 문제를 해결하는 방식을 설명한다.

     

    1.2. 디자인 패턴의 장점 및 필요성

    개발자의 경험을 모아 공통적인 소프트웨어 디자인 문제를 해결하는 데 도움이 됨

    • 디자인 패턴 : '교육의 도구', '프로그래밍의 필수적인 부분'이라고 할 수 있다.

    디자인 문제와 그 해결책을 찾을 때, 디자인 패턴이 간결한 용어 모음을 제공해준다.

     

    업무 논의 및 디자인 문서를 작성할 때 등 상호 간 의사결정의 용어로도 쓰일 수 있다.

    • 개발자 간의 원활한 의사소통
    • 소프트웨어 구조 파악에 용이
    • 재사용을 통한 개발시간 단축

     

    1.3. 디자인 패턴의 단점

    • 객체지향 설계 위주 사용
    • 객체지향 구현 위주의 사용
    • 초기 투자 비용의 부담(디자인패턴이 반영되면 설계부터 진행하게되어 시간적인 비용이 들어가게 된다)

     

    1.4. 디자인 패턴의 분류

    1.4.1. 생성 패턴(Creation Pattern)

    : 객체의 생성 과정에 관여하는 패턴

     

    • 싱글톤(Singleton) 패턴
      • 클래스의 인스턴스가 하나임을 보장하고 접근할 수 있는 전역적인 접근점을 제공하는 패턴

    싱글톤 패턴

     

    • 빌더(Builder) 패턴
      • 복합 객체의 생성과정과 표현과정을 분리시켜 동일한 생성과정에서 다양한 표현을 생성할 수 있는 패턴

    빌더 패턴

     

    • 팩토리 메서드(Factory Method) 패턴
      • 객체를 생성하는 인터페이스를 정의하지만, 인스턴스를 만드는 클래스는 서브 클래스에서 결정하도록 하는 패턴

    팩토리 메서드 패턴

     

    • 추상 팩토리(Abstract Factory) 패턴
      • 구체적인 클래스를 지정하지 않고 관련성이 있거나 독립적인 객체들을 생성하기 위한 인터페이스를 제공하는 패턴

    추상 팩토리 패턴

     

    • 원형(Prototype) 패턴
      • 생성할 객체의 종류를 명시하는데 원형이 되는 예시물을 이용한다.
      • 새로운 객체를 이 원형들을 복사함으로써 생성하는 패턴

    원형 패턴

     

    1.4.2. 구조 패턴(Structural Pattern)

    : 클래스나 객체의 합성에 관한 패턴

     

    • 적응자(Adapter) 패턴 / 래퍼(Wrapper) 패턴 
      • 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴
      • 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해주는 패턴

     

    • 브리지(Bridge) 패턴 
      • 구현부에 추상층을 분리하여 각자 변형할 수 있는 패턴

    브리지 패턴

     

    • 컴포지트(Composite) 패턴 
      • 객체들의 관계를 트리 구조로 부분-전체 계층을 표현하는 패턴
      • 사용자가 단일/복합 객체 모두를 동일하게 다룬다.

    컴포지트 패턴

     

    • 테코레이터(Decorator) 패턴 
      • 주어진 상황 및 용도에 따라 어떤 객체에 덧붙이는 패턴 (대표적으로 Stream클래스 등)
      • 기능확장이 필요할 때 대신 쓸 수 있는 대안이 된다.

    데코레이터 패턴

     

    • 퍼사드(Facade) 패턴 
      • 서브시스템에 있는 인터페이스 집합에 하나의 인터페이스를 제공
      • 서브시스템을 좀 더 쉽게 사용하기 위해 고수준의 인터페이스를 정의한다.

    퍼사드 패턴

     

    • 프록시(Proxy) 패턴 
      • 어떤 다른 객체로 접근하는 것을 통제하기 위해 그 객체의 매니저 혹은 자리채움자를 제공

    프록시 패턴

     

    1.4.3. 행동 패턴(Behavioral Pattern)

    : 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법

     

    • 커맨드(Command) 패턴 
      • 요청을 객체로 캡슐화하여 서로 다른 사용자의 매개변수화, 요청 저장 혹은 로깅, 연산의 취소를 지원하게 만드는 것

    커맨드 패턴

     

    • 인터프리터(Interpreter) 패턴 
      • 주어진 언어에 대해서 문법을 위한 표현수단을 정의
      • 해당 언어로 된 문장을 해석하는 해석기를 사용하는 패턴

    인터프리터 패턴

     

    • 이터레이터(Iterator) 패턴 
      • 내부표현부를 노출하지 않고, 어떤 객체집합의 원소들을 순차적으로 접근할 수 있는 방법을 제공

    이터레이터 패턴

     

    • 메디에이터(Mediator) 패턴 
      • 하나의 집합인 객체들의 상호작용을 캡슐화하는 객체를 정의

    메디에이터 패턴

     

    • 옵저버(Observer) 패턴 
      • 객체들 사이에 1:N의 의존관계를 정의
      • 어떤 객체의 상태가 변할 때, 의존관계에 있는 모든 객체가 통지를 받고 자동으로 갱신된다.

     

    • 상태(State) 패턴 
      • 객체의 내부상태가 변경될 때 행동을 변경하도록 허락
      • 객체는 자신의 클래스가 변경되는 것처럼 보이게 된다.

    상태 패턴

     

    • 스트레티지(Strategy) 패턴 
      • 동일 계열의 알고리즘을 정의
      • 각각을 캡슐화하여, 이들을 상호교환이 가능하도록 한다.

    스트레티지 패턴

     

    • 템플릿(Template) 패턴 
      • 객체의 연산에서 알고리즘의 뼈대만 정의
      • 뼈대를 뺀 나머지 연산은 서브클래스에서 이뤄지게 한다.
      • 알고리즘의 구조는 변경하지 않고, 알고리즘의 각 단계를 서브클래스에서 재정의하도록 하는 것.
    • 비지터(Visitor) 패턴 
      • 객체구조를 이루는 원소에 대해 수행할 연산을 표현

    비지터 패턴

    300x250