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를 통해 구문을 해석합니다.
'프로그래밍 > 디자인패턴' 카테고리의 다른 글
디자인 패턴 - Template Method (Behavioral Pattern) (0) | 2021.06.12 |
---|---|
디자인 패턴 - Singleton (Creational Pattern) (0) | 2021.03.01 |
디자인 패턴 - Prototype (Creational Pattern) (0) | 2021.02.28 |
디자인 패턴 - Builder (Creational Pattern) (0) | 2021.02.27 |
디자인 패턴 - Abstract Factory (Creational Pattern) (0) | 2021.02.26 |