티스토리 뷰
디자인 패턴 - 커맨드 패턴
💡 요청을 캡슐화 해서 요청자(Invoker)와 수신자(receiver)를 분리하는 패턴으로 요청의 구현 내용이 바뀌더라도 요청자가 변경되지 않고 커맨드가 확장 될 수 있어 객체지향 원칙 OCP(Open Closed Principle)를 지킬 수 있다.
🎯 하나의 인터페이스를 통해 여러개의 구체적인 요청(Command)을 호출하도록 한다.
객체 모델
구현
👉 Command
@FunctionalInterface
public interface Command {
void execute();
}
Command
는 로직을 추상화 한다.
👉 ConcreteCommand
public class FirstConcreteCommand implements Command{
private Receiver receiver;
public FirstConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
System.out.println("첫번째 구체 명령 - receiver : " + receiver.getName());
}
}
👉 Invoker(요청자)
public class Invoker {
private Command command;
public Invoker(Command command) {
this.command = command;
}
public void invoke() {
command.execute();
}
}
👉 Receiver(수신자)
public class Receiver {
private String name;
public Receiver() {
}
public Receiver(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
👉 main()
public static void main(String[] args) {
Receiver hero = new Receiver("Hero");
Receiver chad = new Receiver("Chad");
Invoker heroInvoker = new Invoker(new FirstConcreteCommand(hero));
// 👉 CreteCommand를 람다를 통해 구현
Invoker chadInvoker = new Invoker(()
-> System.out.println("두번째 구체 명령 - receiver : " + chad.getName()));
heroInvoker.invoke();
chadInvoker.invoke();
}
𝌞 결과
👍 장점
- 기존 코드 수정없이 새로운 커맨드를 생성할 수 있다. 즉, OCP(Open Closed Principle) 를 지킬 수 있다.
- 수신자의 코드 변경에 클라이언트가 영향을 받지 않을 수 있다. 즉, 느슨한 결합(Loose coupling)을 이룬다.
🎯 예제코드
GitHub - icraft2170/Blog-Example-Code
Contribute to icraft2170/Blog-Example-Code development by creating an account on GitHub.
github.com
참조
코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의
디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할
www.inflearn.com
GoF의 디자인 패턴 :재사용성을 지닌 객체지향 소프트웨어의 핵심요소 - 교보문고
▶ 이 책은 디자인 패턴을 다룬 이론서입니다. 디자인 패턴의 기초적이고 전반적인 내용을 학습할 수 있습니다.
www.kyobobook.co.kr
'architecture > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 책임 연쇄 패턴(CHAIN OF RESPONSIBILITY) (0) | 2022.09.25 |
---|---|
[디자인 패턴] 이터레이터 패턴(Iterator Pattern) (1) | 2022.09.24 |
[디자인 패턴] 플라이웨이트 패턴 (Flyweight pattern) (2) | 2022.09.24 |
[디자인 패턴] 파사드 패턴(Facade Pattern) (0) | 2022.09.23 |
[디자인 패턴] 프록시와 데코레이터 패턴 (0) | 2022.09.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 장애 해결기
- 메모리 단편화
- pass by reference
- Memory Fragmentation
- 뾰족함
- multimap
- 클린 아키텍처
- pass by value
- 수직 분할
- Session
- 정적 타입 언어
- 동적 타입 언어
- 컴포짓 패턴
- 세션 불일치
- Clean Architecture
- 동적 디스패치
- Object Pool
- ATDD
- 객체 풀
- RestAssured
- pool
- 메모리 파편화
- Sticky Session
- 육각형 아키텍처
- SpringBoot 2.2
- 내부 단편화
- 수평 분할
- java
- 외부 단편화
- OOP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함