17. 해석자 패턴(Interpreter Pattern)

17.1 개요

해석자 패턴은 사용자가 표현하기 쉬운 표현을 사용하게 하고 이를 해석하는 개체를 통해 약속된 알고리즘을 수행할 수 있게 해 주는 패턴입니다. SQL 쿼리문이나 Command 창에서 프로그램 실행 시 필요한 인자를 전달할 때와 같은 경우 등에서 많이 사용될 수 있는 패턴입니다.

해석자 패턴에서는 사용자가 원하는 다양한 명령을 쉽게 표현할 수 있게 구문 약속을 해야 합니다. 그리고, 해석자에서는 이와 같이 약속된 구문을 입력 인자로 전달되었을 때 이를 해석을 할 수 있어야 합니다. 사용자로부터 전달된 입력 구문은 하나의 표현으로 종결되기도 하지만 여러 개의 표현으로 해석될 수도 있습니다.

가령 “2 Add 3” 과 같은 표현은 피 연산자:2, 연산자:+, 피 연산자:3 으로 해석될 수 있다는 것입니다.

해석자 패턴을 사용하면 사용자가 다양한 명령을 쉬운 표현 방법으로 전달할 수 있습니다. 하지만, 너무 많은 명령에 대한 조합에 대해 해석자 패턴을 적용하려고 한다면 정규화 과정에 들어가는 비용이 기하급수적으로 커질 수 있습니다. 비교적 사용자가 표현식의 문법을 단순화할 수 있는 경우에는 효과적일 수 있지만 그렇지 않다면 다른 방법을 사용하는 것이 나을 수 있습니다.

” 해석자 패턴을 사용하면 사용자가 명령을 쉬운 표현 방법으로 전달할 수 있습니다.” 

17. 2 시나리오

EH Camera 회사의 객원 감수자로 활동을 하다 보니 개인적으로 만들었던 사진 관리 응용들의 일부 기능들이 요긴하게 사용하게 되었습니다. 하지만, 개인적으로 만들었던 응용과는 달리 좀 더 사용자가 편리하고 효과적으로 사진을 관리하고 보정할 수 있게 만들어야 했습니다. 이러한 이유로 많은 엔지니어가 사용자와 상호 작용하는 부분에 많은 비용이 들게 되더군요.

좀 더 사용자가 편리하고 효과적으로 사진을 관리하고 보정할 수 있는 방법을 생각을 하다가 각 개인에 따라 사진 보정을 할 때 사용하는 기능은 일반화 시키는 것보다 개인에 따라 매크로를 제공하는 편이 나을 수 있다는 생각을 하게 되었습니다. 그리고, 개인이 손 쉽게 매크로를 만들 수 있는 표현을 생각을 하게 되었고 이러한 매크로를 분석하여 포함된 기능들을 수행할 수 있게 설계를 해 보았습니다.

설계에서는 사진을 보정 역할을 하는 개체를 서로 체인 형태로 연결을 하고 보정 명령 구문을 해석하여 자신이 수행해야 할 부분에 대한 해석할 수 있게 하였습니다. 이제는 사용자는 자신이 보정하고자 하는 종류를 매크로에 보관을 하는 초기 작업과 원하는 보정 구문을 추가를 하면 매크로 내부에 있는 각 보정 개체가 자신이 수행해야 할 구문을 분석을 하게 했지요. 이 후 사용자는 보정할 사진을 넣으면 매크로에 보관된 각 보정 개체들이 알아서 보정 작업을 하게 되었습니다. 이제 간략한 예광탄을 만들어 본 후에 이에 대해 다시 수정을 하거나 보완 작업을 해야겠어요.