소프트웨어 설계 구분
상위 설계 | 하위 설계 |
- 아키텍처 설계, 기본설계 - 시스템 전체 구조 - 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) |
- 각 클래스들 데이터 구조에서 처리 기능을 분리해 별도 클래스로 구성하는 패턴 - 분리된 처리 기능은 각 클래스 방문해 수행 |
'Study > 정보처리기사 실기' 카테고리의 다른 글
[정보처리기사 실기] 2장 화면 설계 _ UI 설계 (0) | 2025.02.12 |
---|---|
[정보처리기사 실기] 2장 화면 설계 _ UI 요구사항 확인 (1) | 2025.02.07 |
[정보처리기사 실기] 1장 요구사항 확인 _ UML 분석모델 확인 (1) | 2025.02.03 |
[정보처리기사 실기] 1장 요구사항 확인 _ 요구사항 확인 (0) | 2025.01.31 |
[정보처리기사 실기] 1장 요구사항 확인 _ 현행 시스템 및 개발 기술 분석 (2) | 2025.01.23 |