인터프리터 interpreter 패턴 - 타입스크립트 예시
SW설계디자인패턴
읽는데 3분 소요
처음 쓰여진 날: 2025-09-01
마지막 수정일: 2025-09-01
조회수: 156
요약
인터프리터 interpreter 패턴을 타입스크립트 코드와 함께 알아봅니다.
인터프리터 (Interpreter) 패턴 요약
| 패턴 종류 | 핵심 키워드 |
|---|---|
| 인터프리터 (Interpreter) | 특정 언어 문법 정의, 그 문법으로 작성된 문장을 해석 |

인터프리터 (Interpreter) 패턴
인터프리터 패턴은 특정 언어의 문법을 정의하고, 그 문법으로 작성된 문장을 해석하는 해석기(Interpreter)를 만드는 패턴입니다. 간단한 언어(DSL, Domain-Specific Language)를 만들고 그 언어의 구문을 해석해야 할 때 사용됩니다.
가장 대표적인 예시는 '계산기'나 '정규표현식' 입니다. 3 + 5 - 2 라는 텍스트가 있을 때, 우리는 이를 숫자(Terminal Expression)와 연산자(Non-terminal Expression)로 나누어 해석하고, 정해진 문법 규칙(우선순위 등)에 따라 최종 결과인 6을 도출합니다. 인터프리터 패턴은 이처럼 문법 규칙을 클래스로 표현하여 문장을 해석하는 구조를 제공합니다.
기본 구조
- AbstractExpression: 모든 표현식(터미널, 논터미널)이 구현해야 할 공통 인터페이스입니다. 보통
interpret()메서드를 정의합니다. - TerminalExpression: 문법의 최소 단위(종단 표현식)를 나타냅니다. 예를 들어, 변수나 숫자 같은 것들입니다.
- NonterminalExpression: 문법 규칙을 나타냅니다. 다른 표현식들을 자식으로 가질 수 있으며, 이들을 조합하여 새로운 결과를 만들어냅니다. (예: 덧셈 표현식, 뺄셈 표현식)
- Context: 인터프리터가 문장을 해석하는 데 필요한 전역 정보(예: 변수의 값)를 담고 있습니다.
- Client: 해석할 문장을 만들고, 파싱하여 인터프리터에게 전달하는 역할을 합니다.
예시: 간단한 덧셈/뺄셈 계산기
x + y - z 와 같은 간단한 수식을 해석하는 계산기를 만들어 보겠습니다.
typescript
코드 하이라이팅 중...
resultExpression은 new SubtractExpression(new AddExpression(new NumberExpression("x"), new NumberExpression("y")), new NumberExpression("z")) 와 같은 트리 구조를 형성합니다. interpret 메서드를 호출하면, 이 트리를 후위 순회(post-order traversal)하며 최종 결과가 계산됩니다.
인터프리터 패턴 중요 키워드
- 간단한 언어의 문법을 클래스 계층으로 표현합니다.
- 문장을 AST(추상 구문 트리, Abstract Syntax Tree) 로 구성하여 해석합니다.
- 문법이 단순하고 자주 변하지 않을 때 유용합니다.
- 문법이 복잡해지면 클래스 계층이 매우 방대해지고 관리하기 어려워지는 단점이 있습니다.