☁️정리/❄️CS

[CS] 디자인 패턴_행위패턴

뿌야._. 2023. 8. 18. 15:42

💡행위 패턴이란?

클래스나 객체의 책임 분배 방법과 관련된 패턴

 

💡행위 패턴 특징

하나의 객체로 수행할 수 없는 것을 여러 객체로 분배하여 결합도 최소화

 

💡행위 패턴 종류

Chain-of-Responsibility

Command

Interpreter

Iterator

Mediator

Memento

Observer

State

Strategy

Template Method

Visitor

 

💡Chain-of-Responsibility 패턴

정의 

: 사슬 방식으로 연결된 객체가 요청이 들어오면 그 요청을 수행하지 못하는 객체라면 다음 객체에 넘김

ex) JAVA의 try catch문

 

장점

: 내부 구조를 알 필요 없음

: 코드를 변경하지 않고 핸들러를 chain에 동적으로 추가하거나 처리 순서를 변경하거나 삭제 가능 (유연성)

 

단점

: 디버깅하기 어려움
: 요청이 반드시 수행된다는 보장 없음

 

💡Command 패턴

정의 

: 실행될 기능을 클래스로 만들어 캡슐화하는 패턴

 

장점

: 실행될 기능이 변경되더라도 호출자 클래스를 수정 없이 사용 가능

 

단점

: 코드 복잡도 증가

 

💡Interpreter 패턴

정의 

: 자주 등장하는 문제를 간단한 언어로 정의하고 재사용하는 패턴

 

장점

: 언어 쉽게 구현 가능 및 변경, 확장 가능

 

단점

: 문법 규칙이 많아지면 복잡해짐

 

💡Iterator 패턴

정의 

: Collection 구현 방법을 노출시키지 않으면서 그 안에 들어있는 모든 항목을 순차적인 접근을 지원하는 패턴

 

장점

: 내부 구조 노출 x

: 순회 알고리즘 코드를 분리할 수 있음 (단일책임원칙)

: 결합도 낮춤

 

단점

: 복잡도 증가

 

 

💡Mediator 패턴

정의 

: 캡슐화를 통해 M:N -> M:1 관계로 바꿔 상호작용을 원활하게 하는 패턴

 

장점

: 효율적인 자원 관리 가능

 

단점

: Mediator 객체에 권한이 집중화되어 굉장히 크며 복잡해져, 설계 및 Mediator 객체 수정 시 주의

 

💡Memento 패턴

정의 

: 객체를 변경 이전 상태로 복원할 수 있는 패턴

 

장점

: 캡슐화를 지키면서 상태 객체의 상태 스냅샷 생성 가능

 

단점

: 객체를 많이 생성할수록 메모리 소비가 큼

 

💡Observer 패턴

정의 

: 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 패턴

 

장점

: 실시간으로 객체의 변경사항을 알릴 수 있음

: 느슨한 결합으로 시스템 유연, 객체 간의 의존성 제거

 

단점

: 많이 사용하면 상태 관리 힘듦

: 데이터 배분에 문제가 생기면 큰 문제 발생 가능

 

💡State 패턴

정의 

: 상태를 객체화하여 상태에 따라 다르게 행동하도록 위임하는 패턴

 

장점

: 하나의 객체에 대한 여러 동작을 구현할 때 상태 객체만 수정하므로 동작의 추가, 삭제 및 수정이 간단
: 코드 간결, 가독성 증가 (객체 상태에 따른 조건문이 줄어들기 때문)

 

단점

: 상태 객체가 증가하여 관리해야 할 클래스 수 증가

 

💡Strategy 패턴

정의 

: 행위를 클래스로 캡슐화하여 동적으로 바꿀 수 있도록 해주는 패턴

 

장점

: 런타임에 객체 내부에서 사용되는 알고리즘 선택 가능

 

단점

: 추가적인 클래스 및 인터페이스 필요시 코드 복잡성 증가

: 런타임에 알고리즘 선택하는데 추가적인 오버헤드 발생 가능

 

💡Template Method 패턴

정의 

: 작업의 일부분을 서브 클래스로 캡슐화해서 전체 일을 수행하는 구조는 바꾸지 않고 특정 단계에서 수행하는 내역을 바꾸는 패턴

 

장점

: 코드의 중복을 줄일 수 있음

: 서브 클래스의 역할을 줄여 핵심 로직 관리가 용이해짐

 

단점

: 추상 메소드가 많아지면 클래스 생성, 관리가 어려워짐

: 알고리즘 구조 복잡할수록 template method 로직 형태 유지하기 어려움

 

💡Visitor 패턴

정의 

: 방문자와 방문 공간을 분리하여, 방문 공간이 방문자를 맞이할 때, 이후 행동을 방문자에게 위임하는 패턴

 

장점

: 작업 대상(방문 공간: 데이터 담고 있는 자료구조 만듦)과 작업 항목(방문 공간에서 하는 일) 분리 

: 데이터와 알고리즘이 분리되어 데이터 독립성 높여줌

 

단점

: 새로운 작업 대상(방문 공간)이 추가될 때마다 작업 주체(방문자)도 로직 추가해야 함

: 방문자와 방문 공간의 결합도 증가

 

'☁️정리 > ❄️CS' 카테고리의 다른 글

[CS] 프로그래밍 패러다임  (0) 2023.08.23
[CS] MVC 패턴  (0) 2023.08.21
[CS] 디자인 패턴_구조패턴  (0) 2023.07.13
[CS] 디자인 패턴_생성패턴  (0) 2023.07.12
[CS] 디자인 패턴  (0) 2023.07.12