[디자인 패턴] - 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
볼빵빵오춘기