Hello

[디자인 패턴] - Interpreter

by 볼빵빵오춘기

Interpreter

언어의 문법을 클래스 구조로 표현하고, 해석기(Interpreter)를 이용해 해당 언어의 문장을 해석하는 행동(Behavioral) 패턴이다.

즉, 자신만의 간단한 언어나 수식, 규칙 등을 정의하고 그것을 실행할 수 있게 하는 구조를 만드는 것이다. 

 

예시 코드

// 1. 표현식(Expression) 인터페이스
interface Expression {
int interpret();
}
// 2. 숫자(Number) 표현식
class NumberExpression implements Expression {
private int number;
public NumberExpression(int number) {
this.number = number;
}
public int interpret() {
return number;
}
}
// 3. 덧셈(Add) 표현식
class AddExpression implements Expression {
private Expression left, right;
public AddExpression(Expression left, Expression right) {
this.left = left;
this.right = right;
}
public int interpret() {
return left.interpret() + right.interpret();
}
}
// 4. 클라이언트
public class InterpreterExample {
public static void main(String[] args) {
// 해석할 식: 5 + (10 + 20)
Expression expr = new AddExpression(
new NumberExpression(5),
new AddExpression(
new NumberExpression(10),
new NumberExpression(20)
)
);
System.out.println("결과: " + expr.interpret()); // 결과: 35
}
}

 

Interpreter 패턴의 장점

문법을 객체화

표현식이나 언어 규칙을 클래스 구조로 표현 가능하다.

 

새로운 문법 추가 용이

클래스 확장을 통해 손쉽게 언어 확장 가능하다.

 

재사용성

공통된 표현식을 재사용할 수 있다.

 

간단한 언어라면 구현이 명확

복잡한 파서를 만들 필요 없다.

 

Interpreter 패턴의 단점

복잡한 문법에는 적합하지 않음

클래스 수가 급격히 늘어나며 유지보수가 어렵다.

 

성능 저하

재귀적 해석 방식은 성능에 부담을 줄 수 있다.

 

클래스 설계 복잡도 증가

간단한 표현에도 여러 개의 클래스를 설계해야 한다.

 

Interpreter 패턴은 언제 사용하나?

자주 반복되는 표현식 해석이 필요한 경우

수식 계산기, 필터 규칙, SQL 쿼리 해석 등

 

간단한 언어나 도메인 전용 언어(DSL)

간단한 명령어 또는 질의 처리

 

정규표현식, 조건 필터 등의 해석

ex) 검색어 필터, 스크립트 처리 등

 

정리하자면

Interpreter 패턴간단한 언어나 표현식의 문법을 객체화하여 해석할 수 있는 구조를 만드는 패턴이다.

블로그의 프로필 사진

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기