본문 바로가기

Study/정보처리기사 실기

[정보처리기사 실기] 1장 요구사항 확인 _ 아키텍처 패턴, 디자인 패턴

소프트웨어 설계 구분

상위 설계 하위 설계
- 아키텍처 설계, 기본설계
- 시스템 전체 구조
- DB, 인터페이스
- 비기능 요구사항
- 모듈설계, 상세설계
- 시스템 내부 동작
- 자료구조, 알고리즘
- 기능 요구사항

소프트웨어 아키텍쳐 (SA : Software Architecture)

- SW 구성요소, 그들 간 관계, 상호 작용 표현한 구조

- 시스템 구조 확립하는 소프트웨어 개발 중심축

- SW 설계, 구현과 통합, 테스팅까지 통합하는 뼈대


아키텍처의 4 + 1 관점


아키텍처 설계

- 프로시저를 그룹화하고 단위그룹 수준에서 설계하는 것

- 클래스 수준 이상 서브시스템 수준 덩어리화 (chunking) 작업

- 다양한 수준에서 구성 요소 역할과 구성 요소 간 관계에 집중


아키텍처 설계 원리

모듈화
(Modularity)
시스템 기능들을 모듈 단위 (서브 시스템)로 나누는 것
추상화
(Abstraction0)
문제의 전체적이고 포괄적인 개념 설계한 후 차례로 세분화
단계적 분해
(Stepwise Refinement
하향식 설계 전략으로, 문제를 상위 개념에서 하위 개념으로 전개
정보 은닉
(Information Hiding)
한 모듈 내부에 자료들 정보 감춰져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법

아키텍처 패턴

- 아키텍처 설계 위한 참조 패턴

- 아키텍처 구성요소들 역할과 관계 잘 알려진 공통 유형

ex) 계층형 (layer), 클라이언트 - 서버, 파이프 - 필터, MVC, 이벤트 기반 아키텍처, 데이터 중심 아키텍처, 피어 - 투 - 피어

 

1) 계층형 (Layer) 패턴

 - 시스템을 계층으로 구분해 구성하는 패턴

- 상위계층에서 서비스 제공

- 서로 마주보는 두 개 계층 사이에만 상호작용

ex) OSI 참조모델


2) 클라이언트 - 서버 패턴

- 하나의 서버와 다수의 클라이언트로 구성

- 서비스는 사용자 -> 클라이언트 -> 서버 -> 클라이언트 -> 사용자 순으로 진행

- 서버는 클라이언트 요청에 대비해 항상 대기 상태 유지

- 서버와 클라이언트는 요청 / 응답 제외하고 독립적

ex) 분산 시스템, 웹 서비스


3) 파이프 - 필터 패턴

- 한 필터의 출력을 다음 필터 입력으로 이동하면서 반복 처리

- 데이터 변환 수행하는 필터와 데이터 전송하는 파이프로 구성

ex) UNIX 쉘, 컴파일러


4) 브로커 패턴

- 분리된 컴포넌트들로 이뤄진 분산 시스템에서 사용, 이 컴포넌트들을 원격 서비스 실행을 통해 서로 상호 작용 할 수 있음

- 브로커가 컴포넌트간 통신 조정하는 역할 수행

- 원격 서비스 호출에 응답하는 컴포넌트들이 여러 개 있을 시 적합

ex) MQTT, 메시지전송시스템


5) MVC 패턴

- 모델 (Model) - 뷰 (View) - 컨트롤러 (Controller) 3개 부분

- 데이터 처리 부분과 표현 기능 분리, 재사용성 증진

모델 핵심 기능과 데이터 보관
사용자에게 정보 표시 (하나 이상 뷰 가능)
컨트롤러 사용자 요청 입력 받아 처리

디자인 패턴

- 하위 단계의 모듈 설계 시 참조하는 해결방식 또는 예제

- 소프트웨어 설계 시 공통으로 발생하는 문제를 해결하기 위해 자주 사용하는 설계 방법을 정리한 패턴


GOF 디자인 패턴

디자인 패턴 유형

 생성 패턴 객체 생성에 관여, 클래스 정의와 객체 생성 방식 구조화, 캡슐화 수행하는 패턴, 5개 패턴으로 구성
구조 패턴 클래스나 객체를 조합해 더 큰 구조로 만들 수 있게 해주는 패턴, 7개 패턴으로 구성
행위 패턴 - 클래스나 객체들이 상호 작용하는 방법과 알고리즘, 책임 분배 방법 정의하는 패턴, 11개 패턴
- 반복적으로 사용되는 객체들 상호 작용을 패턴화한 것

 

1) 생성 패턴 (Creational Pattern)

[생추 빌팩 프로싱]

추상 팩토리
(Abstract Factory)
- 구체적인 클래스에 의존하지 않고 인터페이스 통해 서로 연관, 의존하는 객체들이 그룹으로 생성하여
추상적으로 표현

