<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=VendingMachine%2F%EC%84%B8%EC%97%B0%2F1002</id>
	<title>VendingMachine/세연/1002 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=VendingMachine%2F%EC%84%B8%EC%97%B0%2F1002"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=VendingMachine/%EC%84%B8%EC%97%B0/1002&amp;action=history"/>
	<updated>2026-05-14T08:54:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=VendingMachine/%EC%84%B8%EC%97%B0/1002&amp;diff=83527&amp;oldid=prev</id>
		<title>Maintenance script: Repair MoniWiki formatting after migration</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=VendingMachine/%EC%84%B8%EC%97%B0/1002&amp;diff=83527&amp;oldid=prev"/>
		<updated>2026-03-26T14:01:43Z</updated>

		<summary type="html">&lt;p&gt;Repair MoniWiki formatting after migration&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:01, 26 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 원칙 ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 원칙 ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;다음과 같은 2개의 원칙만 적용해서 수정해봤습니다.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;다음과 같은 2개의 원칙만 적용해서 수정해봤습니다.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 명확하지 않는 변수/함수&amp;amp;메소드 이름에 대해 - 이름을 다르게 바꿔준다. 또는 무엇을 하기 위한 것인가에 입각, 함수/메소드 로 추출한다.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 명확하지 않는 변수/함수&amp;amp;메소드 이름에 대해 - 이름을 다르게 바꿔준다. 또는 무엇을 하기 위한 것인가에 입각, 함수/메소드 로 추출한다. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 소위 magic number (ex : 배열의 범위를 설정하는 숫자들) 라 불리는 것들에 대해 - const 변수 선언&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 소위 magic number (ex : 배열의 범위를 설정하는 숫자들) 라 불리는 것들에 대해 - const 변수 선언&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 긴 메소드 - 함수 &amp;amp; 메소드를 따로 추출. 즉, 하나의 함수 내에서 하는 일들이 많다고 생각될 때.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 긴 메소드 - 함수 &amp;amp; 메소드를 따로 추출. 즉, 하나의 함수 내에서 하는 일들이 많다고 생각될 때. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 중복 - 중복되는 부분에 대해 함수 &amp;amp; 메소드로 추출.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 중복 - 중복되는 부분에 대해 함수 &amp;amp; 메소드로 추출.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;여기서는 저 위의 1-4번 원칙만 생각해 보겠습니다. 일단 이 코드가 제대로 돌아간다는 가정하에서 수정합니다. (문제는 제대로 고쳐졌는지 확인할 길이 적다는. -_-;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;여기서는 저 위의 1-4번 원칙만 생각해 보겠습니다. 일단 이 코드가 제대로 돌아간다는 가정하에서 수정합니다. (문제는 제대로 고쳐졌는지 확인할 길이 적다는. -_-;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1087&quot;&gt;Line 1,087:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1,087:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	return 0;    &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	return 0;    &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=VendingMachine/%EC%84%B8%EC%97%B0/1002&amp;diff=40000&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=VendingMachine/%EC%84%B8%EC%97%B0/1002&amp;diff=40000&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=== 원칙 ===&lt;br /&gt;
다음과 같은 2개의 원칙만 적용해서 수정해봤습니다. &lt;br /&gt;
# 명확하지 않는 변수/함수&amp;amp;메소드 이름에 대해 - 이름을 다르게 바꿔준다. 또는 무엇을 하기 위한 것인가에 입각, 함수/메소드 로 추출한다. &lt;br /&gt;
# 소위 magic number (ex : 배열의 범위를 설정하는 숫자들) 라 불리는 것들에 대해 - const 변수 선언&lt;br /&gt;
# 긴 메소드 - 함수 &amp;amp; 메소드를 따로 추출. 즉, 하나의 함수 내에서 하는 일들이 많다고 생각될 때. &lt;br /&gt;
# 중복 - 중복되는 부분에 대해 함수 &amp;amp; 메소드로 추출.&lt;br /&gt;
&lt;br /&gt;
여기서는 저 위의 1-4번 원칙만 생각해 보겠습니다. 일단 이 코드가 제대로 돌아간다는 가정하에서 수정합니다. (문제는 제대로 고쳐졌는지 확인할 길이 적다는. -_-;)&lt;br /&gt;
&lt;br /&gt;
=== menu 추출 : 3번 원칙 ===&lt;br /&gt;
 void printMenu () {&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n자판기 입니다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;1.돈을 넣는다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;2.물건을 산다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;3.돈을 거술러 받는다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;4.음료수를 채운다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;0.종료한다\n&amp;quot;; &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;메뉴를 선택하세요 : &amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== while loop 에서의 조건식 - 1번 ===&lt;br /&gt;
 bool isEndMenu (int choice) {&lt;br /&gt;
 	return choice != 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 	while(isEndMenu (choice))&lt;br /&gt;
 	{&lt;br /&gt;
 		printMenu ();&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; choice;&lt;br /&gt;
 		.&lt;br /&gt;
 		.&lt;br /&gt;
&lt;br /&gt;
=== choice != 0 : 2번 ===&lt;br /&gt;
 enum {&lt;br /&gt;
 	MENU_END = 0,&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 bool isEndMenu (int choice) {&lt;br /&gt;
 	return choice != MENU_END;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== MENU 부분에 대해서 : 2번 ===&lt;br /&gt;
 enum {&lt;br /&gt;
 	MENU_END = 0,&lt;br /&gt;
 	MENU_GET_MONEY,&lt;br /&gt;
 	MENU_BUY,&lt;br /&gt;
 	MENU_TAKEBACK_MONEY,&lt;br /&gt;
 	MENU_INSERT_DRINK&lt;br /&gt;
 };&lt;br /&gt;
 			switch(choice)&lt;br /&gt;
 			{&lt;br /&gt;
 			case MENU_GET_MONEY:&lt;br /&gt;
 				VendingMachine.GetMoney();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_BUY:&lt;br /&gt;
 				VendingMachine.Buy();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_TAKEBACK_MONEY:&lt;br /&gt;
 				VendingMachine.TakeBackMoney();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_INSERT_DRINK:&lt;br /&gt;
 				VendingMachine.InsertDrink();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_END:&lt;br /&gt;
 				cout &amp;amp;lt;&amp;amp;lt; &amp;quot;자판기를 종료합니다!!\n\n&amp;quot;; &lt;br /&gt;
 				break;&lt;br /&gt;
 			}&lt;br /&gt;
&lt;br /&gt;
=== MENU 선택 부분과 관련(choice &amp;gt;= 0 &amp;amp;&amp;amp; choice &amp;lt;= 4), 잘못된 메뉴 선택 골라주기 : 1, 2번 ===&lt;br /&gt;
 bool isValidMenu (int choice) {&lt;br /&gt;
 	return choice &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; choice &amp;amp;lt;= 4;&lt;br /&gt;
 }&lt;br /&gt;
여기에 2번을 다시 적용해주면 &lt;br /&gt;
 bool isValidMenu (int choice) {&lt;br /&gt;
 	return choice &amp;amp;gt;= MENU_END &amp;amp;amp;&amp;amp;amp; choice &amp;amp;lt;= MENU_INSERT_DRINK;&lt;br /&gt;
 }&lt;br /&gt;
근데.. 좀 명확해 보이진 않는군요. enum 에서 설정된 것을 재정의해주면&lt;br /&gt;
 enum {&lt;br /&gt;
 	MENU_ENDCODE = 0,&lt;br /&gt;
 	MENU_START = 0,&lt;br /&gt;
 	MENU_GET_MONEY,&lt;br /&gt;
 	MENU_BUY,&lt;br /&gt;
 	MENU_TAKEBACK_MONEY,&lt;br /&gt;
 	MENU_INSERT_DRINK,&lt;br /&gt;
 	MENU_END = MENU_INSERT_DRINK&lt;br /&gt;
 };&lt;br /&gt;
MENU_END 뜻이 달라졌으므로, 앞에서 MENU_END를 썼었던 다른 것들도 고칩니다.&lt;br /&gt;
 			case MENU_ENDCODE:&lt;br /&gt;
 				cout &amp;amp;lt;&amp;amp;lt; &amp;quot;자판기를 종료합니다!!\n\n&amp;quot;; &lt;br /&gt;
 				break;&lt;br /&gt;
 			}&lt;br /&gt;
 bool isEndMenu (int choice) {&lt;br /&gt;
 	return choice != MENU_ENDCODE;&lt;br /&gt;
 }&lt;br /&gt;
그러면, &lt;br /&gt;
 ~cpp isValidMenu&lt;br /&gt;
를 다음과 같이 고칠 수 있습니다. (써놓고 보니 그리 맘에 들진 않지만, 일단 이정도만 해두겠습니다. -_-;)&lt;br /&gt;
 bool isValidMenu (int choice) {&lt;br /&gt;
 	return choice &amp;amp;gt;= MENU_START &amp;amp;amp;&amp;amp;amp; choice &amp;amp;lt;= MENU_END;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Menu 의 부분 - 1번 원칙 ===&lt;br /&gt;
 			case MENU_ENDCODE:&lt;br /&gt;
 				VendingMachine.EndMachine();&lt;br /&gt;
 				break;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		else &lt;br /&gt;
 			VendingMachine.PrintErrorMessage ();&lt;br /&gt;
 	}&lt;br /&gt;
솔직히 이부분이 좋지 않은 것이.. Vending Machine 내에서 UI 부분이 확실하게 추출되지 않았다는 점입니다. (만일 Requirement 가 변경되어서, MFC 그래픽 버전으로 만든다면? 디자인이 잘 된다면, Vending Machine 쪽의 코드의 수정이 거의 없이 UI 코드만 &amp;#039;추가&amp;#039; 될 겁니다. 이는 기존 Vending Machine 코드쪽의 &amp;#039;변경&amp;#039;을 의미하지 않습니다.)&lt;br /&gt;
&lt;br /&gt;
하지만 이건 추후에 Vending Machine 에서 메소드를 다른 클래스에게로 이양시켜주면서 UI 부분과 관련한 클래스를 추출해 낼 수 있을 것 같다고 생각합니다. 여기서는 추후에 진행하도록 하겠습니다.&lt;br /&gt;
&lt;br /&gt;
디자인을 할때에 보통 Input / Output 은 요구사항이 자주 바뀌므로 일단 메인 Vending Machine 코드가 작성되고 난 뒤, Vending Machine 의 인터페이스에 맞춰서 Input / Output 코드를 나중에 작성하는 것이 좋습니다.&lt;br /&gt;
&lt;br /&gt;
=== Vending Machine 의 초기화 부분 - 4번 원칙 ===&lt;br /&gt;
 const int DRINKNAME_MAXLENGTH = 255;&lt;br /&gt;
 const int TOTAL_DRINK_TYPE = 5;&lt;br /&gt;
 vending_machine::vending_machine()&lt;br /&gt;
 {&lt;br /&gt;
 	money = temp_money = 0;&lt;br /&gt;
 	select_money = 1;&lt;br /&gt;
 	max_num = TOTAL_DRINK_TYPE;&lt;br /&gt;
 &lt;br /&gt;
 	char drinkNames[TOTAL_DRINK_TYPE][DRINKNAME_MAXLENGTH] = {&amp;quot;coke&amp;quot;, &amp;quot;juice&amp;quot;, &amp;quot;tea&amp;quot;, &amp;quot;cofee&amp;quot;, &amp;quot;milk&amp;quot;};&lt;br /&gt;
 	int price[TOTAL_DRINK_TYPE] = {400, 600, 500, 450, 350};&lt;br /&gt;
 &lt;br /&gt;
 	for (int i=0; i&amp;amp;lt;max_num; i++) {&lt;br /&gt;
 		strcpy(s_drink[i].name , drinkNames[i]);&lt;br /&gt;
 		s_drink[i].price = price[i];&lt;br /&gt;
 		s_drink[i].amount = 10;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일단 여기까지의 소스는 대강 이러합니다. 아직은 뭐 그리 큰 변화는 느껴지지 않습니다. ^^ (나머진 있다가 학교 도착한 뒤 마저;)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 enum {&lt;br /&gt;
 	MENU_ENDCODE = 0,&lt;br /&gt;
 	MENU_START = 0,&lt;br /&gt;
 	MENU_GET_MONEY,&lt;br /&gt;
 	MENU_BUY,&lt;br /&gt;
 	MENU_TAKEBACK_MONEY,&lt;br /&gt;
 	MENU_INSERT_DRINK,&lt;br /&gt;
 	MENU_END = MENU_INSERT_DRINK&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 const int DRINKNAME_MAXLENGTH = 255;&lt;br /&gt;
 const int TOTAL_DRINK_TYPE = 5;&lt;br /&gt;
 &lt;br /&gt;
 class vending_machine&lt;br /&gt;
 {&lt;br /&gt;
 private:&lt;br /&gt;
 	int money;&lt;br /&gt;
 	int temp_money;&lt;br /&gt;
 	int select_money, select_drink, insert_amount;&lt;br /&gt;
 	struct drink&lt;br /&gt;
 	{&lt;br /&gt;
 		char name[DRINKNAME_MAXLENGTH];&lt;br /&gt;
 		int price, amount;&lt;br /&gt;
 	};&lt;br /&gt;
 	drink s_drink[5];&lt;br /&gt;
 	int max_num;&lt;br /&gt;
 	&lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
 	vending_machine();&lt;br /&gt;
 	void GetMoney();&lt;br /&gt;
 	void Buy();&lt;br /&gt;
 	void TakeBackMoney();&lt;br /&gt;
 	void InsertDrink();&lt;br /&gt;
 	void EndMachine();&lt;br /&gt;
 	void PrintErrorMessage ();&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 vending_machine::vending_machine()&lt;br /&gt;
 {&lt;br /&gt;
 	money = temp_money = 0;&lt;br /&gt;
 	select_money = 1;&lt;br /&gt;
 	max_num = TOTAL_DRINK_TYPE;&lt;br /&gt;
 &lt;br /&gt;
 	char drinkNames[TOTAL_DRINK_TYPE][DRINKNAME_MAXLENGTH] = {&amp;quot;coke&amp;quot;, &amp;quot;juice&amp;quot;, &amp;quot;tea&amp;quot;, &amp;quot;cofee&amp;quot;, &amp;quot;milk&amp;quot;};&lt;br /&gt;
 	int price[TOTAL_DRINK_TYPE] = {400, 600, 500, 450, 350};&lt;br /&gt;
 &lt;br /&gt;
 	for (int i=0; i&amp;amp;lt;max_num; i++) {&lt;br /&gt;
 		strcpy(s_drink[i].name , drinkNames[i]);&lt;br /&gt;
 		s_drink[i].price = price[i];&lt;br /&gt;
 		s_drink[i].amount = 10;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 	&lt;br /&gt;
 void vending_machine::GetMoney()&lt;br /&gt;
 {&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. 10, 50, 100, 500, 1000만 가능 : &amp;quot;;&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; temp_money;&lt;br /&gt;
 	if(temp_money == 10 || temp_money == 50 || temp_money == 100 || temp_money == 500 || temp_money == 1000)&lt;br /&gt;
 		money = money + temp_money;&lt;br /&gt;
 	else&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;10, 50, 100, 500, 1000만 가능합니다. 다시 시작해주세요\n&amp;quot;;&lt;br /&gt;
 			&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 넣었습니다\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::Buy()&lt;br /&gt;
 {&lt;br /&gt;
 	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수\t\t가격\t수량\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;------------------------------------\n&amp;quot;;&lt;br /&gt;
 	for(int i = 0 ; i &amp;amp;lt; max_num ; i++)&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; i + 1 &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot;  &amp;amp;lt;&amp;amp;lt; s_drink[i].name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t\t&amp;quot; &amp;amp;lt;&amp;amp;lt; s_drink[i].price &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot; &amp;amp;lt;&amp;amp;lt; s_drink[i].amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
 	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n현재 &amp;quot; &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원이 있어요\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;원하는 음료수를 선택하세요 : &amp;quot;;&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; select_drink;&lt;br /&gt;
 	switch(select_drink)&lt;br /&gt;
 	{&lt;br /&gt;
 	case 1:&lt;br /&gt;
 		if((money - s_drink[select_drink - 1].price) &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; s_drink[select_drink - 1].amount &amp;amp;gt;= 1)&lt;br /&gt;
 		{&lt;br /&gt;
 			s_drink[select_drink - 1].amount--;&lt;br /&gt;
 			money = money - s_drink[select_drink - 1].price;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 2:&lt;br /&gt;
 		if((money - s_drink[select_drink - 1].price) &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; s_drink[select_drink - 1].amount &amp;amp;gt;= 1)&lt;br /&gt;
 		{&lt;br /&gt;
 			s_drink[select_drink - 1].amount--;&lt;br /&gt;
 			money = money - s_drink[select_drink - 1].price;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 3:&lt;br /&gt;
 		if((money - s_drink[select_drink - 1].price) &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; s_drink[select_drink - 1].amount &amp;amp;gt;= 1)&lt;br /&gt;
 		{&lt;br /&gt;
 			s_drink[select_drink - 1].amount--;&lt;br /&gt;
 			money = money - s_drink[select_drink - 1].price;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 4:&lt;br /&gt;
 		if((money - s_drink[select_drink - 1].price) &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; s_drink[select_drink - 1].amount &amp;amp;gt;= 1)&lt;br /&gt;
 		{&lt;br /&gt;
 			s_drink[select_drink - 1].amount--;&lt;br /&gt;
 			money = money - s_drink[select_drink - 1].price;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 5:&lt;br /&gt;
 		if((money - s_drink[select_drink - 1].price) &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; s_drink[select_drink - 1].amount &amp;amp;gt;= 1)&lt;br /&gt;
 		{&lt;br /&gt;
 			s_drink[select_drink - 1].amount--;&lt;br /&gt;
 			money = money - s_drink[select_drink - 1].price;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;;&lt;br /&gt;
 		break;&lt;br /&gt;
 	&lt;br /&gt;
 	}&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원이 남았어요\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::TakeBackMoney()&lt;br /&gt;
 {&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;거스름돈&amp;quot; &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 돌려드립니다\n&amp;quot;;&lt;br /&gt;
 	money = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::InsertDrink()&lt;br /&gt;
 {&lt;br /&gt;
 	for(int i = 0 ; i &amp;amp;lt; max_num ; i++)&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; i + 1 &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot; &amp;amp;lt;&amp;amp;lt; s_drink[i].name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot; &amp;amp;lt;&amp;amp;lt; s_drink[i].amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수를 선택하세요 : &amp;quot;;&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; select_drink;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수 수량을 입력해주세요 : &amp;quot;;&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; insert_amount;&lt;br /&gt;
 &lt;br /&gt;
 	switch(select_drink)&lt;br /&gt;
 	{&lt;br /&gt;
 	case 1:&lt;br /&gt;
 		s_drink[select_drink - 1].amount += insert_amount;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 2:&lt;br /&gt;
 		s_drink[select_drink - 1].amount += insert_amount;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 3:&lt;br /&gt;
 		s_drink[select_drink - 1].amount += insert_amount;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 4:&lt;br /&gt;
 		s_drink[select_drink - 1].amount += insert_amount;&lt;br /&gt;
 		break;&lt;br /&gt;
 	case 5:&lt;br /&gt;
 		s_drink[select_drink - 1].amount += insert_amount;&lt;br /&gt;
 		break;&lt;br /&gt;
 	}&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수를 채웠습니다\n&amp;quot;;&lt;br /&gt;
 	for(i = 0 ; i &amp;amp;lt; max_num ; i++)&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; i + 1 &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot; &amp;amp;lt;&amp;amp;lt; s_drink[i].name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot; &amp;amp;lt;&amp;amp;lt; s_drink[i].amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::EndMachine()&lt;br /&gt;
 {&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;자판기를 종료합니다!!\n\n&amp;quot;; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::PrintErrorMessage ()&lt;br /&gt;
 {&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잘못된 메뉴 선택입니다. 메뉴를 다시 입력해주세요\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void printMenu () {&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n자판기 입니다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;1.돈을 넣는다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;2.물건을 산다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;3.돈을 거술러 받는다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;4.음료수를 채운다\n&amp;quot;;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;0.종료한다\n&amp;quot;; &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;메뉴를 선택하세요 : &amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 bool isEndMenu (int choice) {&lt;br /&gt;
 	return choice != MENU_ENDCODE;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 bool isValidMenu (int choice) {&lt;br /&gt;
 	return choice &amp;amp;gt;= MENU_START &amp;amp;amp;&amp;amp;amp; choice &amp;amp;lt;= MENU_END;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	vending_machine VendingMachine;&lt;br /&gt;
 	int choice = -1;&lt;br /&gt;
 &lt;br /&gt;
 	while(isEndMenu (choice))&lt;br /&gt;
 	{&lt;br /&gt;
 		printMenu ();&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; choice;&lt;br /&gt;
 		if(isValidMenu (choice))&lt;br /&gt;
 		{&lt;br /&gt;
 			switch(choice)&lt;br /&gt;
 			{&lt;br /&gt;
 			case MENU_GET_MONEY:&lt;br /&gt;
 				VendingMachine.GetMoney();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_BUY:&lt;br /&gt;
 				VendingMachine.Buy();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_TAKEBACK_MONEY:&lt;br /&gt;
 				VendingMachine.TakeBackMoney();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_INSERT_DRINK:&lt;br /&gt;
 				VendingMachine.InsertDrink();&lt;br /&gt;
 				break;&lt;br /&gt;
 			case MENU_ENDCODE:&lt;br /&gt;
 				VendingMachine.EndMachine();&lt;br /&gt;
 				break;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		else &lt;br /&gt;
 			VendingMachine.PrintErrorMessage ();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== vending_machine::GetMoney () - 1, 3, 4번 원칙 ===&lt;br /&gt;
&amp;#039;무엇을 하는가&amp;#039; 라고 할때 InsertMoney 또는 InsertCoin 이 더 정확한 표현이라 생각되어집니다. 그리고, 역시 하는 일에 대해서 메소드로 추출함으로서 comment 를 대신 할 수 있습니다.&lt;br /&gt;
 bool vending_machine::isValidMoney (int money) {&lt;br /&gt;
 	return (temp_money == 10 || temp_money == 50 || temp_money == 100 || temp_money == 500 || temp_money == 1000);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::InsertMoney() &lt;br /&gt;
 { &lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. 10, 50, 100, 500, 1000만 가능 : &amp;quot;; &lt;br /&gt;
         cin &amp;amp;gt;&amp;amp;gt; temp_money; &lt;br /&gt;
 	if (isValidMoney (temp_money)) {&lt;br /&gt;
 	        money = money + temp_money; &lt;br /&gt;
 	}&lt;br /&gt;
         else &lt;br /&gt;
                 cout &amp;amp;lt;&amp;amp;lt; &amp;quot;10, 50, 100, 500, 1000만 가능합니다. 다시 시작해주세요\n&amp;quot;; &lt;br /&gt;
                          &lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 넣었습니다\n&amp;quot;; &lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
그리고, 메소드로 추출하면 좋은점이, 코드를 고칠 부분을 메소드 내로 시야의 폭을 줄일 수 있습니다. 작은 메소드라도 추출해두면 나중에 다시 메소드를 모으거나, 중복을 없애기가 편리합니다.&lt;br /&gt;
 bool vending_machine::isValidMoney (int money) {&lt;br /&gt;
 	int validMoneys[5] = {10, 50, 100, 500, 1000};&lt;br /&gt;
 &lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;5;i++) {&lt;br /&gt;
 		if (money == validMoney[i]) return true;&lt;br /&gt;
 	}&lt;br /&gt;
 	return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
단, 이러한 중복줄이기 &amp;amp; 일반화는 중복이 발생되었을때 (2 or 3 strike) 해주는 것이 쉽습니다. 처음부터 모든 중복될 부분을 다 예측해 낼 수는 없습니다.&lt;br /&gt;
&lt;br /&gt;
이 일부터 시작, 더 극단적인 예를 든다면 다음과 같이도 할 수 있지만, 꼭 할 필요는 없습니다. (그대신 시도해보면 재미있습니다) 일단 넓게 넓게 보는 것이 더 좋기 때문에.&lt;br /&gt;
&lt;br /&gt;
 const int validMoney[5] = {10, 50, 100, 500, 1000};&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::printInsertCoinMenu () {&lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. 10, 50, 100, 500, 1000만 가능 : &amp;quot;; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::printErrorInvalidCoinMessage () {&lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; &amp;quot;10, 50, 100, 500, 1000만 가능합니다. 다시 시작해주세요\n&amp;quot;; &lt;br /&gt;
 }&lt;br /&gt;
 void vending_machine::printCurrentMoney () {&lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 넣었습니다\n&amp;quot;; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 bool vending_machine::isValidMoney (int money) {&lt;br /&gt;
 &lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;5;i++) {&lt;br /&gt;
 		if (money == validMoney[i]) return true;&lt;br /&gt;
 	}&lt;br /&gt;
 	return false;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::InsertMoney() &lt;br /&gt;
 { &lt;br /&gt;
 	printInsertCoinMenu ();&lt;br /&gt;
         cin &amp;amp;gt;&amp;amp;gt; temp_money; &lt;br /&gt;
 	if (isValidMoney (temp_money)) {&lt;br /&gt;
 	        money = money + temp_money; &lt;br /&gt;
 	        printCurrentMoney ();&lt;br /&gt;
 	}&lt;br /&gt;
         else &lt;br /&gt;
 		printErrorInvalidCoinMessage ();&lt;br /&gt;
                          &lt;br /&gt;
 } &lt;br /&gt;
이것을 한번 더 중복을 줄이면&lt;br /&gt;
 void vending_machine::printInsertCoinMenu () {&lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. &amp;quot;;&lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;4;i++) {&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; validMoneys[i] &amp;amp;lt;&amp;amp;lt; &amp;quot;,&amp;quot;&lt;br /&gt;
 	}&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; valiMoneys[4] &amp;amp;lt;&amp;amp;lt; &amp;quot;만 가능 : &amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== temp_money - 4번 ===&lt;br /&gt;
temp_money 가 하는 일을 보면 한가지 일만 합니다.&lt;br /&gt;
 void vending_machine::InsertMoney()  &lt;br /&gt;
 {  &lt;br /&gt;
 	printInsertCoinMenu (); &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; temp_money;  &lt;br /&gt;
 	if (isValidMoney (temp_money)) { &lt;br /&gt;
 		money = money + temp_money;  &lt;br /&gt;
 		printCurrentMoney (); &lt;br /&gt;
 	} &lt;br /&gt;
 	else  &lt;br /&gt;
 		printErrorInvalidCoinMessage (); &lt;br /&gt;
 	&lt;br /&gt;
 }  &lt;br /&gt;
이 이외엔 쓰이지 않지만, private 멤버로 있습니다. 이러한 입력을 받기 위한 임시변수는 그냥 멤버에서 없애주면 됩니다.&lt;br /&gt;
 void vending_machine::InsertMoney()  &lt;br /&gt;
 {  &lt;br /&gt;
 	int temp_money = 0;&lt;br /&gt;
 &lt;br /&gt;
 	printInsertCoinMenu (); &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; temp_money;  &lt;br /&gt;
 	&lt;br /&gt;
 	if (isValidMoney (temp_money)) { &lt;br /&gt;
 		money = money + temp_money;  &lt;br /&gt;
 		printCurrentMoney (); &lt;br /&gt;
 	} &lt;br /&gt;
 	else  &lt;br /&gt;
 		printErrorInvalidCoinMessage (); &lt;br /&gt;
 }  &lt;br /&gt;
&lt;br /&gt;
=== vending_machine::Buy () - 1,3,4 ===&lt;br /&gt;
1단계 - menu 부분 프린트 추출 &amp;amp; i -&amp;gt; drinkIndex 로 변경.&lt;br /&gt;
 void vending_machine::printBuyMenu () {&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수\t\t가격\t수량\n&amp;quot;; &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;------------------------------------\n&amp;quot;; &lt;br /&gt;
 	for(int drinkIndex = 0 ; drinkIndex &amp;amp;lt; max_num ; drinkIndex++) &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; drinkIndex + 1 &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot;  &lt;br /&gt;
 			&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t\t&amp;quot; &lt;br /&gt;
 			&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].price &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot; &lt;br /&gt;
 			&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;; &lt;br /&gt;
 	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n현재 &amp;quot; &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원이 있어요\n&amp;quot;; &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;원하는 음료수를 선택하세요 : &amp;quot;; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::Buy() &lt;br /&gt;
 { &lt;br /&gt;
 	printBuyMenu ();&lt;br /&gt;
 	.&lt;br /&gt;
 	.&lt;br /&gt;
2단계 - switch &amp;amp; case &lt;br /&gt;
&lt;br /&gt;
이 부분에 대해서 이미 일반화 공식을 만들었음에도 불구하고 불필요한 switch &amp;amp; case 문이 있습니다. 이 부분에 대해서는 많은 코드를 줄일 수 있겠습니다.&lt;br /&gt;
&lt;br /&gt;
 void vending_machine::Buy() &lt;br /&gt;
 { &lt;br /&gt;
 	printBuyMenu ();&lt;br /&gt;
 &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; select_drink; &lt;br /&gt;
 &lt;br /&gt;
 	if((money - s_drink[select_drink-1].price) &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; s_drink[select_drink-1].amount &amp;amp;gt;= 1) { &lt;br /&gt;
 		s_drink[select_drink-1].amount--; &lt;br /&gt;
 		money = money - s_drink[select_drink-1].price; &lt;br /&gt;
 	} &lt;br /&gt;
 	else &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;; &lt;br /&gt;
 &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원이 남았어요\n&amp;quot;; &lt;br /&gt;
 } &lt;br /&gt;
그리고, select_drink-1 식으로 쓴 것이 많은데, 이 이유는 아마 번호를 1,2,3,4 ... 로 찍기 위함일 것입니다. 그리고 select_drink 또한 vending_machine 의 멤버인데, 특별히 하는 일이 없는 한 지역변수로 두는것이 낫습니다.&lt;br /&gt;
&lt;br /&gt;
=== vending_machine::InsertDrink - 3,4 ===&lt;br /&gt;
 void vending_machine::InsertDrink() &lt;br /&gt;
 { &lt;br /&gt;
 	int select_drink;&lt;br /&gt;
 	int insert_amount;&lt;br /&gt;
 &lt;br /&gt;
 	printCurrentDrinkStatus ();&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수를 선택하세요 : &amp;quot;; &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; select_drink; &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수 수량을 입력해주세요 : &amp;quot;; &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; insert_amount; &lt;br /&gt;
 	&lt;br /&gt;
 	if (select_drink-1 &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; select_drink-1 &amp;amp;lt;=5) &lt;br /&gt;
 		s_drink[select_drink-1].amount += insert_amount; &lt;br /&gt;
 &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수를 채웠습니다\n&amp;quot;; &lt;br /&gt;
 	printCurrentDrinkStatus ();&lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
=== 중간 소스 ===&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;  &lt;br /&gt;
 using namespace std;  &lt;br /&gt;
 &lt;br /&gt;
 enum {  &lt;br /&gt;
 	MENU_ENDCODE = 0,  &lt;br /&gt;
         MENU_START = 0,  &lt;br /&gt;
         MENU_GET_MONEY,  &lt;br /&gt;
         MENU_BUY,  &lt;br /&gt;
         MENU_TAKEBACK_MONEY,  &lt;br /&gt;
         MENU_INSERT_DRINK,  &lt;br /&gt;
         MENU_END = MENU_INSERT_DRINK  &lt;br /&gt;
 };  &lt;br /&gt;
 &lt;br /&gt;
 const int DRINKNAME_MAXLENGTH = 255;  &lt;br /&gt;
 const int TOTAL_DRINK_TYPE = 5;  &lt;br /&gt;
 const int validMoney[5] = {10, 50, 100, 500, 1000};  &lt;br /&gt;
 &lt;br /&gt;
 class vending_machine  &lt;br /&gt;
 {  &lt;br /&gt;
 private:  &lt;br /&gt;
 	int money;  &lt;br /&gt;
 	struct drink  &lt;br /&gt;
 	{  &lt;br /&gt;
 		char name[DRINKNAME_MAXLENGTH];  &lt;br /&gt;
 		int price, amount;  &lt;br /&gt;
 	};  &lt;br /&gt;
 	drink s_drink[TOTAL_DRINK_TYPE];  &lt;br /&gt;
 	int max_num;  &lt;br /&gt;
 	&lt;br /&gt;
 	public:  &lt;br /&gt;
 		&lt;br /&gt;
         vending_machine();  &lt;br /&gt;
         void InsertMoney();  &lt;br /&gt;
         void Buy();  &lt;br /&gt;
         void TakeBackMoney();  &lt;br /&gt;
         void InsertDrink();  &lt;br /&gt;
         void EndMachine();  &lt;br /&gt;
 		&lt;br /&gt;
 		bool isValidMoney (int money); &lt;br /&gt;
 		&lt;br /&gt;
         void PrintErrorMessage ();  &lt;br /&gt;
 		void PrintErrorInvalidCoinMessage (); &lt;br /&gt;
 		void PrintInsertCoinMenu(); &lt;br /&gt;
 		void PrintCurrentMoney (); &lt;br /&gt;
 		void PrintBuyMenu (); &lt;br /&gt;
 		void PrintCurrentDrinkStatus (); &lt;br /&gt;
 };  &lt;br /&gt;
 &lt;br /&gt;
 vending_machine::vending_machine()  &lt;br /&gt;
 {  &lt;br /&gt;
 	money = 0;  &lt;br /&gt;
 	max_num = TOTAL_DRINK_TYPE;  &lt;br /&gt;
 	&lt;br /&gt;
 	char drinkNames[TOTAL_DRINK_TYPE][DRINKNAME_MAXLENGTH] = {&amp;quot;coke&amp;quot;, &amp;quot;juice&amp;quot;, &amp;quot;tea&amp;quot;, &amp;quot;cofee&amp;quot;, &amp;quot;milk&amp;quot;};  &lt;br /&gt;
 	int price[TOTAL_DRINK_TYPE] = {400, 600, 500, 450, 350};  &lt;br /&gt;
 	&lt;br /&gt;
 	for (int i=0; i&amp;amp;lt;max_num; i++) {  &lt;br /&gt;
 		strcpy(s_drink[i].name , drinkNames[i]);  &lt;br /&gt;
 		s_drink[i].price = price[i];  &lt;br /&gt;
 		s_drink[i].amount = 10;  &lt;br /&gt;
 	}  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::PrintInsertCoinMenu () {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. &amp;quot;;  &lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;4;i++) &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; validMoney[i] &amp;amp;lt;&amp;amp;lt; &amp;quot;,&amp;quot; ; &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; validMoney[4] &amp;amp;lt;&amp;amp;lt; &amp;quot;만 가능 : &amp;quot;;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::PrintErrorInvalidCoinMessage () {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. &amp;quot;;  &lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;4;i++) &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; validMoney[i] &amp;amp;lt;&amp;amp;lt; &amp;quot;,&amp;quot;; &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; validMoney[4] &amp;amp;lt;&amp;amp;lt; &amp;quot;만 가능합니다. 다시 시작해주세요\n&amp;quot;;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::PrintCurrentMoney () {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 넣었습니다\n&amp;quot;;   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 bool vending_machine::isValidMoney (int money) {  &lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;5;i++) &lt;br /&gt;
 		if (money == validMoney[i]) return true;  &lt;br /&gt;
 	return false;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::InsertMoney()   &lt;br /&gt;
 {   &lt;br /&gt;
 	int temp_money = 0; &lt;br /&gt;
 	&lt;br /&gt;
 	PrintInsertCoinMenu ();  &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; temp_money;   &lt;br /&gt;
 	&lt;br /&gt;
 	if (isValidMoney (temp_money)) {  &lt;br /&gt;
 		money = money + temp_money;   &lt;br /&gt;
 		PrintCurrentMoney ();  &lt;br /&gt;
 	}  &lt;br /&gt;
 	else   &lt;br /&gt;
 		PrintErrorInvalidCoinMessage ();  &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::PrintBuyMenu () { &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수\t\t가격\t수량\n&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;------------------------------------\n&amp;quot;;  &lt;br /&gt;
 &lt;br /&gt;
 	for(int drinkIndex = 0 ; drinkIndex &amp;amp;lt; max_num ; drinkIndex++)  &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; drinkIndex + 1 &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot;   &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t\t&amp;quot;  &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].price &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot;  &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;  &lt;br /&gt;
 	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n현재 &amp;quot; &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원이 있어요\n&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;원하는 음료수를 선택하세요 : &amp;quot;;  &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::Buy()  &lt;br /&gt;
 {  &lt;br /&gt;
 	PrintBuyMenu (); &lt;br /&gt;
 	&lt;br /&gt;
 	int select_drink; &lt;br /&gt;
 	&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; select_drink;  &lt;br /&gt;
 	&lt;br /&gt;
 	if((money - s_drink[select_drink-1].price) &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; s_drink[select_drink-1].amount &amp;amp;gt;= 1) {  &lt;br /&gt;
 		s_drink[select_drink-1].amount--;  &lt;br /&gt;
 		money = money - s_drink[select_drink-1].price;  &lt;br /&gt;
 	}  &lt;br /&gt;
 	else  &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;;  &lt;br /&gt;
 	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원이 남았어요\n&amp;quot;;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::TakeBackMoney()  &lt;br /&gt;
 {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;거스름돈&amp;quot; &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 돌려드립니다\n&amp;quot;;  &lt;br /&gt;
 	money = 0;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::PrintCurrentDrinkStatus () { &lt;br /&gt;
 	for(int drinkIndex = 0 ; drinkIndex &amp;amp;lt; max_num ; drinkIndex++)  &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; drinkIndex + 1 &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot; &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot; &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; s_drink[drinkIndex].amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;  &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::InsertDrink()  &lt;br /&gt;
 {  &lt;br /&gt;
 	int select_drink; &lt;br /&gt;
 	int insert_amount; &lt;br /&gt;
 	&lt;br /&gt;
 	PrintCurrentDrinkStatus (); &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수를 선택하세요 : &amp;quot;;  &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; select_drink;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수 수량을 입력해주세요 : &amp;quot;;  &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; insert_amount;  &lt;br /&gt;
 	&lt;br /&gt;
 	if (select_drink-1 &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; select_drink-1 &amp;amp;lt;=5)  &lt;br /&gt;
 		s_drink[select_drink-1].amount += insert_amount;  &lt;br /&gt;
 	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수를 채웠습니다\n&amp;quot;;  &lt;br /&gt;
 	PrintCurrentDrinkStatus (); &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::EndMachine()  &lt;br /&gt;
 {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;자판기를 종료합니다!!\n\n&amp;quot;;   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::PrintErrorMessage ()  &lt;br /&gt;
 {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잘못된 메뉴 선택입니다. 메뉴를 다시 입력해주세요\n&amp;quot;;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void PrintMenu () {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n자판기 입니다\n&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;1.돈을 넣는다\n&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;2.물건을 산다\n&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;3.돈을 거술러 받는다\n&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;4.음료수를 채운다\n&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;0.종료한다\n&amp;quot;;   &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;메뉴를 선택하세요 : &amp;quot;;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 bool isEndMenu (int choice) {  &lt;br /&gt;
 	return choice != MENU_ENDCODE;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 bool isValidMenu (int choice) {  &lt;br /&gt;
 	return choice &amp;amp;gt;= MENU_START &amp;amp;amp;&amp;amp;amp; choice &amp;amp;lt;= MENU_END;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void vending_machine::Run () {&lt;br /&gt;
 	int choice = -1;  &lt;br /&gt;
 	&lt;br /&gt;
 	while(isEndMenu (choice))  &lt;br /&gt;
 	{  &lt;br /&gt;
 		PrintMenu ();  &lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; choice;  &lt;br /&gt;
 		if(isValidMenu (choice))  &lt;br /&gt;
 		{  &lt;br /&gt;
 			switch(choice)  &lt;br /&gt;
 			{  &lt;br /&gt;
 			case MENU_GET_MONEY:  &lt;br /&gt;
 				InsertMoney();  &lt;br /&gt;
 				break;  &lt;br /&gt;
 			case MENU_BUY:  &lt;br /&gt;
 				Buy();  &lt;br /&gt;
 				break;  &lt;br /&gt;
 			case MENU_TAKEBACK_MONEY:  &lt;br /&gt;
 				TakeBackMoney();  &lt;br /&gt;
 				break;  &lt;br /&gt;
 			case MENU_INSERT_DRINK:  &lt;br /&gt;
 				InsertDrink();  &lt;br /&gt;
 				break;  &lt;br /&gt;
 			case MENU_ENDCODE:  &lt;br /&gt;
 				EndMachine();  &lt;br /&gt;
 				break;  &lt;br /&gt;
 			}  &lt;br /&gt;
 		}  &lt;br /&gt;
 		else   &lt;br /&gt;
 			PrintErrorMessage ();  &lt;br /&gt;
 	}  &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 int main()  &lt;br /&gt;
 {  &lt;br /&gt;
 	vending_machine VendingMachine;  &lt;br /&gt;
 	VendingMachine.Run ();&lt;br /&gt;
 	return 0;  &lt;br /&gt;
 }  &lt;br /&gt;
&lt;br /&gt;
이쯤에서 문제점 - vending_machine 이 완전히 God 클래스입니다. 완전히 이 프로그램 자체가 vending_machine 객체와 동급이 되어버리죠. &lt;br /&gt;
&lt;br /&gt;
입출력부분과 Vending Machine 자체의 분리&lt;br /&gt;
 #ifndef _VENDINGMACHINE_H_&lt;br /&gt;
 #define _VENDINGMACHINE_H_&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;   &lt;br /&gt;
 #include &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;vector&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;map&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;algorithm&amp;amp;gt;&lt;br /&gt;
 using namespace std;   &lt;br /&gt;
 &lt;br /&gt;
 class Drink   &lt;br /&gt;
 {   &lt;br /&gt;
 public:&lt;br /&gt;
 	string name;   &lt;br /&gt;
 	int price;&lt;br /&gt;
 	int amount;   &lt;br /&gt;
 	&lt;br /&gt;
 	Drink (string name, int price, int amount) {&lt;br /&gt;
 		this-&amp;amp;gt;name = name;&lt;br /&gt;
 		this-&amp;amp;gt;price = price;&lt;br /&gt;
 		this-&amp;amp;gt;amount = amount;&lt;br /&gt;
 	}&lt;br /&gt;
 };   &lt;br /&gt;
 &lt;br /&gt;
 class VendingMachine   &lt;br /&gt;
 {   &lt;br /&gt;
 public:   &lt;br /&gt;
 	int money;   &lt;br /&gt;
 	vector &amp;amp;lt;Drink*&amp;amp;gt; drinks;&lt;br /&gt;
 	vector &amp;amp;lt;int&amp;amp;gt; validMoney;&lt;br /&gt;
 &lt;br /&gt;
 	VendingMachine() {&lt;br /&gt;
 		this-&amp;amp;gt;money = 0;   &lt;br /&gt;
 		&lt;br /&gt;
 		string drinkNames[] = {&amp;quot;coke&amp;quot;, &amp;quot;juice&amp;quot;, &amp;quot;tea&amp;quot;, &amp;quot;cofee&amp;quot;, &amp;quot;milk&amp;quot;};   &lt;br /&gt;
 		int price[] = {400, 600, 500, 450, 350};   &lt;br /&gt;
 		int defaultAmount = 10;&lt;br /&gt;
 		int TOTAL_DRINK_TYPE = 5;&lt;br /&gt;
 &lt;br /&gt;
 		int validMoneyList[] = {10, 50, 100, 500, 1000};   &lt;br /&gt;
 		int TOTAL_MONEY_TYPE = 5;&lt;br /&gt;
 &lt;br /&gt;
 		Drink* drink;&lt;br /&gt;
 		for (int drinkIndex=0; drinkIndex&amp;amp;lt;TOTAL_DRINK_TYPE; drinkIndex++) {   &lt;br /&gt;
 			drink = new Drink(drinkNames[drinkIndex], price[drinkIndex], defaultAmount);&lt;br /&gt;
 			registerDrink (drink);&lt;br /&gt;
 		}   &lt;br /&gt;
 		for (int moneyIndex=0; moneyIndex&amp;amp;lt;TOTAL_MONEY_TYPE; moneyIndex++) {&lt;br /&gt;
 			registerMoneyType (validMoneyList[moneyIndex]);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	~VendingMachine () {&lt;br /&gt;
 		for (int i=0; i&amp;amp;lt; drinks.size(); i++) {&lt;br /&gt;
 			delete drinks[i];&lt;br /&gt;
 		}&lt;br /&gt;
 		drinks.clear();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	void registerMoneyType (int moneyType) {&lt;br /&gt;
 		validMoney.push_back(moneyType);	&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	bool isValidDrinkIndex (int drinkIndex) {&lt;br /&gt;
 		return (drinkIndex&amp;amp;gt;=0 &amp;amp;amp;&amp;amp;amp; drinkIndex &amp;amp;lt;5);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	void chargeDrink (int drinkIndex, int amount) {&lt;br /&gt;
 		drinks[drinkIndex]-&amp;amp;gt;amount += amount;   &lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	vector&amp;amp;lt;int&amp;amp;gt; getValidMoneyTypes(void) {&lt;br /&gt;
 		return this-&amp;amp;gt;validMoney;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	bool VendingMachine::isBuyable(int drinkId) {&lt;br /&gt;
 		return ((getMoney() - drinks[drinkId]-&amp;amp;gt;price &amp;amp;gt;= 0) &amp;amp;amp;&amp;amp;amp; &lt;br /&gt;
 			(drinks[drinkId]-&amp;amp;gt;amount &amp;amp;gt;= 1));&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	vector&amp;amp;lt;Drink*&amp;amp;gt; getRegisteredDrinks () {&lt;br /&gt;
 		return this-&amp;amp;gt;drinks;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	void VendingMachine::buy (int drinkId) {&lt;br /&gt;
 		drinks[drinkId]-&amp;amp;gt;amount--;   &lt;br /&gt;
 		chargeMoney (drinks[drinkId]-&amp;amp;gt;price);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	void registerDrink (Drink* drink) {&lt;br /&gt;
 		drinks.push_back(drink);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	bool isValidMoneyType (int money) {   &lt;br /&gt;
 		for (int i=0; i&amp;amp;lt;validMoney.size();i++) {&lt;br /&gt;
 			if (validMoney[i] == money)&lt;br /&gt;
 				return true;&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		return false;&lt;br /&gt;
 	}   &lt;br /&gt;
 	&lt;br /&gt;
 	int takeBackMoney()   &lt;br /&gt;
 	{  &lt;br /&gt;
 		int takeBackMoney = this-&amp;amp;gt;money;&lt;br /&gt;
 		this-&amp;amp;gt;money = 0;   &lt;br /&gt;
 		return takeBackMoney;&lt;br /&gt;
 	}   &lt;br /&gt;
 	&lt;br /&gt;
 	void insertMoney (int money) {&lt;br /&gt;
 		this-&amp;amp;gt;money += money;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	void chargeMoney (int drinkPrice) {&lt;br /&gt;
 		this-&amp;amp;gt;money -= drinkPrice;   &lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	int getMoney () {&lt;br /&gt;
 		return money;&lt;br /&gt;
 	}&lt;br /&gt;
 };   &lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 main.cpp&lt;br /&gt;
 #include &amp;quot;VendingMachine.h&amp;quot;&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;   &lt;br /&gt;
 #include &amp;amp;lt;map&amp;amp;gt;&lt;br /&gt;
 using namespace std;   &lt;br /&gt;
 &lt;br /&gt;
 enum {   &lt;br /&gt;
 	MENU_ENDCODE = 0,   &lt;br /&gt;
 	MENU_START = 0,   &lt;br /&gt;
 	MENU_GET_MONEY,   &lt;br /&gt;
 	MENU_BUY,   &lt;br /&gt;
 	MENU_TAKEBACK_MONEY,   &lt;br /&gt;
 	MENU_INSERT_DRINK,   &lt;br /&gt;
 	MENU_END = MENU_INSERT_DRINK   &lt;br /&gt;
 };   &lt;br /&gt;
 &lt;br /&gt;
 typedef void(*Func)(VendingMachine&amp;amp;amp;);   &lt;br /&gt;
 &lt;br /&gt;
 void InsertMoney(VendingMachine&amp;amp;amp; vendingMachine);   &lt;br /&gt;
 void Buy(VendingMachine&amp;amp;amp; vendingMachine);   &lt;br /&gt;
 void TakeBackMoneyMenu(VendingMachine&amp;amp;amp; vendingMachine);   &lt;br /&gt;
 void InsertDrink(VendingMachine&amp;amp;amp; vendingMachine);   &lt;br /&gt;
 void EndMachine(VendingMachine&amp;amp;amp; vendingMachine);   &lt;br /&gt;
 &lt;br /&gt;
 void PrintErrorMessage ();   &lt;br /&gt;
 void PrintErrorInvalidCoinMessage (VendingMachine&amp;amp;amp; vendingMachine);  &lt;br /&gt;
 void PrintInsertCoinMenu();  &lt;br /&gt;
 void PrintCurrentMoney (int money);  &lt;br /&gt;
 void PrintBuyMenu (int money);  &lt;br /&gt;
 void PrintCurrentDrinkStatus ();  &lt;br /&gt;
 &lt;br /&gt;
 void PrintErrorInvalidCoinMessage (VendingMachine&amp;amp;amp; vendingMachine) {   &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. &amp;quot;;   &lt;br /&gt;
 	vector&amp;amp;lt;int&amp;amp;gt; validMoney = vendingMachine.getValidMoneyTypes();&lt;br /&gt;
 &lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;validMoney.size()-1;i++)  &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; validMoney[i] &amp;amp;lt;&amp;amp;lt; &amp;quot;,&amp;quot;;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; validMoney[i] &amp;amp;lt;&amp;amp;lt; &amp;quot;만 가능합니다. 다시 시작해주세요\n&amp;quot;;   &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 void PrintCurrentMoney (int money) {   &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; money &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 넣었습니다\n&amp;quot;;    &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 void PrintBuyMenu (VendingMachine&amp;amp;amp; vendingMachine) {  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수\t\t가격\t수량\n&amp;quot;;   &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;------------------------------------\n&amp;quot;;   &lt;br /&gt;
 &lt;br /&gt;
 	vector &amp;amp;lt;Drink*&amp;amp;gt; drinks = vendingMachine.getRegisteredDrinks();&lt;br /&gt;
 	&lt;br /&gt;
 	for(int drinkIndex = 0 ; drinkIndex &amp;amp;lt; drinks.size() ; drinkIndex++)   {&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; drinkIndex &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot;    &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; drinks[drinkIndex]-&amp;amp;gt;name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t\t&amp;quot;   &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; drinks[drinkIndex]-&amp;amp;gt;price &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot;   &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; drinks[drinkIndex]-&amp;amp;gt;amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;   &lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	PrintCurrentMoney (vendingMachine.getMoney());&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;원하는 음료수를 선택하세요 : &amp;quot;;   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void Buy(VendingMachine&amp;amp;amp; vendingMachine)   &lt;br /&gt;
 {   &lt;br /&gt;
 	PrintBuyMenu (vendingMachine);  &lt;br /&gt;
 &lt;br /&gt;
 	int drinkId;&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; drinkId;   &lt;br /&gt;
 &lt;br /&gt;
 	if(vendingMachine.isBuyable(drinkId)) {   &lt;br /&gt;
 		vendingMachine.buy (drinkId);&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; vendingMachine.getMoney() &amp;amp;lt;&amp;amp;lt; &amp;quot;원이 남았어요\n&amp;quot;;   &lt;br /&gt;
 	}   &lt;br /&gt;
 	else   &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잔액이 부족하거나 수량이 부족해요\n&amp;quot;;   &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 void TakeBackMoney (VendingMachine&amp;amp;amp; vendingMachine) {&lt;br /&gt;
 	int takeBackMoney = vendingMachine.takeBackMoney ();&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;거스름돈&amp;quot; &amp;amp;lt;&amp;amp;lt; takeBackMoney &amp;amp;lt;&amp;amp;lt; &amp;quot;원을 돌려드립니다\n&amp;quot;;   &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void PrintCurrentDrinkStatus (VendingMachine&amp;amp;amp; vendingMachine) {  &lt;br /&gt;
 	vector&amp;amp;lt;Drink*&amp;amp;gt; drinks = vendingMachine.getRegisteredDrinks();&lt;br /&gt;
 &lt;br /&gt;
 	for(int drinkIndex = 0 ; drinkIndex &amp;amp;lt; drinks.size() ; drinkIndex++)   &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; drinkIndex &amp;amp;lt;&amp;amp;lt; &amp;quot;.&amp;quot;  &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; drinks[drinkIndex]-&amp;amp;gt;name &amp;amp;lt;&amp;amp;lt; &amp;quot;\t&amp;quot;  &lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt; drinks[drinkIndex]-&amp;amp;gt;amount &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void PrintErrorMessage ()   &lt;br /&gt;
 {   &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;잘못된 메뉴 선택입니다. 메뉴를 다시 입력해주세요\n&amp;quot;;   &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 void InsertMoney(VendingMachine&amp;amp;amp; vendingMachine)    &lt;br /&gt;
 {    &lt;br /&gt;
 	int money = 0;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;돈을 넣으세요. &amp;quot;;   &lt;br /&gt;
 	vector&amp;amp;lt;int&amp;amp;gt; validMoney = vendingMachine.getValidMoneyTypes();&lt;br /&gt;
 &lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;validMoney.size()-1;i++)  &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; validMoney[i] &amp;amp;lt;&amp;amp;lt; &amp;quot;,&amp;quot; ;  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; validMoney[i] &amp;amp;lt;&amp;amp;lt; &amp;quot;만 가능 : &amp;quot;;   &lt;br /&gt;
 &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; money; &lt;br /&gt;
 	&lt;br /&gt;
 	if (vendingMachine.isValidMoneyType (money)) {&lt;br /&gt;
 		vendingMachine.insertMoney (money);&lt;br /&gt;
 		PrintCurrentMoney (vendingMachine.getMoney ());   &lt;br /&gt;
 	}   &lt;br /&gt;
 	else    &lt;br /&gt;
 		PrintErrorInvalidCoinMessage (vendingMachine);   &lt;br /&gt;
 }    &lt;br /&gt;
 &lt;br /&gt;
 void InsertDrink(VendingMachine&amp;amp;amp; vendingMachine)   &lt;br /&gt;
 {   &lt;br /&gt;
 	int selectDrink;  &lt;br /&gt;
 	int insertAmount;  &lt;br /&gt;
 	&lt;br /&gt;
 	PrintCurrentDrinkStatus (vendingMachine);  &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수를 선택하세요 : &amp;quot;;   &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; selectDrink;   &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;채우길 원하는 음료수 수량을 입력해주세요 : &amp;quot;;   &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; insertAmount;   &lt;br /&gt;
 	&lt;br /&gt;
 	if (vendingMachine.isValidDrinkIndex (selectDrink)) {&lt;br /&gt;
 		vendingMachine.chargeDrink (selectDrink, insertAmount);&lt;br /&gt;
 &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;음료수를 채웠습니다\n&amp;quot;;   &lt;br /&gt;
 	}&lt;br /&gt;
 	PrintCurrentDrinkStatus (vendingMachine);  &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 void EndMachine(VendingMachine&amp;amp;amp; vendingMachine)   &lt;br /&gt;
 {   &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;자판기를 종료합니다!!\n\n&amp;quot;;    &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 bool isEndMenu (int choice) {   &lt;br /&gt;
 	return choice != MENU_ENDCODE;   &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 bool isValidMenu (int choice) {   &lt;br /&gt;
 	return choice &amp;amp;gt;= MENU_START &amp;amp;amp;&amp;amp;amp; choice &amp;amp;lt;= MENU_END;   &lt;br /&gt;
 }   &lt;br /&gt;
 &lt;br /&gt;
 int InputMainMenu () {&lt;br /&gt;
 	int choice = -1;&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n자판기 입니다\n&amp;quot; &lt;br /&gt;
 		 &amp;amp;lt;&amp;amp;lt; &amp;quot;1.돈을 넣는다\n&amp;quot;&lt;br /&gt;
 		 &amp;amp;lt;&amp;amp;lt; &amp;quot;2.물건을 산다\n&amp;quot;   &lt;br /&gt;
 		 &amp;amp;lt;&amp;amp;lt; &amp;quot;3.돈을 거슬러 받는다\n&amp;quot; &lt;br /&gt;
 		 &amp;amp;lt;&amp;amp;lt; &amp;quot;4.음료수를 채운다\n&amp;quot; &lt;br /&gt;
 		 &amp;amp;lt;&amp;amp;lt; &amp;quot;0.종료한다\n&amp;quot; &lt;br /&gt;
 		 &amp;amp;lt;&amp;amp;lt; &amp;quot;메뉴를 선택하세요 : &amp;quot;;   &lt;br /&gt;
 &lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; choice;&lt;br /&gt;
 	return choice;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()   &lt;br /&gt;
 {   &lt;br /&gt;
 	VendingMachine vendingMachine;   &lt;br /&gt;
 	int choice = -1;&lt;br /&gt;
 &lt;br /&gt;
 	int  menuList[] = { MENU_GET_MONEY, MENU_BUY, MENU_TAKEBACK_MONEY, MENU_INSERT_DRINK, MENU_ENDCODE};&lt;br /&gt;
 	Func funcList[] = { InsertMoney, Buy, TakeBackMoney, InsertDrink, EndMachine };&lt;br /&gt;
 &lt;br /&gt;
 	map&amp;amp;lt;int, Func&amp;amp;gt; menuTable;&lt;br /&gt;
 &lt;br /&gt;
 	for (int menuIndex=0; menuIndex&amp;amp;lt;5; menuIndex++) {&lt;br /&gt;
 		menuTable[menuList[menuIndex]] = funcList[menuIndex];&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	while (isEndMenu (choice)) {&lt;br /&gt;
 		choice = InputMainMenu ();&lt;br /&gt;
 		if (isValidMenu (choice)) {&lt;br /&gt;
 			(*menuTable[choice])(vendingMachine);&lt;br /&gt;
 		}&lt;br /&gt;
 		else    &lt;br /&gt;
 			PrintErrorMessage ();   &lt;br /&gt;
 	}   &lt;br /&gt;
 &lt;br /&gt;
 	return 0;   &lt;br /&gt;
 }&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>