[4. 서버 프로그램 구현] 디자인 패턴

수정 Soojung·2023년 10월 5일
0

정보처리기사 실기

목록 보기
13/14
post-thumbnail

💡 디자인 패턴 (Design Pattern)

  • 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
  • '바퀴를 다시 발명하지 마라(Don't reinvent the wheel)'
    • 개발 과정 중에 문제가 발생하면, 새로운 해결책 구상보다
      문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더욱 효율적임
  • GoF 디자인패턴 = 생성 패턴 / 구조 패턴 / 행위 패턴

💡 생성 패턴 (Creational Pattern)

클래스나 객체의 생성과 참조 과정을 정의하는 패턴 [5가지]

  • Abstract Factory (추상 팩토리)
    • 구체적인 클래스에 의존하지 X
    • 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스 제공
    • 연관된 서브 클래스를 묶어 한 번에 교체 가능
  • Builder (빌더)
    • 작게 분리된 복잡한 인스턴스를 조립하여 객체 생성
    • 객체의 생성과 표기를 분리하여, 동일한 객체 생성에서도 서로 다른 결과 가능
  • Factory Method (팩토리 메소드)
    • 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화
    • 상위 클래스 = 인터페이스 정의 / 하위 클래스 = 인터페이스 생성
  • Prototype (프로토타입)
    • 원본 객체를 복제하여 객체 생성
    • 처음부터 일반적인 원형을 만들어 놓고, 복사한 후 필요한 부분만 수정하여 사용
  • Singleton (싱글톤)
    • 한 클래스에 한 객체만 존재하도록 제한
    • 여러 프로세스가 동시에 참조 불가능

💡 구조 패턴 (Structural Pattern)

구조가 복잡한 시스템을 개발하기 쉽도록
클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴 [7가지]

  • Adapter (어댑터)
    • 기존의 클래스를 재사용할 수 있도록 중간에서 맞춰주는 인터페이스로 변환
  • Bridge (브리지)
    • 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장 가능하도록 구성
    • 기능 클래스와 구현 클래스를 연결함
  • Composite (컴포지트)
    • 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층 표현
    • 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용
  • Decorator (데코레이터)
    • 기존 클래스에 필요한 기능을 추가하여 확장
  • Facade (퍼싸드)
    • 복잡한 서브 클래스를 피해 더 상위에 인터페이스를 구성
    • 서브 클래스들의 기능을 간편하게 사용할수 있도록 함
    • 서브 클래스들 사이에 통합 인터페이스를 제공하는 Wrapper 객체 필요
  • Flyweight (플라이웨이트)
    • 여러 개의 가상 인스턴스 제공함으로써 메모리 절감 클래스의 경량화 목적
    • 인스턴스를 매번 생성하지 X, 가능한 공유해서 사용함
    • 다수의 유사 객체 생성 및 조작 시 유용하게 사용 가능
  • Proxy (프록시)
    • 접근이 어려운 객체와 이를 연결하려는 객체 사이에서 인터페이스 역할 수행
    • 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 주로 이용

💡 행위 패턴 (Behavioral Pattern)

클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴 [11가지]

  • Chain of Responsibility (책임 연쇄)
    • 요청 처리 가능 객체가 여러개 존재하여 한 객체가 처리 못하면 다음 객체로 넘어감
    • 요청 처리 객체들이 고리로 묶여 있어서, 요청 해결까지 책임 넘김
  • Command (커맨드)
    • 요청을 객체 형태로 캡슐화하여 재이용 or 취소 가능하도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴
    • 요청에 사용되는 각종 명령어들을 추상 클래스 & 구체 클래스로 분리하여 단순화
  • Interpreter (인터프리터)
    • 언어에 문법 표현을 정의
    • SQL or 통신 프로토콜 개발 시 사용
  • Iterator (반복자)
    • 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 함
    • 내부 표현 방법의 노출 없이 순차 접근 가능
  • Mediator (중재자)
    • 수많은 객체들 간 복잡한 상호작용(인터페이스)을 캡슐화하여 객체로 정의함
    • 객체 사이의 의존성을 줄여 결합도 감소 가능
  • Memento (메멘토)
    • 객체를 이전 상태로 복구할 수 있도록 작업취소 요청
  • Observer (옵서버)
    • 한 객체의 상태가 변할 시 객체에 상속되어 있는 다른 객체들에게 변화된 상태 전달
    • 분산 시스템 간 생성, 발생, 수신 시 사용
  • State (상태)
    • 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
    • 객체의 상태를 캡슐화하고 이를 참조하게 함
  • Strategy (전략)
    • 동일 알고리즘을 개별적으로 캡슐화하여 필요할 때 상호 교환 가능
  • Template Method (템플릿 메소드)
    • 상위 클래스 = 골격 정의 / 하위 클래스 = 세부 처리를 구체화
    • 유사한 서브 클래스를 묶어 공통된 내용을 상위 클래스에서 정의
  • Visitor (방문자)
    • 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
    • 해당 클래스의 메서드가 각 클래스를 방문하며 특정 작업 수행
profile
💬 Backend Developer

0개의 댓글

관련 채용 정보