해석자 패턴(Interpreter Pattern)이란?
해석자 패턴은 주어진 언어의 문법을 위한 표현을 정의하고, 이 언어로 작성된 문장을 해석하는 해석자를 사용하는 디자인 패턴입니다. 이 패턴은 주로 문법 트리를 구성하고 이를 통해 문장을 해석하는 데 사용됩니다.
해석자 패턴은 다음과 같은 경우에 유용합니다:
- 복잡한 문법을 가진 언어를 해석해야 하는 경우
- 문법 트리를 구성하고 이를 통해 문장을 해석해야 하는 경우
예시 코드
다음은 C++로 작성된 간단한 해석자 패턴의 예입니다:
#include <iostream>
#include <string>
// Abstract Expression
class AbstractExpression {
public:
virtual ~AbstractExpression() = default;
virtual void interpret(const std::string& context) = 0;
};
// Terminal Expression
class TerminalExpression : public AbstractExpression {
public:
void interpret(const std::string& context) override {
std::cout << "Terminal expression for " << context << std::endl;
}
};
// Nonterminal Expression
class NonterminalExpression : public AbstractExpression {
public:
void interpret(const std::string& context) override {
std::cout << "Nonterminal expression for " << context << std::endl;
}
};
int main() {
TerminalExpression terminalExpression;
NonterminalExpression nonterminalExpression;
terminalExpression.interpret("Hello"); // Output: Terminal expression for Hello
nonterminalExpression.interpret("World"); // Output: Nonterminal expression for World
return 0;
}
위 코드에서 AbstractExpression은 모든 표현식이 구현해야 하는 인터페이스입니다. TerminalExpression과 NonterminalExpression은 AbstractExpression 인터페이스를 구현하는 구체적인 표현식입니다.
클래스 다이어그램
+-----------------+
| AbstractExpression |
+-----------------+
| virtual ~AbstractExpression|
| virtual interpret |
+-----------------+
^
|
+-----------------+ +-----------------+
| TerminalExpression | | NonterminalExpression |
+-----------------+ +-----------------+
| interpret | | interpret |
+-----------------+ +-----------------+
해석자 패턴은 복잡한 문법을 가진 언어를 해석하는 데 유용하며, 문법 트리를 구성하고 이를 통해 문장을 해석하는 데 사용됩니다
'CS(Computer Science)지식 > [C++] 디자인 패턴' 카테고리의 다른 글
상태 패턴(State Pattern)이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |
---|---|
메멘토 패턴(Memento Pattern)이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |
명령 패턴(Command Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |
책임 연쇄 패턴(Chain of Reponsibility Design Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |
플라이급 패턴(Flyweight Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |