👩🏻💻 About 프로그래밍/Spring, Spring boot
[디자인 패턴] - Interpreter
볼빵빵오춘기
2025. 4. 9. 15:06
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 패턴은 간단한 언어나 표현식의 문법을 객체화하여 해석할 수 있는 구조를 만드는 패턴이다.