[2023 정보처리기사] 1과목 – 12. 아키텍처 패턴, 디자인 패턴

1. 아키텍처 패턴이란

: 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식. 자주사용하는 기능을 미리 구현한 것.

– 장점: 시행착오를 줄임, 예측 가능, 안정적 개발 가능

 

2. 아키텍처 패턴의 종류 ★

  • 레이어 패터(Layers pattern)

: 각각의 서브시스템들이 계층 구조를 이룸.

Ex) OSI참조 모델

  • 클라이언트-서버 패턴(Client-Server Pattern)

: 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성.

– 서버는 항상 대기, 서버와 클라이언트는 서로 독립적.

  • 파이프-필터 패턴(Pipe-Filter Pattern)

: 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터 전송. 노드와 간선으로 구성.

– 재사용성 증가, 확장용이.

Ex) UNIX의 쉘(Shell)

  • 모델-뷰-컨트롤러 패턴(Model-View-Controller Pattern)

: 서브시스템을 3개의 부분으로 구조화. 대화형 어플리케이션에 적합.

    • 모델(Model): 서브시스템의 핵심 기능과 데이터를 보관.
    • 뷰(View): 사용자에게 정보를 표시.
    • 컨트롤러(Controller): 사용자로부터 받은 입력을 처리.

 

3. 디자인 패턴

: 각 모듈의 세분화된 역할이나 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 해결 방식.

– GoF 디자인 패턴은 유형에 따라 생성패턴 5개, 구조패턴 7개, 행위패턴 11개로 구성됨.

* GoF(Gang of Four, 에릭 감마, 리차드 헬름, 랄프 존슨): 객체지향 설계단계 중 재사용에 관한 유용한 설계를 디자인 패턴화 한 것.

 

4. 디자인 패턴의 종류

  4. 1. 생성 패턴(Creational Pattern)

: 객체의 생성과 참조 과정을 캡슐화하여 객체가 생성⋅변경되어도 프로그램의 구조에는 영향 없음.

  • 추상 팩토리(Abstract Factory): 구체적인 클레스에 의존하지 않고 인터페이스를 통해 필요한 것만 그룹으로 생성해, 추상적으로 표현.
  • 빌더(Builder): 작게 분리된 인스턴스를 건축하듯이 조합하여 객체 생성.
  • 팩토리 메소드(Factory Method): 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화.
  • 프로토타입(Prototype): 원본 객체를 복제하는 방법으로 객체 생성.
  • 싱글톤(Singleton): 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스에서 동시에 참조 불가.

  4. 2. 구조 패턴(Structural Pattern)

: 클래스나 객체를 조합해 더 큰 구조로 만듦.

  • 어댑터(Adapter): 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있게 변환.
  • 브리지(Bridge): 구현부에서 추상층을 분리해, 서로 독립적으로 확장 가능.
  • 컴포지트(Composite): 복합 객체와 단일 객체를 구분 없이 다룰 때 사용.
  • 데코레이터(Decorator): 상속하지 않고, 능동적으로 객체의 기능을 확장.
  • 퍼싸드(Facade): 서브 클래스보다 상위에 인터페이스를 구성하여, 서브 클래스의 기능을 간편하게 사용.
  • 플라이웨이트(Flyweight): 인스턴스를 공유하여 메모리를 절약.
  • 프록시(Proxy): 접근이 어려운 객체를 연결하는 인터페이스 역할.

4. 3. 행위 패턴(Behavioral Pattern)

: 하나의 객체로 수행할 수 있는 작업을 여러 객체로 분배. => 결합도 최소화.

  • 책임 연쇄(Chain of Responsibility): 한 객체가 처리하지 못한 작업을 다음 객체에게 전달.
  • 커맨드(Command): 요청을 객체의 형태로 캡슐화.
  • 인터프리터(Interpreter): 언어에 문법 표현을 정의.
  • 반복자(Iterator): 접근이 잦은 객체에 대해 동일한 인터페이스 사용.
  • 중재자(Mediator): 수많은 객체간의 상호작용을 캡슐화하여 객체로 정의.
  • 메멘토(Mementor): 특정 시점에서의 객체 내부 상태를 객체화. 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있음.
  • 옵서버(Observer): 한 객체의 상태가 변화하면 상속된 다른 객체에 변화된 상태를 전달.
  • 상태(State) 객체의 상태에 따라 동일한 동작을 다르게 처리.
  • 전략(Strategy): 동일 계열 알고리즘을 개별 캡슐화.
  • 방문자(Visitor): 각 클래스 데이터 구조에서 처리 기능을 분리하여 별도 클래스 구성.

 

5. 아키텍처 패턴과 디자인패턴의 차이

– 아키텍처 패턴 : 전체 시스템의 구조를 설계. (=> 설계도의 표준을 정함.)

– 디자인 패턴: 서브시스템에 속하는 컴포넌트들과 그 관계를 설계. (=> 인테리어의 표준을 정함.)

– 아키텍처 패턴이 디자인 패턴보다 상위 수준의 설계에서 사용됨.

Leave a Comment