- 연관된 서브 클래스를 묶어 한번에 교체하는 것 가능
빌더
(Builder)
- 작게 분리된 인스턴스를 건축하듯 조합해 객체 생성
- 객체 생성과정과 표현 방법 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과 만들 수 있음
팩토리 메소드
(Factory Method)
- 객체 생성을 서브 클래스에서 처리하도록 분리해 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- 가상 생성자 패턴 (Virtual Constructor)이라고도 함 
프로토타입
(Prototype)
- 원본 객체를 복제하는 방법으로 객체 생성하는 타입
- 일반적인 방법으로 객체 생성하며 비용 큰 경우 주로 이용
싱글톤
(Singleton)
- 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만 여러 프로세스가 동시에 참조할 수 없음
- 클래스 내에서 인스턴스가 하나뿐임을 보장하며 불필요한 메모리 낭비 최소화할 수 있음

2) 구조 패턴 (Structural Pattern)

[ 구어브 컴데 퍼플록]

어댑터
(Adapter)
- 호환성 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 기존 클래스 이용하고 싶지만 인터페이스가 일치하지 않을 때 이용
브리지
(Bridge)
- 구현부에서 추상층을 분리해 서로 독립적으로 확장할 수 있도록 구성한 패턴
- 기능과 구현을 2개 별도 클래스로 구현
컴포지트
(Composite)
- 여러 객체 가진 복합 객체와 단일 객체를 구분 없이 다룰 때 사용하는 패턴
- 객체들이 트리 구조 구성해 디렉토리 안에 디렉토리 있듯 복합 객체 안 복합 객체 포함되는 구조 구현
데코레이터
(Decorator)
- 객체 간 결합 통해 동적으로 기능들 확장할 수 있는 패턴
- 임의 객체에 부가적 기능 추가 위해 다른 객체들 덧붙이는 방식으로 구현
퍼싸드
(Facade)

- 복잡한 서브 클래스 피해 더 상위 인터페이스 구성, 서브 클래스 기능 간편하게 사용할 수 있도록 함
- 서브 클래스들 사이 통합 인터페이스 제공하는 Wrapper 객체 필요
플라이웨이트
(Flyweight)
- 인스턴스 필요 시 매번 생성하는 것 아니고 가능한 공유해 사용함으로써 메모리 절약하는 패턴
- 다수 유사 객체 생성하거나 조작할 때 유용하게 사용
프록씨
(Proxy)
- 접근 어려운 객체와 여기에 연결하려는 객체 사이 인터페이스 역할 수행하는 패턴
- 네트워크 연결, 메모리 대용량 객체로의 접근 등에 주로 이용

3) 행위 패턴 (Structural Pattern)

책임 연쇄
(Chain of Responsibility)
- 요청 처리할 수 있는 객체가 둘 이상 존재, 한 객체가 처리 못하면 다음 객체로 넘어감
- 요청 처리할 수 있는 각 객체들이 고리로 묶임, 요청 해결될 때까지 고리 따라 책임 넘어감
커맨드
(Command)
- 요청을 객체 형태로 캡슐화해 재이용하거나 취소할 수 있도록 요청에 필요한 정보
저장하거나 로그에 남기는 패턴

- 요청에 사용되는 각종 명령어들을 추상 클래스, 구체 클래스로 분리해 단순화
인터프리터
(Interpreter)
- 언어에 문법 표현 정의하는 패턴
- SQL이나 통신 프로토콜과 같은 것 개발할 때 사용
반복자
(Iterator)
- 자료 구조와 같이 접근 잦은 객체에 대해 동일한 인터페이스 사용하도록 하는 패턴
- 내부 표현 방법 노출 없이 순차적 접근 가능
중재자
(Mediator)
- 수많은 객체 간 복잡한 상호작용 캡슐화해 객체로 정의하는 패턴
- 객체 사이 의존성 줄여 결합도 감소 가능
메멘토
(Memento)
- 특정 시점에서 객체 내부 상태 객체화함으로써 이후 요청에  따라 객체를 해당 시점 상태로 돌릴 수 있는 기능 제공하는 패턴
- Ctrl + Z와 같은 되돌리기 기능 개발할 때 주로 이용
옵서버
(Observer)
- 한 객체 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태 전달하는 패턴
- 한 객체 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가서 자동으로 내용
갱신되는 방식으로 일대다 의존성 정의하는 패턴

- 상호작용 하는 객체 사이에서는 가능하면 느슨하게 결합하는 패턴
- 주로 분산된 시스템 간 이벤트 생성, 발행(Publish)하고 수신 (Subscribe)해야 할 때 이용 
상태
(State)
- 객체 상태에 따라 동일 동작 다르게 처리할 때 사용하는 패턴
- 객체 상태 캡슐화하고 이를 참조하는 방식으로 처리
전략
(Strategy)
- 동일 계열 알고리즘들 개별적으로 캡슐화해 상호 교환할 수 있게 정의하는 패턴
- 클라이언트는 독립적으로 원하는 알고리즘 선택해 사용 가능, 클라이언트에 영향 없이
알고리즘 변경 가능
템플릿 메소드
(Template Method)
- 상위 클래스에서 골격 정의하고, 하위 클래스에서 세부 처리 구체화하는 구조 패턴
- 유사 서브 클래스 묶어 공통된 내용 상위 클래스에서 정의해 코드 양 줄이고 유지보수
용이하게 함
방문자
(Visitor)
- 각 클래스들 데이터 구조에서 처리 기능을 분리해 별도 클래스로 구성하는 패턴
- 분리된 처리 기능은 각 클래스 방문해 수행