디자인 패턴

0

정보처리기사

목록 보기
71/100

디자인 패턴 (Design Pattern) 정리


1. 디자인 패턴이란?

  • 소프트웨어 개발에서 모듈 간의 관계인터페이스 설계 시 사용할 수 있는 전형적인 해결 방법예제를 정리한 것입니다.
  • 개발 중 발생하는 문제에 대한 효율적인 해결책을 제공하여 개발 속도를 높이고 코드의 재사용성유지보수성을 향상시킵니다.

2. 디자인 패턴의 주요 목적

  • 바퀴를 다시 발명하지 말라는 개발 속담처럼 기존에 검증된 패턴을 참고하여 문제를 해결하도록 유도.
  • 코드의 중복 최소화, 결합도 감소, 확장성과 유연성을 높임.

3. 디자인 패턴의 분류

  1. 생성 패턴 (Creational Patterns)

    • 객체나 클래스를 생성하고 참조하는 과정을 정의.
    • 종류: 추상 팩토리, 팩토리 메소드, 빌더, 프로토타입, 싱글톤
  2. 구조 패턴 (Structural Patterns)

    • 클래스와 객체를 조합하여 더 큰 구조를 형성하는 방법을 정의.
    • 복잡한 시스템을 개발하기 쉽게 도와줌.
    • 종류: 어댑터, 브릿지, 컴포지트, 데코레이터, 퍼사드, 플라이웨이트, 프록시
  3. 행위 패턴 (Behavioral Patterns)

    • 클래스나 객체 간의 상호작용책임 분배 방법을 정의.
    • 결합도를 줄이고 상호작용을 명확하게 함.
    • 종류: 책임 연쇄, 커맨드, 인터프리터, 반복자, 중재자, 메멘토, 옵서버, 상태, 전략, 템플릿 메소드, 방문자

4. 주요 디자인 패턴 상세 설명

1) 생성 패턴 (5가지)

  • 추상 팩토리 (Abstract Factory)

    • 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 객체의 그룹을 생성.
    • 상위 클래스에서 객체 생성 로직을 정의하고 하위 클래스가 구체적인 객체를 생성.
  • 팩토리 메소드 (Factory Method)

    • 객체 생성을 서브클래스에서 처리하도록 분리하여 캡슐화.
    • 상위 클래스에서는 인터페이스만 정의하고, 실제 생성은 하위 클래스에서 담당.
    • 다른 이름으로 가상 생성자 패턴이라고도 함.
  • 빌더 (Builder)

    • 객체를 생성과 표현을 분리하여 서로 다른 결과물을 생성 가능.
    • 예: 언어별로 서로 다른 문장을 생성하는 구조.
  • 프로토타입 (Prototype)

    • 기존 원본 객체를 복제하여 새로운 객체를 생성하는 방식.
    • 비용이 큰 객체를 생성할 때 사용.
  • 싱글톤 (Singleton)

    • 클래스 내에 인스턴스를 단 하나만 유지하여 전역적으로 사용.
    • 메모리 낭비를 최소화.

2) 구조 패턴 (7가지)

  • 어댑터 (Adapter)

    • 호환되지 않는 클래스들의 인터페이스를 변환하여 사용 가능하게 만듦.
    • 예: 아이폰과 안드로이드 충전기 어댑터.
  • 브릿지 (Bridge)

    • 구현부추상부를 분리하여 확장성을 높임.
    • 기능과 구현을 각각 별도의 클래스로 관리.
  • 컴포지트 (Composite)

    • 여러 객체를 트리 구조로 만들어 단일 객체처럼 다룸.
    • 예: 디렉터리와 폴더 구조.
  • 데코레이터 (Decorator)

    • 기존 객체에 기능을 동적으로 확장하는 패턴.
    • 새로운 기능을 추가하기 위해 다른 객체를 덧붙이는 방식.
  • 퍼사드 (Facade)

    • 복잡한 서브클래스들을 감추고 상위 인터페이스를 제공하여 간편하게 사용.
    • 예: 여러 연산 클래스를 하나의 인터페이스로 통합.
  • 플라이웨이트 (Flyweight)

    • 메모리 절약을 위해 유사한 객체들을 공유하여 사용.
  • 프록시 (Proxy)

    • 접근이 어려운 객체와의 통신을 돕는 인터페이스 역할.
    • 예: 네트워크 연결, 대용량 캐시에 대한 접근.

3) 행위 패턴 (11가지)

  • 책임 연쇄 (Chain of Responsibility)

    • 요청이 처리될 때까지 여러 객체가 순서대로 책임을 넘김.
  • 커맨드 (Command)

    • 요청을 객체 형태로 캡슐화하여 처리 및 재사용.
  • 인터프리터 (Interpreter)

    • 특정 언어의 문법 표현을 정의하는 패턴.
    • 예: 맞춤법 검사기.
  • 반복자 (Iterator)

    • 데이터 구조에 접근하는 방식의 패턴.
    • 순차적인 접근을 제공하면서 내부 표현을 숨김.
  • 중재자 (Mediator)

    • 여러 객체 간의 상호작용을 캡슐화하여 결합도를 줄임.
  • 메멘토 (Memento)

    • 특정 시점의 객체 상태를 저장하고, 필요 시 해당 상태로 복원.
    • 예: Ctrl + Z(실행 취소).
  • 옵서버 (Observer)

    • 한 객체의 상태 변화가 다른 객체들에 전파되는 패턴.
    • 예: SNS 알림 기능.
  • 상태 (State)

    • 객체의 상태에 따라 다른 동작을 수행하는 패턴.
  • 전략 (Strategy)

    • 서로 다른 알고리즘들을 캡슐화하여 상호 교환 가능하게 함.
    • 예: 클라이언트가 알고리즘을 쉽게 변경 가능.
  • 템플릿 메소드 (Template Method)

    • 상위 클래스에서 공통 구조를 정의하고 하위 클래스에서 세부 처리를 구현.
    • 팩토리 메소드 패턴과 유사.
  • 방문자 (Visitor)

    • 데이터 구조와 처리 기능을 분리하여 클래스들을 방문하며 동작을 수행.

5. 요약 및 시험 대비 포인트

  • 디자인 패턴생성, 구조, 행위로 구분되며 각각의 패턴은 특정 문제를 해결하기 위해 사용됩니다.
  • 각 패턴의 정의, 특징, 예시를 정확히 이해하고 종류별로 구분할 수 있어야 합니다.
  • 특히 시험에서는 각 패턴의 이름, 용도, 특징을 묻는 문제가 출제될 수 있으므로 철저히 대비하세요.

0개의 댓글