////
Search
💠

Command pattern(커맨드 패턴)

커맨드 패턴이란? 위키백과
커맨드 패턴의 경우 요청을 객체의 형태캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 메서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다. 특징
요청을 캡슐화한다.
요청을 나중에도 이용할 수 있다.
“저장” 이란 키워드가 있다.
필자의 경우 이 커맨드 패턴이 어느 정도 이해가 되었다. 그 이유는 데코레이터 패턴에서 다른 형태의 객체를 데코레이터처럼 추가하는 것이 아닌가? 라는 생각이 번뜩 들었기 때문이다. 그런데 조금 색다르게 느껴졌던 점은 “저장”,”취소”,“로깅” 이라는 점에서 신기했다. 이부분은 그림 보다는 코드로 이해하는 것이 좋을 것 같아서 코드로 정리했다.
예를 들어보자. 우리는 음악을 하는 사람이다. 그런데 건반, 기타, 드럼, 목소리 등을 모두 믹싱 해야 한다. 그런데 악기와 마이크의 단자가 아래와 같이 모두 다르다. 각각의 케이블을 연결하는 단자는 케이블의 위의 단자와 같다. 그런데 문제는 우리의 믹싱 장비의 단자는 USB 말곤 지원하지 않는다. 그럼 무엇이 필요할까? 당연히 변환해주는 단자가 필요하지 않을까? 이것을 만드는 작업이다. 하지만 여기서 중요한 점은 단순 연결로 끝나는 것이 아니다. 믹싱 장비의 역할이다. 믹싱 장비의 경우 소리를 뺄 수도 있고, 특정 구간에 넣을 수도 아니면 특정 악기의 소리를 높일 수 있다. 즉, 우리는 커맨드 패턴을 이용할 때 믹싱 장비와 변환 젠더를 만들어주는 작업을 하는 것이다.
믹싱 장비
악기들과 마이크의 케이블과 연결 단자
XLR to USB
BNC to USB
MIDI to USB

커맨드 적용한 공연 준비

아래는 기타와 마이크, 건반에서 나온 케이블과 믹싱장비와 결합 할 수 있도록 중계 케이블을 만들었다. 또한 이를 믹싱장비에 등록하여 하나씩 사용할 수 있고 합주도 가능하다. 또한 특정 소리도 끌 수 있다.
BNC (기타 소리)
MIDI (마이크 소리)
XLR (건반 소리)
변환 케이블 명세서 (가장 중요)
BNCCommand (기타 소리 변환 케이블)
MIDICommand (마이크 소리 변환 케이블)
XLRCommand (건반 소리 변환 케이블)
MixingRemote(믹싱 장비)
package command.example; import command.example.cable.BNC; import command.example.cable.MIDI; import command.example.cable.XLR; import command.example.command.connectionTerminal.BNCCommand; import command.example.command.connectionTerminal.MIDICommand; import command.example.command.connectionTerminal.XLRCommand; public class Main { public static void main(String[] args) { System.out.println("연주 준비"); MixingRemote mixingRemote = new MixingRemote(); mixingRemote.putSound(MixingRemote.SoundName.건반, new XLRCommand(new XLR())); mixingRemote.putSound(MixingRemote.SoundName.마이크, new MIDICommand(new MIDI())); mixingRemote.putSound(MixingRemote.SoundName.기타, new BNCCommand(new BNC())); System.out.println("연주 준비 끝"); mixingRemote.allSoundOn(); System.out.println(); mixingRemote.vocalOff(); System.out.println(); mixingRemote.keyBoardOff(); System.out.println(); mixingRemote.allSoundOff(); System.out.println("연주 종료"); } } Console ----------------------------- 연주 준비 연주 끝 합주 건반 소리 켜짐 기타 소리 켜짐 마이크 사운드가 켜짐 마이크 끄기 건반 소리 켜짐 기타 소리 켜짐 건반 끄기 기타 소리 켜짐 마이크 사운드가 켜짐 합주끝 건반 소리 꺼짐 기타 소리 꺼짐 마이크 사운드 꺼짐 연주 종료 -----------------------------
Java
복사

커맨드 패턴 이해하기

커맨드 패턴이란? 위키백과
커맨드 패턴의 경우 요청을 객체의 형태캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 메서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다. 아하 기타소리, 건반소리, 마이크 소리를 믹싱 장비에 연결해서 사용하는거구나, 그래서 저장이 되구나, 근데 저장할때는 하나의 변환 케이블로 모두 변환해서 저장하구나 특징
요청을 캡슐화한다.
Command의 구체화된 클래스로 악기를 감싸구나
요청을 나중에도 이용할 수 있다.
믹싱장비에서 나중에 이용할 수 있구나
“저장” 이란 키워드가 있다.
동일한 Command로 감싸줬기 때문에 저장과 활용이 하나의 호출 방법으로도 가능하구나
Invoker - 믹싱장비 Command <<Interface>> - 변환케이블 명세서 Receiver - BNC, MIDI, XRL 케이블 즉, 악기와 직접 연결되는 케이블 ConcreteCommand - BNC:MIDI:XRLCommand
본 예제에는 특정 커맨드를 끄고 키고는 구현하지 않았다. 하지만 enum을 내부에 만들어 놓았기 때문에 한번 해보면 좋을 것같다.