안녕하세요. 펄입니다. 이번에는 디자인 패턴의 개념에 대해서 공부해볼 예정입니다.
4.1 디자인 패턴의 이해
디자인 패턴 구조는 콘텍스트, 문제, 해결 이라는 3개의 필수 요소로 구성된다.
- 콘텍스트 : 문제가 발생하는 여러 상황을 기술한다. 패턴이 적용될 수 있는 상황을 나타낸다. 경우에 따라서는 패턴이 유용하지 못한 상황을 나타내기도 한다.
- 문제 : 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술한다. 이 때, 여러 제약 사항과 영향력도 문제 해결을 위해 고려해야 한다.
- 해결 : 문제를 해결하도록 설계를 구성하는 요소들과 그 요소들 사이의 관계, 책임, 협력 관계를 기술한다. 해결은 반드시 구체적인 구현 방법이나 언어에 의존적이지 않으며 다양한 상황에 적용할 수 있는 일종의 템플릿이다.
. 아키텍처 패턴 : 시스템을 구성하는 컴포넌트의 구성과 컴포넌트 사이의 협조 방법을 패턴화한 것이다. 레이어 패턴이나 파이프 필터, 브로커 패턴 등이 대표적이다.
. 디자인 패턴 : 아키텍처 패턴에서 컴포넌트의 내부 구조를 대상으로 한 클래스/ 객체의 구조와 협업 방법을 패턴화한 것이다.
. 관용구 : 각각의 프로그램 언어 특유의 패턴. 프로그래밍에서 자주 사용하는 기술 방법(코딩방법)을 패턴화한 것이다.
4.2 GoF 디자인 패턴
에리히 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스(이름을 아는건 중요하다고 생각하지 않지만 왠지 알아두고 싶어서 한 번 적어본다...ㅎㅎ)는 소프트웨어 개발 영역에서 디자인 패턴을 구체화하고 체계화한 GoF라 불리는 사람들이다. 이들은 디자인 패턴을 23가지로 정리하고, 생성(creational), 구조(structural), 행위(behavioral)의 3가지로 분류했다.
생성 패턴 : 객체 생성에 관련된 패턴으로, 객체의 생성과 조합을 캡슐화해 특정 개겣가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다. 팩토리 메서드, 추상 팩토리, 빌더, 프로토타입, 싱글턴 패턴이 있다.
구조 패턴 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다. ex) 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다. 어댑터, 퍼사드, 브리지, 컴퍼지트, 플라이웨이트 패턴 등이 있다.
행위 패턴 : 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴. 커맨드, 인터프리터, 이터레이터, 미디에이터, 메멘토, 옵서버, 스테이트, 스트래티지, 비지터 등이 있다.
책에서는 다음 10가지 디자인 패턴을 다룬다.
생성 패턴 : 추상 팩토리(Abstract Factory), 팩토리 메서드(Factory Method), 싱글턴(Singleton)
구조 패턴 : 컴퍼지트(Composite), 데커레이터(Decorator)
행위 패턴 : 옵서버(Observer), 스테이트(State), 스트래티지(Strategy), 템플릿 메서드(Template Method), 커맨드(Command)
4.3 UML과 디자인 패턴
UML 2.0에서 디자인 패턴을 표현하는 도구로 컬레보레이션(Collaboration)이 있다. 컬레보레이션을 통해서 디자인 패턴을 정확하게 표현하려면 구조적인 면과 행위적인 면을 모두 표현할 필요가 있다. 구조적인 면은 어떤 요소들이 주어진 목적을 달성하기 위해 협력하는지 나타내고, 행위적인 면에서는 협력을 위한 요소들의 상호작용을 나타낸다.
4.3.1 컬레보레이션 - Collaboration
UML에서는 객체들이 특정 상황에서 수행하는 역할의 상호작용을 컬레보레이션이라는 요소로 작성한다. 컬레보레이션은 역할들의 상호작용을 추상화한 것으로, 특별한 상황에 적용하면 많은 시스템 개발에 재사용 가능하다. 컬레보레이션 어커런스(Collaboration Occurrence)는 더 구체적인 상황에서의 컬레보레이션 적용을 표현해준다.
4.3.2 순차 다이어그램 - Sequence Diagram
UML 2.0에서 객체들의 상호작용을 나타내는 다이어그램 중 하나.
생명선(LifeLine) : 해당 객체 존재함을 보여줌.
활성구간(Activation) : 활성 구간, 생명선을 따라서 좁고 긴 사각형. = 객체가 실제 연산 실행 중인 상태.
객체사이의 메세지 : 화살표
* 동기와 비동기
동기(synchronous) : 메세지를 보내고 결과가 오기를 기다린 후 남은 로직 실행, 끝이 닫힌 화살표
비동기(asynchronous) : 메세지를 보내고 결과와 상관없이 남은 로직 실행, 끝이 열린 화살표
가드(guard) : 메세지가 송신되는 데 만족해야하는 조건.
여기 정리가 잘 돼있네용.
https://itwiki.kr/w/%EC%8B%9C%ED%80%80%EC%8A%A4_%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
순차 다이어그램은 가능한 한 시나리오만 표현해야한다. 여러 시나리오 표현시 너무 복잡해져서 이해하기가 어렵다. 또한 순차다이어그램에서 활성구간(긴 사각형)은 생략할 수 있다.
※ 순차 다이어그램 상에서 상호작용을 나타내는 키워드
loop : 반복
opt : 특정 조건에서만 상호작용을 선택적으로 수행
alt : 상호작용을 조건에 따라 선택적으로 수행( = if)
par : 동시 실행되는 사호작용
break : 특정 상호작용 그룹 빠져나갈 때 사용.
4.3.3 순차 다이어그램과 클래스 다이어그램 관계
순차 다이어그램은 객체 사이의 메세지 흐름과 순서를 알려주는 행위 측면에 중점을 두는 모델
클래스 다이어그램은 시스템의 구조적인 측면에 중점을 두는 모델.
장기적인 관계 -> 연관 관계 : 열린 화살표 실선
단기적인 관계 -> 지역변수나 인자의 형태. : 의존 관계 : 열린 화살표 점선
회사 업무에 써먹으려 하는데... 막상 써먹을라니까 너무 어렵네요ㅠ,ㅠ
그리고 다른 일도 겹치니까 다이어그램 그리는 건 꿈도 못꾸는듯..
다들 행복하세요~
다음부터는 디자인 패턴입니다~!
'Java > Java 객체지향 디자인 패턴' 카테고리의 다른 글
[Java 객체 지향 디자인 패턴] 6. 싱글턴 패턴 - Singleton Pattern : 단하나! 비동기 시 주의 (0) | 2022.02.23 |
---|---|
[Java 객체 지향 디자인 패턴] 5. 스트래티지 패턴 - Strategy Pattern~! 전략 패턴~! (0) | 2022.02.23 |
[Java 객체 지향 디자인 패턴] 3. SOLID 원칙(SRP, OCP, LSP, DIP, ISP) (0) | 2022.02.08 |
[Java 객체 지향 디자인 패턴] 2. 객체지향 원리 (0) | 2022.01.25 |
[Java 객체 지향 디자인 패턴] 1. 객체지향 모델링 (0) | 2022.01.25 |
댓글