인터프리터 interpreter 패턴 - 타입스크립트 예시

SW설계디자인패턴
읽는데 3분 소요
처음 쓰여진 날: 2025-09-01
마지막 수정일: 2025-09-01

요약

인터프리터 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
코드 하이라이팅 중...

resultExpressionnew SubtractExpression(new AddExpression(new NumberExpression("x"), new NumberExpression("y")), new NumberExpression("z")) 와 같은 트리 구조를 형성합니다. interpret 메서드를 호출하면, 이 트리를 후위 순회(post-order traversal)하며 최종 결과가 계산됩니다.

인터프리터 패턴 중요 키워드

  • 간단한 언어의 문법을 클래스 계층으로 표현합니다.
  • 문장을 AST(추상 구문 트리, Abstract Syntax Tree) 로 구성하여 해석합니다.
  • 문법이 단순하고 자주 변하지 않을 때 유용합니다.
  • 문법이 복잡해지면 클래스 계층이 매우 방대해지고 관리하기 어려워지는 단점이 있습니다.