상세 컨텐츠

본문 제목

Command Pattern 배워보기

Java

by techbard 2014. 1. 23. 13:59

본문

반응형

커맨드 패턴이란 특정한 일을 하는 클래스 들을 단위객체화해서 저장해 두었다가 공통적인 방법으로 호출할 수 있는 디자인 패턴이다. 저장구조에 객체를 저장하기 때문에 일단 쌓아두었다가 그 목록에 또 다시 추가, 삭제할 수 있으며 이들을 접근할 수 있는 공통된 방법만 제공한다. 즉, 호출하는 쪽에서는 호출만 하면 나머지는 저장되어 있던 객체에서 모든 걸 하는 패턴을 말한다.

 

커맨드 패턴에서는 메소드 이름을 거의 통일해서 사용한다고 한다.

 

1. 인터페이스를 작성한다.

 

 

이제 모든 클래스가 이 인터페이스를 구현하게 될 것이다. (테스트 클래스 빼고)

 

2. 구체적인 일을 할 클래스들을 만든다.

 

 

 

3. 구체적인 일 (= 명령어 처리 클래스)을 하는 클래스들 관리하고 호출해 주는 클래스를 작성한다.

 

 

역시나 멤버에 ICommand 타입을 저장할 수 있는 자료구조를 선언하고 이 자료에 객체를 추가, 삭제할 수 있는 메소드들을 만든다. 주의할 부분은 add() 메소드로 자기 자신을 자기 자신 객체에 담으면 계속 자기 자신을 참조할 가능성이 있으므로 미리 체크한다. 또 remove() 메소드에서는 자료구조가 비어있으면 삭제할 수 없으므로 미리 체크한다.

 

중요한 부분은 8번 execute() 메소드인데 CommandManager 클래스에 있는 execute() 메소드는 자료구조에 다음 아이템이 있으면 그 아이템에 있는 execute() 메소드를 호출해 주는 역할을 한다.

 

4. 이제 테스트 클래스를 작성해 보자.

 

 

5번 라인에서 CommandManager 객체를 생성하고, 명령어 처리 클래스들 객체를 생성해 add() 메소드로 CommandManager 객체 내부의 자료구조에 넣는다.

 

이제 12번 라인에서 cm.execute() 메소드를 호출하면 자료구조 안에 있는 객체들을 꺼내 그 객체의 execute() 메소드를 호출한다. 즉 자료구조에 무엇이 들어 있는지는 신경쓰지 않고 단순히 cm.execute() 메소드 호출로 들어있는 모든 명령 구현 객체들이 실행된다.

 

16번 부터는 이너 클래스 스타일로 명령 처리 클래스를 추가하는 방법이다. 이름 없는 클래스를 생성해서 자료구조에 추가하고 있다.

 

결과:

 

This is A class
This is B class
==========
This is A class
This is B class
This is C class

 

마지막 결과에 "This is C class"가 출력된 것으로 보아 이너 클래스에 의한 객체 추가가 잘 작동하는 것을 알 수 있다.

 

CommandPattern.zip

 

반응형

관련글 더보기

댓글 영역