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.0041 sec