E D R , A S I H C RSS

Dispatched Interpretation

Dispatched Interpretation

인코딩은 ν”„λ‘œκ·Έλž˜λ°μ— μžˆμ–΄μ„œ ν•„μˆ˜μ μ΄λ‹€. 데이터가 κ³„μ‚°μœΌλ‘œλΆ€ν„° λΆ„λ¦¬λ˜μ–΄ 있던 κ³Όκ±°μ—λŠ”, 인코딩 μž‘μ—…μ€ 맀우 μ€‘μš”ν–ˆλ‹€. 삑사리 ν•œλ²ˆ λ‚΄λ©΄ 돈 κ²λ‚˜ 많이 λ“€μ—ˆλ‹€. ν•˜μ§€λ§Œ 객체지ν–₯ μ‹œλŒ€μ—λŠ” μ€ λ‹€λ₯΄λ‹€. 인코딩은 λ‘λ²ˆμ§Έλ‘œ λ°€λ €λ‚˜κ³  객체듀 μ‚¬μ΄μ˜ μ±…μž„μ„ λΆ„λ°°ν•˜λŠ” 것이 κ°€μž₯ μ€‘μš”ν•˜κ²Œ 된 것이닀. μž˜μ§œμ—¬μ§„ OO ν”„λ‘œκ·Έλž¨μ—λŠ”, μ–΄λ– ν•œ 정보에 관심을 κ°€μ§€λŠ” 객체가 ν•˜λ‚˜λ°–μ— μ—†μ–΄μ•Ό ν•œλ‹€. κ·Έ κ°μ²΄λŠ” μžμ‹ μ˜ 정보에 직접 μ ‘κ·Όν•˜κ³ , μ€λ°€ν•˜κ²Œ 인코딩과 디코딩을 μˆ˜ν–‰ν•œλ‹€.

κ·Έ.러.λ‚˜. 객체의 정보가 λ‹€λ₯Έ 객체에 영ν–₯을 λΈμ³μ•Όλ§Œ ν• λ•Œκ°€ μžˆλ‹€. κ°„λ‹¨ν• λ•ŒλŠ”, κ·Έλƒ₯ μΈμ½”λ”©λœ μ˜€λΈŒμ νŠΈμ— λ©”μ„Έμ§€λΌ λ³΄λ‚΄λ©΄ μˆ˜μ›”ν•˜κ²Œ 해결이 κ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ λ³΅μž‘ν•œ κ²½μš°μ—λŠ” νž˜λ“€λ‹€. λ¬Έμ œλŠ” 수백의 ν΄λΌμ΄μ–ΈνŠΈλ“€μ—κ²Œ λͺ¨λ“  νƒ€μž…μ˜ 정보에 λŒ€ν•΄ λͺ…μ‹œμ μœΌλ‘œ case ν˜•νƒœμ˜ κ΅¬μ‘°λΌ λ§Œλ“€κΈ°λΌ μ›ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이닀.(??)

μ—­μ‹œ μ½”λ“œλ‘œ μ΄ν•΄ν•˜λŠ” 것이 λΉ λ₯΄λ‹€. Shape κ°μ²΄λŠ” line, curve, stroke, fill μ»€λ§¨λ“œλ“€μ˜ 순차적인 μ‘°ν•©μœΌλ‘œ 이루어져 μžˆλ‹€. 이것은 commandAt(int)λΌλŠ” n번째 μ»€λ§¨λ“œλΌ λ¦¬ν„΄ν•΄μ£ΌλŠ” 메세지와, argumentsAt(int)λΌλŠ” μ»€λ§¨λ“œμ— λ„˜κ²¨μ„ μΈμžλ“€μ˜ 배열을 λ¦¬ν„΄ν•΄μ£ΌλŠ” λ©”μ„Έμ§€λΌ μ œκ³΅ν•΄μ€λ‹€.
~cpp 
class PostScriptShapePrinter
{
public:
	void display(Shape& aShape)
	{
		for(int i = 0 ; i < aShape.size() ; ++i)
		{	
			void* command = aShape.commandAt(i); // 문법 λ§žλ‚˜?--;
			Arguments& argument = aShape.argumentsAt(i);
			if(command == lineFunc)
			{
				printPoint(argument.at(1));
				space();
				printPoint(argument.at(2));
				space();
				nextPutAll("line");
			}
			else if(command == curveFunc)
			/*	...	*/
		}
	}
};
μœ„μ˜ μ½”λ“œλΌ λ³΄λ©΄ μ•Œκ² μ§€λ§Œ, CURVE λ‹€μŒμ—λŠ” STROKE, FILL 등이 계속 λ‚˜μ˜¬ 것이닀. 즉, case κ΅¬μ‘°λΌ μ”€μœΌλ‘œμ¨, OAOO의 원칙을 μœ„λ°˜ν•˜κ³  μžˆλ‹€. 이에 μš°λ¦¬λŠ” case ꡬ쑰가 μΈμ½”λ”©λœ 객체 μ•ˆμ— μˆ¨κ²¨μ§€λ„λ‘ ν•˜λŠ” 해결책이 ν•„μš”ν•˜λ‹€.

λͺ¨λ“  μ»€λ§¨λ“œλΌ μœ„ν•œ case ꡬ문을 쓰지 말고, PostScriptShapePrinter에 λͺ¨λ“  μ»€λ§¨λ“œλΌ λ‘μž.
~cpp 
void PostScriptShapePrinter::line(Point& from, Point& to)
{
	printPoint(from);
	space();
	printPoint(to);
	space();
	nextPutAll("line");	
}
void PostScriptShapePrinter::curve(/* ... */) { /* ... */ }
/* ... */

λ˜ν•œ, commantAtμ΄λ‚˜ argumentAt같은 메세지 말고, sendCommand(at,to) 같은 λ©”μ„Έμ§€λΌ μ œκ³΅ν•˜μž. μœ„μ˜ line,curve도 이꼴이λ€λ‘œ 같이 λ‹€λ£°μˆ˜ μžˆλ‹€.
~cpp 
void PostScriptShapePrinter::display(Shape& aShape)
{
	for(int i = 0 ; i < aShape.size() ; ++i)
	{
		aShape.sendCommand(i,this);
	}
}
μ € λ©”μ†Œλ“œλŠ” Shape둜 κ°€λŠ”κ²Œ 쒋을 λ“ν•˜λ‹€.
~cpp 
void Shape::sendCommandTo(Object& anObject)
{
	for(int i = 0 ; i < size() ; ++i)
	{
		sendCommand(i,object);
	}
}
그러면 μ΄λ ‡κ²Œ 간단해진닀.
~cpp 
void PostScriptShapePrinter::display(Shape& aShape)
{
	aShape.sendCommandTo(this);
}

정리해놓고 λ³΄λ‹ˆ... 무슨 말인지 λͺ¨λ₯΄κ² λ‹€.--; μ•žμ΄λž‘ λ’€μ˜ 연관관계가 μƒλ‹Ήνžˆ 떨어진닀. 본인의 해석이 λΆ€μ±ν•œ 탓이닀. λΉ λ₯Έ μ‹œμΌ 내에 λ³΄κ°•ν•΄μ„œ μ˜¬λ¦¬κ² λ‹€.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:08
Processing time 0.0130 sec