프로그래밍/디자인패턴

디자인 패턴 - Interpreter (Behavioral Pattern)

aiemag 2021. 6. 10. 16:55
반응형

Behavioral Pattern의 첫 번째인 Interpreter Pattern에 대해 정리합니다.

 

외부에서 만들어놓은 미니 프로그램을 해석하여 실행하는 Interpreter 를 만들어봅시다.

 

 


Definition

Interpreter 패턴에서는 프로그램이 해결하려는 문제를 간단한 '미니 언어'로 표현합니다.

 


Class Diagram

Singleton class의 constructor가 private으로 되어 있습니다.

※ 그래서 외부에서 객체를 별도로 생성할 수 없습니다.(중요)

 

member field인 singleton 역시 private으로 되어 있고 class가 memory에 로딩될 때 자신의 객체가 생성됩니다.

생성된 singleton 객체는 오직 getInstance()를 통해서만 참조 가능합니다.

 


Sample Case

다음은 Interpreter 패턴을 적용한 시나리오입니다.

 

Scenario

미니 프로그램이 주어졌을 때 구문해석을 하는 프로그램을 만들어 보겠습니다.

※ 내용은 'Java 언어로 배우는 디자인 패턴 입문' 책을 참고하였습니다. 

※ 미니 프로그램은 다음과 같은 BNF(Backus-Naur Form 또는 Backus Normal Form) 표기법을 이용한 구문을 가지고 있습니다.

 

Syntax

<program> ::= program <command list>
<command list> ::= <command>* end
<command> ::= <repeat command> | <primitive command>
<repeat command> ::= repeat <number> <command list>
<primitive command> ::= go | right | left

 

Mini program sample

program end
program go end
program go right go right go right go right end
program repeat 4 go right end end
program repeat 4 repeat 3 go right go left end right end end

 

Class Diagram

Node 클래스는 구문 트리의 각 부분을 구성하고 최상위 abstraction class 입니다.

 

Node 클래스를 상속한 각 클래스에서는 각 구문을 해석하고 실행합니다.

 

Context 클래스는 구문 분리를 실행합니다.

 

Main 클래스에서 Mini program을 로딩 후, Context 클래스를 통하여 구문을 분리하고, 각 Node를 통해 구문을 해석합니다.

 

 

반응형