행위패턴( 객체간 커뮤니케이션)
1.책임 연쇄(체인) 패턴
클라이언트에게 어떠한 요청이 들어왔을 때, 요청을 받은 객체가 해당 요청을 해결할 수 없을 경우 연결된 다음 객체들에 전달하고 해당 요청을 해결할 수 있는 객체가 처리하는 방식입니다. 요청 객체와 처리 객체를 분리하거나 요청을 처리할 수 있는 객체가 여러 개인데 하나의 객체에 요청을 보낼 때 책임 연쇄 패턴을 적용할 수 있습니다. 즉, 요청을 처리할 수 있는 객체가 여러개이고 이러한 처리를 하는 객체가 명시적이지 않을 때 사용할 수 있는 패턴입니다.
요약하자면, Chain 중개자가 객체와 객체끼리 체인을 걸어주는 형태
A객체로 처리할수없으면 B객체로, B객체가 해결할수없으면 C객체로
2. 옵저버 패턴
우선 코드부터 보겠다.
Editor => EventManager(출판사) 를 생성하고, 설정하는 역할
해당 메소드는, 출판사를 새로 생성해, 초기 공지사항(파일)을 설정하는 메소드를 가짐.
EventManager (출판사)
출판사는 구독 , 구독해제, 공지하기 3개의 기능이있다.
구독 (이벤트 타입, 고객)
=> 고객은 "이벤트타입"에대해 구독을한다.
구독 해제 (이벤트 타입, 고객)
=> 고객은 "이벤트 타입" 에 대해 구독을 해제한다.
공지하기 (이벤트 타입, 파일 이나 알림)
=> "이벤트 타입"에 구독한 모든 고객에게 파일 또는 알림을 하여 공지한다.
Listners
이벤트 리스터를 통해 공지사항을 공지하면, 알림이간다.
이렇게 인터페이스를 설정해놓으면, 알림을 받는 형식을 바꿀수있다.
예시) 이메일로 받는법
즉, 수시로 바뀌는 객체, 추가되는 구독 이벤트에 쉽게 대응할수 있게 구성한 패턴이다.
3.전략 패턴
전략 패턴은 하나의 목적을 이룰때, 다양한 접근방식(전략)이 필요하고
전략들 사이에서 언제든지 전략이 바뀔수 있어야하며, 개발자는 새로운 전략을 추가하기도 쉬워야할때
전략패턴을 쓴다.
다음은 전략패턴을 만들기위한 과정이다.
1. 내가 내릴 수 있는 공통적인 명령의 껍데기만 인터페이스로 지정한다. 이를 캡슐화라고 한다.
2. 각각의 명령에 대해서 상황에 따라 취해야 하는 독립적 행동을 지정한다. 이게 스트레티지가 된다.
3. 그 독립적 행동을 현재 상황에 따라 껍데기 안에서 갈아끼우게만 한다. 이를 클라이언트라고 한다.
1. 캡슐화
클라이언트가 공통적으로 내릴수 있는 명령의 껍데기만 지정해준다.
2. 전략 패턴
캡슐화에서 지정한 각각의 내릴수있는 명령에 , 선택할수있는 전략클래스들을 생성한다.
그 후, 명령케이스를 담아준다. 명령케이스를 담아두되, 초기화는 하지않는다.
이젠 만들어둔 Weapon이라는 명령케이스를 상속받아,
2번에서 미리 만들어둔 전략들을 각각 입력한다.
마치 기능단위로 매우 쪼갠뒤, 그걸 조합하는 형태라고 생각하면된다.
3. 클라이언트
클라이언트는 이제 3개의 전략 Knife, pistol. snipe 3가지 전략을 가지고있고,
이를 언제든지 nowWeapon 변수로 무기를 변경할수가있다.
=> 결론적으론 관리해야할 Class가 많아져 복잡도는 무진장 올라가지만
유지보수 측면에는 수정, 추가 , 재조합 과정이 직관적이고 쉽기때문에 사용한다.
================================================================
여기까지, 디자인패턴의 자주 사용하는 패턴을 총정리를 해보았고,
제가 소개하지 않는 패턴이나 , 더 다양한 예시를 보고싶다면 이 경로를 참조하면 좋을것같다.
'자바' 카테고리의 다른 글
구글 푸시알림 기능 구현하기 (FCM, Java, Vue ) (2) | 2024.11.19 |
---|---|
[프로그래머스, 실무역량과제] API 서버 개발 (7) | 2023.04.12 |
자주 쓰는 디자인 패턴 [구조 패턴] (0) | 2023.03.22 |
자주쓰는 디자인 패턴 총정리 (생성 패턴 편) (1) | 2023.03.21 |
정규표현식(REGEX) 문법 정리 (1) | 2022.12.24 |