인터프리터 패턴은 문법이나 언어의 규칙을 정의하고 해석하는 데 사용되는 아키텍처 패턴이다.
주로 간단한 언어 처리, 명령어 실행, 스크립트 해석 등에 사용되며, 각 표현식(Expression)을 객체로 표현하고 해석(Interpretation) 작업을 수행한다.
인터프리터 패턴은 다음과 같은 상황에서 유용하다:
문자열 형태의 수식("5 + 3 - 2"
)을 해석하여 결과를 계산하는 계산기를 생각해 보자.
인터프리터 패턴은 이를 효과적으로 처리할 수 있는 구조를 제공한다.
인터프리터 패턴은 다음과 같은 주요 컴포넌트로 구성된다:
[Client]
|
[Context]
|
[AbstractExpression]
|
|-- [TerminalExpression]
|-- [NonTerminalExpression]
Context
에 저장한다.AbstractExpression
의 구현체로 표현한다.interpret()
메서드를 호출하여 해석 작업을 수행한다.아래는 간단한 계산기를 구현한 Python 코드이다.
class Expression:
def interpret(self, context):
raise NotImplementedError("Subclasses must implement interpret method")
class NumberExpression(Expression):
def __init__(self, number):
self.number = number
def interpret(self, context):
return self.number
class AddExpression(Expression):
def __init__(self, left, right):
self.left = left
self.right = right
def interpret(self, context):
return self.left.interpret(context) + self.right.interpret(context)
class SubtractExpression(Expression):
def __init__(self, left, right):
self.left = left
self.right = right
def interpret(self, context):
return self.left.interpret(context) - self.right.interpret(context)
class Context:
def __init__(self):
self.data = {}
# 수식: 5 + 3 - 2
context = Context()
# 표현식 구성
expr1 = NumberExpression(5)
expr2 = NumberExpression(3)
expr3 = NumberExpression(2)
add_expr = AddExpression(expr1, expr2)
subtract_expr = SubtractExpression(add_expr, expr3)
# 결과 해석
result = subtract_expr.interpret(context)
print("결과:", result) # 출력: 결과: 6
인터프리터 패턴은 고정된 문법을 해석하고 처리하는 데 효과적인 도구를 제공한다.
다양한 언어 처리나 스크립트 실행 작업에서 활용 가능하며, 새로운 문법 확장에 용이하다.
다른 아키텍처 패턴이 궁금하다면 아래 글도 확인해보세요.
아래 글에서 다른 아키텍쳐 패턴들을 확인할 수 있다.
아키텍처 패턴 모음