목차
1. Design pattern
1) 정의
2) 컴퓨터 과학에서의 디자인 패턴
2. Interpreter pattern
1) 정의
2) 구조
3) 사용예
(1) C# Structural example code
(2...
1. Design pattern
1) 정의
- 디지인 패턴(Design pattern)은 다양한 분야에서 사용된은 용어로,
‘특정 영역의 설계의 문제를 해결하기 위해 고안’된 형식적인 방법입니다.
- 반복적으로 일어날 수 있는 상황 즉, 패턴에서 이루...
2) 컴퓨터 과학에서의 디자인 패턴
- 소프트웨어 개발 방법에서 사용되는 디자인 패턴
프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나.
과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여...
2. Interpreter pattern
1) 정의
- Ineterpreter(해석자) pattern은 1.행위 패턴중 하나로, ‘언어의 다양한 해석’으로
비교적 간단한 문법에 대해 문법 자체를 클래스로 정의해서 문법 검사와 함께
필요한 기능도 별도의 자료구조...
2) 구조 (1/2)
2. Interpreter pattern
2. Interpreter pattern / 2) 구조
▶ 참여객체
AbstractExpression : 추상 구문 트리에 속한 모든 노드에 해당하는 클래스...
2) 구조 (2/2)
2. Interpreter pattern
2. Interpreter pattern / 2) 구조
▶ 협력방법
1. 클라이언트는 NonterminalExpression과 TerminalExpressi...
3) 사용예
(1) C# Structural example code
2. Interpreter pattern
2. Interpreter pattern / 3) 사용예 / (1) C# Structural
example c...
2. Interpreter pattern
- 2 -
foreach (AbstractExpression exp in list) // Interpert(해석)
{
exp.Interpret(context);
}
// 사용자를...
2. Interpreter pattern
- 3 -
Called Terminal.Interpret()
Called Nonterminal.Interpret()
Called Terminal.Interpret()
Called...
3) 사용예
(2) C# Real World example code
2. Interpreter pattern
- 1 -
설명 : 이 코드는 로마 숫자를 10 진수로 변환하는 데
사용되는 인터프리터 패턴을 보여줍니다.us...
2. Interpreter pattern
- 2 -
foreach (Expression exp in tree) // Interpret(해석)
{
exp.Interpret(context);
}
Console.WriteLi...
2. Interpreter pattern
- 3 -
public string Input // 입력을 가져오거나 셋팅함
{
get { return _input; }
set { _input = value; }
}
publi...
2. Interpreter pattern
- 4 -
if (context.Input.StartsWith(Nine()))
{
context.Output += (9 * Multiplier());
context.Input =...
2. Interpreter pattern
- 5 -
public abstract string One();
public abstract string Four();
public abstract string Five();
p...
2. Interpreter pattern
- 6 -
class HundredExpression : Expression // TerminalExpression 클래스
{ // 100 검사 = 로마숫자 ‘C, CD, D o...
2. Interpreter pattern
- 7 -
class OneExpression : Expression // TerminalExpression 클래스
{ // 1 검사 = 로마숫자 ‘I, II, III, IV, ...
Q & A
Interpreter
Upcoming SlideShare
Loading in …5
×

Interpreter

537 views

Published on

Interpreter pattern

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
537
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Interpreter

  1. 1. 목차 1. Design pattern 1) 정의 2) 컴퓨터 과학에서의 디자인 패턴 2. Interpreter pattern 1) 정의 2) 구조 3) 사용예 (1) C# Structural example code (2) C# Real World example code
  2. 2. 1. Design pattern
  3. 3. 1) 정의 - 디지인 패턴(Design pattern)은 다양한 분야에서 사용된은 용어로, ‘특정 영역의 설계의 문제를 해결하기 위해 고안’된 형식적인 방법입니다. - 반복적으로 일어날 수 있는 상황 즉, 패턴에서 이루고자 하는 목적을 일련의 제약조건 안에서 달성할 수 있도록 하는 일반적인 디자인 입니다. 1. Design pattern 1.Design pattern / 1) 정의
  4. 4. 2) 컴퓨터 과학에서의 디자인 패턴 - 소프트웨어 개발 방법에서 사용되는 디자인 패턴 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나. 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것입니다. 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 줍니다. 소프트웨어 개발 영역에서 구체적으로 처음 제시한 곳은, GoF(Gang of Four)라 불리는 네명의 컴퓨터 과학 연구자들이 쓴 서적 'Design Patterns: Elements of Reusable Object- Oriented Software'(재이용 가능한 객체지향 소프트웨어의 요소 - 디자인 패턴)입니다. GoF는 컴퓨터 소프트웨어 공학 분야의 연구자인 에릭 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스의 네명을 지칭합니다. 1. Design pattern 1.Design pattern / 2) 컴퓨터 과학에서의 디자인 패턴
  5. 5. 2. Interpreter pattern
  6. 6. 1) 정의 - Ineterpreter(해석자) pattern은 1.행위 패턴중 하나로, ‘언어의 다양한 해석’으로 비교적 간단한 문법에 대해 문법 자체를 클래스로 정의해서 문법 검사와 함께 필요한 기능도 별도의 자료구조 없이 효율적으로 수행할 수 있게 만들어주는 클레스 구조를 말합니다. · 인터프리터와 같은 기능을 제공해야 할 때 유용하게 적용해 볼 수 있는 패턴 입니다. · 언어에서 문장을 해석할때 주로 사용됩니다. (SQL 같은 데이터베이스 쿼리 언어에 상용 통신 프로토콜을 설명하는데 자주사용됨) 1.행위 패턴 : 응용분야에 따라 행위가 다른 객체들간에 행위나 알고리즘 등과 관련된 패턴으로, 응용 분야에 따라 행위가 다른 객체로 옴겨가거나 알고리즘이 대체되는 경우가 존재하기 마련인데 이때 도움을 받을 수 있는 패턴들입니다. 2. Interpreter pattern 2. Interpreter pattern / 1) 정의
  7. 7. 2) 구조 (1/2) 2. Interpreter pattern 2. Interpreter pattern / 2) 구조 ▶ 참여객체 AbstractExpression : 추상 구문 트리에 속한 모든 노드에 해당하는 클래스들이 공통으로 가져야 할 Interpret() 오퍼레이션을 추상 오퍼레이션으로 정의합니다. TerminalExpression : 문법에 정의한 터미널 기호와 관련된 해석 방법을 구현합니다. 문장을 구성하는 모든 터미널 기호에 대해서 해당 클래스를 만들어야 합니다. NonterminalExpression : 문법의 오른편에 나타나는 모든 기호에 대해서 클래스를 정의해야 합니다. Context : 번역기(interpreter)에 대한 포괄적인 정보를 포함해야 합니다. Client : 언어로 정의한 특정 문장을 나타내는 추상 구문 트리이며, 이 추상 구문트리는 NonterminalExpression 과 TerminalExpression 클래스의 인스턴스로 구성됩니다. 이 인스턴스의 Interpret() 오퍼레이션을 호출한다. Client Context AbstractExpression +Interpret(in Context) TerminalExpression +Interpret(in Context) NonterminalExpression +Interpret(in Context)
  8. 8. 2) 구조 (2/2) 2. Interpreter pattern 2. Interpreter pattern / 2) 구조 ▶ 협력방법 1. 클라이언트는 NonterminalExpression과 TerminalExpression의 인스턴스들로 해당 문장에 대한 추상 구문 트리를 만든다. 2. 클라이언트는 Interpret() 오퍼레이션을 호출하는데, 이때 해석에 필요한 문맥 정보를 초기화한다. 3. 각 NonterminalExpression 노드는 또 다른 서브 표현식에 대한 Interpret()를 이용하여 자신의 Interpret() 오퍼레이션을 정의한다. Interpret() 오퍼레이션은 재귀적으로 Interpret() 오퍼레이션을 이용함으로써 기본적 처리를 담당한다. 4. 각 노드에 정의한 Interpret() 오퍼레이션은 인터프리터의 상태를 저장하거나 그것을 알기 위해서 문맥(Context) 정보를 이용한다 Client Context AbstractExpression +Interpret(in Context) TerminalExpression +Interpret(in Context) NonterminalExpression +Interpret(in Context)
  9. 9. 3) 사용예 (1) C# Structural example code 2. Interpreter pattern 2. Interpreter pattern / 3) 사용예 / (1) C# Structural example code - 1 - 설명 : 이 구조적 코드는 정의 된 문법을 사용하여 분석 명령문을 처리 할 인터프리터를 제공하는 인터프리터 패턴을 보여줍니다. using System; using System.Collections; namespace DoFactory.GangOfFour.Interpreter.Structural { class MainApp { static void Main() { // 콘솔 응용프로그램 진입 점 Context context = new Context(); // 사용Tree ArrayList list = new ArrayList(); // abstract 구문트리를 채움 list.Add(new TerminalExpression()); list.Add(new NonterminalExpression()); list.Add(new TerminalExpression()); list.Add(new TerminalExpression());
  10. 10. 2. Interpreter pattern - 2 - foreach (AbstractExpression exp in list) // Interpert(해석) { exp.Interpret(context); } // 사용자를 기다림 Console.ReadKey(); } } class Context // Context 클래스 { } abstract class AbstractExpression // ‘AbstractExpression’추상 클래스 { public abstract void Interpret(Context context); } 2. Interpreter pattern / 3) 사용예 / (1) C# Structural example code
  11. 11. 2. Interpreter pattern - 3 - Called Terminal.Interpret() Called Nonterminal.Interpret() Called Terminal.Interpret() Called Terminal.Interpret() class TerminalExpression : AbstractExpression // TerminalExpression 클래스 { public override void Interpret(Context context) { Console.WriteLine("Called Terminal.Interpret()"); } } class NonterminalExpression : AbstractExpression // NonTerminalExpression 클래스 { public override void Interpret(Context context) { Console.WriteLine("Called Nonterminal.Interpret()"); } } } - Output - 2. Interpreter pattern / 3) 사용예 / (1) C# Structural example code
  12. 12. 3) 사용예 (2) C# Real World example code 2. Interpreter pattern - 1 - 설명 : 이 코드는 로마 숫자를 10 진수로 변환하는 데 사용되는 인터프리터 패턴을 보여줍니다.using System; using System.Collections.Generic; namespace DoFactory.GangOfFour.Interpreter.RealWorld { class MainApp // 콜솔응용프로그램에 대한 진입점 { static void Main() { string roman = "MCMXXVIII"; Context context = new Context(roman); // ‘분석트리’를 빌드 List<Expression> tree = new List<Expression>(); tree.Add(new ThousandExpression()); tree.Add(new HundredExpression()); tree.Add(new TenExpression()); tree.Add(new OneExpression()); 2. Interpreter pattern / 3) 사용예 / (2) C# Real World example code
  13. 13. 2. Interpreter pattern - 2 - foreach (Expression exp in tree) // Interpret(해석) { exp.Interpret(context); } Console.WriteLine("{0} = {1}", roman, context.Output); // 사용자를 기다림 Console.ReadKey(); } } class Context // Context 클래스 { private string _input; private int _output; // 생성자 public Context(string input) { this._input = input; } 2. Interpreter pattern / 3) 사용예 / (2) C# Real World example code
  14. 14. 2. Interpreter pattern - 3 - public string Input // 입력을 가져오거나 셋팅함 { get { return _input; } set { _input = value; } } public int Output // 출력을 가져오거나 셋팅함 { get { return _output; } set { _output = value; } } } abstract class Expression // ‘Expression’추상 클래스 { public void Interpret(Context context) { if (context.Input.Length == 0) return; 2. Interpreter pattern / 3) 사용예 / (2) C# Real World example code
  15. 15. 2. Interpreter pattern - 4 - if (context.Input.StartsWith(Nine())) { context.Output += (9 * Multiplier()); context.Input = context.Input.Substring(2); } else if (context.Input.StartsWith(Four())) { context.Output += (4 * Multiplier()); context.Input = context.Input.Substring(2); } else if (context.Input.StartsWith(Five())) { context.Output += (5 * Multiplier()); context.Input = context.Input.Substring(1); } while (context.Input.StartsWith(One())) { context.Output += (1 * Multiplier()); context.Input = context.Input.Substring(1); } } 2. Interpreter pattern / 3) 사용예 / (2) C# Real World example code
  16. 16. 2. Interpreter pattern - 5 - public abstract string One(); public abstract string Four(); public abstract string Five(); public abstract string Nine(); public abstract int Multiplier(); } // TerminalExpression 클래스 class ThousandExpression : Expression { // 1000 검사 = 로마숫자 ‘M’ public override string One() { return "M"; } public override string Four() { return " "; } public override string Five() { return " "; } public override string Nine() { return " "; } public override int Multiplier() { return 1000; } } 2. Interpreter pattern / 3) 사용예 / (2) C# Real World example code
  17. 17. 2. Interpreter pattern - 6 - class HundredExpression : Expression // TerminalExpression 클래스 { // 100 검사 = 로마숫자 ‘C, CD, D or CM’ public override string One() { return "C"; } public override string Four() { return "CD"; } public override string Five() { return "D"; } public override string Nine() { return "CM"; } public override int Multiplier() { return 100; } } class TenExpression : Expression // TerminalExpression 클래스 { // 10 검사 = 로마숫자 ‘X, XL, L or XC’ public override string One() { return "X"; } public override string Four() { return "XL"; } public override string Five() { return "L"; } public override string Nine() { return "XC"; } public override int Multiplier() { return 10; } } 2. Interpreter pattern / 3) 사용예 / (2) C# Real World example code
  18. 18. 2. Interpreter pattern - 7 - class OneExpression : Expression // TerminalExpression 클래스 { // 1 검사 = 로마숫자 ‘I, II, III, IV, V, VI, VII, VIII, IX’ public override string One() { return "I"; } public override string Four() { return "IV"; } public override string Five() { return "V"; } public override string Nine() { return "IX"; } public override int Multiplier() { return 1; } } } 2. Interpreter pattern / 3) 사용예 / (2) C# Real World example code MCMXXVIII = 1928 - Output -
  19. 19. Q & A

×