출처 : 강의 교안, 시스템분석설계 with 애자일 (생능출판사, 최은만)
1. 설계 패턴
1.1 설계 패턴
- 아키텍처 설계 수준보다 낮은 수준의 설계 문제에 재사용 가능한 솔루션을 제공
- 패턴 (Pattern) : 실세계에 존재하는사물이나 개념에서 반복적으로 발생하는 형상을 추상화하여 정의한 것
- 패턴 사용의 장점
- 생산성 증가, 전문가 경험의 전달 및 학습 효과
- 솔루션에 대한 불필요한 논쟁 제거, 결과물의 품질 향상
- 설계 패턴 (design pattern)
- 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결책
- 많은 개발자들이 경험상 체득한 설계 지식을 검증하고 이를 추상화하여 일반화한 템플릿
- 설계 패턴을 사용하는 이유
- 쉽게 재사용 가능 ➡️ 검증된 것을 재사용함으로써 생산성을 높일 수 있음.
- 설계 작업이 쉬워짐.
- 설계 관련 지식이 정리됨.
- 객체지향 설계 원리를 잘 따르게 됨.
- 디자인을 논의하기 위한 의사소통이 쉬워짐.
1.2 설계 패턴을 정의하기 위한 형식
- 패턴명 : 패턴 자체의 내용을 효과적으로 전달할 수 있는 이름
- 유형 : 여러 개의 패턴을 체계적으로 분류
- 생성 패턴(Creational Pattern) : 객체의 생성 방식을 결정하는 패턴
- 구조 패턴(Structural Pattern) : 객체를 조직화하는 데 유용한 패턴
- 행위 패턴(Behavioral Pattern) : 객체의 행위를 조직, 관리, 결합하는 데 사용되는 패턴
2. 생성 패턴
2.1 생성 패턴
- 클래스의 인스턴스가 어떻게 생성되는가를 추상화하여 나타낸 것
- 객체가 생성, 합성, 표현되는 방식에 관계없이 시스템을 독립적으로 생성할 수 있도록 지원
- 생성 패턴과 적용 측면
- Abstract Factory : 제품 군의 유사 객체들을 많이 생성하는 방법 제공
- Builder : 유사한 다수 객체를 생성하여 합성하는 방법 제공
- Factory Method : 객체 생성 시점을 하위 클래스가 결정할 수 있도록 제공
- Prototype : 생성 객체를 복사 및 변경하여 객체를 생성하는 방법 제공
- Singleton : 오직 하나의 객체만 생성
2.2 싱글톤(Singleton) 패턴
- 한 클래스의 인스턴스가 단지 하나만 생성될 수 있도록 보장하기 위해 사용
- 적용 대상
- 정확히 하나의 인스턴스만 생성되어야 하는 경우
- 전역 변수들을 엄격하게 제어해야 할 때
- 패턴 구조
- 클래스 자체를 정적 변수로, 생성자는 private으로 선언
- 유일한 객체를 접근하는 정적 메소드를 둠.
3. 구조 패턴
3.1 구조 패턴
- 클래스의 기본 구조를 확장하여 더 큰 구조를 제공할 수 있도록 클래스와 객체를 어떻게 구성하는지를 표현
- 새로운 기능을 제공하기 위해 어떻게 기존의 객체를 합성할 것인가를 설명
- Adaptor : 객체의 인터페이스를 융통성 있게 구성하는 방법 제공
- Bridge : 객체의 인터페이스와 구현을 분리하는 방법 제공
- Compostie : 객체의 구조와 서로 다른 객체를 합성하는 방법 제공
- Decorator : 하위 클래스 생성 없이 객체의 기능을 확장하는 방법 제공
- Facade : 서브 시스템에 대한 통합 인터페이스를 구성하는 방법 제공
- Flyweight : 객체의 저장소 접근 및 활용 방법 제공
- Proxy : 객체의 접근 방법 및 위치에 대한 구성 방법 제공
3.2 어댑터 패턴
- 어댑터를 이용하여 호환성 문제 해결
- 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하는 방법 제공
- 호환되지 않는 인터페이스로 인해 사용할 수 없었던 클래스에 어댑터를 사용하면 함께 작동할 수 있도록 지원함.
- 적용 대상
- 기존 클래스를 사용해야 하나 인터페이스가 수정되어야 하는 경우
- 이미 만들어진 클래스를 재사용하고자 하나 재사용 가능한 라이브러리를 수정할 수 없는 경우
- 어댑터 클래스 : 사용하고자 하는 서비스에 연관되어 있고, 클라이언트가 원하는 인터페이스를 구현한 클래스
4. 행위 패턴
4.1 행위 패턴
- 객체에 주어지는 기능 및 책임과 관련 있으며, 객체 간의 상호작용을 표현
- 행위 패턴은 상속을 통해 클래스에 존재하는 도착을 전달(배포)
- Chain of Resposibility : 서비스 요청을 충족하는 객체를 찾는 방법 제공
- Command : 언제 어떻게 서비스를 제공할 것인가에 대한 방법 제공
- Interpreter : 언어 문법과 해석에 대한 방법 제공
- Iterator : 집합 요소들의 접근에 대한 방법 제공
- Mediator : 객체 간 상호작용을 단순화하는 방법 제공
- Memento : 객체 외부에 저장되는 정보를 다루는 방법 제공
- Observer :의존 객체의 행동을 관찰하는 수단 제공
- State : 객체 상태를 표현하고 상태에 따라 동작하는 방법 제공
- Strategy : 다수의 구현 알고리즘의 선택을 지원하는 방법 제공
- Template Method : 한 알고리즘의 처리 단계를 재구성하는 방법 제공
- Visitor : 클래스 변경 없이 연산을 적용하는 방법 제공
4.2 옵저버 패턴
- 옵저버 (Observer) : 객체 간에 일대다 의존성 관계를 부여하고, 한 객체의 상태가 변경되었을 때 다른 객체들에게 자동으로 알려주어 필요한 변경을 수행하고자 할 때 사용하는 패턴
- 적용 대상 : 한 객체의 변경이 발생하면 다른 객체가 동시에 변경되어야 하는 경우
- 발행-구독(publish-subscribe) 패턴 : 데이터를 보관하고 있는 Subject가 그 데이터를 이용하는 옵저버와 통신하면서 느슨하게 결합
- 패턴 구조
- Subject 클래스 : 옵저버 목록을 유지, 변경을 고지
- Observer 클래스 : 변경을 통지받고 접근을 요청
- ConcreteSubject 클래스 : 객체가 변경된 것을 옵저버에게 통보하며, ConcreteObserver는 갱신 인터페이스를 구현
4.3 비지터 패턴
- 비지터(Visitor) 패턴 : 객체의 구성 요소에 대응하여 수행되어야 하는 연산을 정의함으로써, 기존 클래스에 대한 변경 없이 새로운 연산을 쉽게 추가할 수 있도록 지원하는 패턴
- 데이터 구조와 처리를 분리
- 데이터 구조 안을 돌아다니는 주체인 방문자를 나타내는 클래스를 준비해서 처리를 맡김
- 새로운 처리를 추가하고 싶을 땐 새로운 방문자를 만들고 데이터 구조는 방문자를 받아들이면 됨
- 적용 대상 : 기존 객체에 대한 변경 없이 새로운 행위를 추가하거나 다양한 작업을 수행해야 하는 경우
- 개방폐쇄원칙(OCP, Open-Closed Principle)을 적용하는 방법의 하나
- 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다는 프로그래밍 원칙
- 패턴 구조
- 클래스 Visitor는 객체의 구성 요소에 대응하는 각 클래스의 Visit 연산을 선언
- 클래스 Element는 인자로 Visitor 객체를 갖는 Accept 연산을 정의
5. 패턴이 제공하는 장점
- 설계 결과물의 품질을 향상 시킴으로써, 개발된 SW 시스템의 확장성과 유지보수성이 높아짐
- 특정 요구사항과 도메인 클래스에 부합되는 패턴을 쉽게 찾을 수 있다면, 설계 활동의 시간과 노력이 감소됨
- 설계 패턴을 사용하면 개발자 간의 정보 교환 및 의사소통을 위한 공통의 용어를 확보할 수 있음
- 설계 패턴을 충분히 잘 이해하고 있다면, 모델에 대한 리팩토링(refactoring) 대상 찾기가 쉬워짐
6. 설계 문서화
- 아키텍처 문서를 작성하는 이유
- 설계자나 설계 팀이 더 좋은 설계 결정을 내리는데 도움을 준다.
- 다른 사람과 설계에 대하여 이야기를 할 수 있다
- 설계 문서 양식
1. 개요
1.1 시스템의 목표
1.2 하드웨어와 소프트웨어
1.3 소프트웨어의 주요기능
1.4 설계상 제약사항
1.5 참조된 개발 문서
2. 시스템구조
2.1 시스템구조 개요
2.2 시스템구조도
2.3 자료사전
3. 모듈설계 (각 모듈에 대한)
3.1 모듈 이름
3.2 알고리즘
3.3 인터페이스
3.4 오류 메시지
3.5 사용하는 파일
3.6 호출하는 모듈
3.7 기능 설명
4. 파일 구조 또는 데이터베이스 설계
4.1 외부파일(데이터베이스)의 논리적 구조
4.2 공유자료
4.3 파일접근방식(데이터베이스 관리 체제)
5. 요구분석 참조 표
6. 제약 사항
7. 참고 사항
참고 문헌
부록
'전공과목 정리 > 소프트웨어분석및설계' 카테고리의 다른 글
[소프트웨어분석및설계🛠️] 9장 SW 아키텍쳐 (2) | 2024.11.13 |
---|---|
[소프트웨어분석및설계🛠️] 8장 소프트웨어 설계 (1) | 2024.11.12 |
[소프트웨어분석및설계🛠️] 7장 객체지향방법론 - (2) 정적·동적 모델링 (2) | 2024.10.08 |
[소프트웨어분석및설계🛠️] 7장 객체지향방법론 - (1) 기능 모델링 (1) | 2024.09.08 |
[소프트웨어분석및설계🛠️] 6장 UML (Unified Modeling Language) (0) | 2024.09.08 |