= 소스 = {{{~cpp #include <iostream> using namespace std; #include <string> //ìžíŒê¸° í´ëž˜ìŠ¤ class VendingMachine { private: int _money; int _temp_money; int _select_money, _select_drink, _insert_amount; struct drink { char * name; int price, amount; }; drink s_drink[5]; int _max_num; public: VendingMachine(); int showMenu(); void get_money(); void buy(); void takeBack_money(); void insertDrink(); }; int VendingMachine::showMenu() { int choice; cout << "\nìžíŒê¸° 입니다\n"; cout << "1.ëˆì„ 넣는디\n"; cout << "2.ë¬¼ê±´ì„ ì‚°ë‹¤\n"; cout << "3.ëˆì„ ê±°ìˆ ëŸ¬ 받는다\n"; cout << "4.ìŒë£Œìˆ˜ë¥¼ 채운다\n"; cout << "0.종료한다\n"; cout << "메뉴를 ì„ íƒí•˜ì„¸ìš” : "; cin >> choice; return choice; } //ìžíŒê¸°ì˜ 메뉴를 초기화한다 VendingMachine::VendingMachine() { _money = _temp_money = 0; _max_num = 5; char * drink_name[] = {"coke", "juice", "tea" , "cofee", "milk"}; int price[] = {400, 600, 500, 450, 350}; for(int i = 0 ; i < _max_num ; i++) { s_drink[i].name = drink_name[i]; s_drink[i].price = price[i]; s_drink[i].amount = 10; } } //ì†ë‹˜ì´ ëˆì„ ìžíŒê¸°ì— 넣는다 void VendingMachine::get_money() { cout << "ëˆì„ 넣으세요. 10, 50, 100, 500, 1000만 가능 : "; cin >> _temp_money; if(_temp_money == 10 || _temp_money == 50 || _temp_money == 100 || _temp_money == 500 || _temp_money == 1000) _money = _money + _temp_money; else cout << "10, 50, 100, 500, 1000만 가능합니다. 다시 시작해주세요\n"; cout << _money << "ì›ì„ 넣었습니다\n"; } //ì†ë‹˜ì´ ë¬¼ê±´ì„ ì‚°ë‹¤ void VendingMachine::buy() { cout << "ìŒë£Œìˆ˜\t\t가격\t수량\n"; cout << "------------------------------------\n"; for(int i = 0 ; i < _max_num ; i++) cout << i + 1 << "." << s_drink[i].name << "\t\t" << s_drink[i].price << "\t" << s_drink[i].amount << "\n"; cout << "\n현재 " << _money << "ì›ì´ 있어요\n"; cout << "ì›í•˜ëŠ” ìŒë£Œìˆ˜ë¥¼ ì„ íƒí•˜ì„¸ìš” : "; cin >> _select_drink; if((_money - s_drink[_select_drink - 1].price) >= 0 && s_drink[_select_drink - 1].amount >= 1) { s_drink[_select_drink - 1].amount--; _money = _money - s_drink[_select_drink - 1].price; } else cout << "ìž”ì•¡ì´ ë¶€ì¡±í•˜ê±°ë‚˜ ìˆ˜ëŸ‰ì´ ë¶€ì¡±í•´ìš”\n"; cout << _money << "ì›ì´ 남았어요\n"; } //ì†ë‹˜ì˜ 거스름ëˆì„ 내어준다 void VendingMachine::takeBack_money() { cout << "거스름ëˆ" << _money << "ì›ì„ ëŒë ¤ë“œë¦½ë‹ˆë‹¤\n"; _money = 0; } //ìŒë£Œìˆ˜ë¥¼ 채운다 void VendingMachine::insertDrink() { for(int i = 0 ; i < _max_num ; i++) cout << i + 1 << "." << s_drink[i].name << "\t" << s_drink[i].amount << "\n"; cout << "채우길 ì›í•˜ëŠ” ìŒë£Œìˆ˜ë¥¼ ì„ íƒí•˜ì„¸ìš” : "; cin >> _select_drink; cout << "채우길 ì›í•˜ëŠ” ìŒë£Œìˆ˜ ìˆ˜ëŸ‰ì„ ìž…ë ¥í•´ì£¼ì„¸ìš” : "; cin >> _insert_amount; s_drink[_select_drink - 1].amount += _insert_amount; cout << "ìŒë£Œìˆ˜ë¥¼ ì±„ì› ìŠµë‹ˆë‹¤\n"; for(i = 0 ; i < _max_num ; i++) cout << i + 1 << "." << s_drink[i].name << "\t" << s_drink[i].amount << "\n"; } int main() { VendingMachine VendingMachine; int choice = VendingMachine.showMenu(); while(choice != 0) { if( choice >= 0 || choice <= 4) { switch(choice) { case 1: VendingMachine.get_money(); break; case 2: VendingMachine.buy(); break; case 3: VendingMachine.takeBack_money(); break; case 4: VendingMachine.insertDrink(); break; case 0: cout << "ìžíŒê¸°ë¥¼ 종료합니다!!\n\n"; break; } } else cout << "ìž˜ëª»ëœ ìž…ë ¥ìž…ë‹ˆë‹¤. 다시 ìž…ë ¥í•´ì£¼ì„¸ìš” : "; choice = VendingMachine.showMenu(); } return 0; } }}} ì½”ë“œì˜ ê²½ìš° 가장 간단한 í‰ê°€ 기준으로 ë‘가지를 둔다면, * 코드를 ì½ê¸° 편한가. - 외부로 ë³´ì´ëŠ” public ë©”ì†Œë“œì˜ ì´ë¦„ì— ëŒ€í•´ 'how' ê°€ ì•„ë‹Œ 'what' ì´ í‘œí˜„ë˜ì–´ì•¼ í• ê²ë‹ˆë‹¤. í´ëž˜ìŠ¤ëŠ” 보통 'ì´ìš©ë˜ì–´ì§€ëŠ” 모습' 으로 ì´ìš©ë˜ë¯€ë¡œ, ì–´ë–¤ ì•Œê³ ë¦¬ì¦˜ì„ ì“°ëŠëƒê°€ 메소드로 표현ë˜ëŠ”게 ì•„ë‹ˆë¼ 'ë¬´ì—‡ì„ í• ê²ƒì¸ê°€' ê°€ 표현ë˜ì–´ì•¼ ê² ì£ . * ì½”ë“œì˜ ì¤‘ë³µì´ ì–¼ë§ˆë‚˜ ì ì€ê°€ - 코드 ì¤‘ë³µì´ ë§Žì„ ìˆ˜ë¡, 코드 하나가 잘못ë˜ë©´, 나머지 ì¤‘ë³µì½”ë“œë“¤ë„ ë‹¤ ê³ ì³ì¤˜ì•¼ 합니다. Copy & Paste 를 하는 것과 함수/메소드로 추출한 ê²ƒì˜ ì°¨ì´ê°€ ë˜ê² ì£ . * ë‘가지 기준 í•˜ì— ì½”ë“œë¥¼ ìˆ˜ì •í•´ë³´ë©´, ë” ì¢‹ì€ ë””ìžì¸ì˜ 코드를 ìž‘ì„±í• ìˆ˜ 있습니다. --["1002"] * ì œê°€ 대충 ê³ ì³ë³´ì•˜ìŠµë‹ˆë‹¤ -- ìž¬ë™ ---- See Also ["CppStudy_2002_2"] , ["VendingMachine/세연/재ë™"] , ["VendingMachine/세연/1002"] ----