U E D R , A S I H C RSS

Programming Pearls/Column3


1. Data Structures Progams

  • 주둜 Refactoringκ³Ό Table Driven Programming을 μ„λͺ…ν•˜κ³  μžˆλ‹€.

1.1. A survey program

  • λ³„λ‘œ 볼건 μ—†κ³ ... 아무도 ν•˜μ§€ μ•Šμ„ 상황을 예둜 듀어놓은 것 κ°™λ‹€. μ™ λ§ŒνΌ ν”„λ‘œκ·Έλž¨ 배운 μ‚¬λžŒμ΄λΌλ©΄ λ‹Ήμ—°νžˆ λ°°μ—΄λ‘œ μ²˜λ¦¬ν•  것을 λͺ‡ 백개의 λ³€μˆ˜λ‘œ μ²˜λ¦¬ν•˜λŠ” 상황을 보여주고 μžˆλ‹€. κ·ΈλŸ¬λ©΄μ„œ ν•˜λŠ” 말 : λ§Žμ€ λ³€μˆ˜λΌ μ“°κ³  있으면 κ΄€λ ¨λ˜λŠ” κ²ƒμœΌλ‘œ λ¬Άμ–΄μ„œ λ°°μ—΄λ‘œ μ²˜λ¦¬ν•˜λΌ. 이게 μ£Όμ œλ‹€.

1.2. Form-Letter Programming

  • Column1의 μ΄μƒν•œ μ†ŒνŠΈμ™€ λ”λΆˆμ–΄, μ§€κΈˆκΉŒμ§€ λ³Έ λ‚΄μš©μ€‘μ—μ„œ κ½€ μ‹ μ„ ν•œ λ‚΄μš©μ΄λ‹€. μ™œ μ΄λ ‡κ²Œ ν•˜λŠ”μ§€λŠ” 잘 λͺ¨λ₯΄κ² μ§€λ§Œ... μ—­μ‹œ ν™•μž₯성을 μœ„ν•œ 것 κ°™λ‹€.
  • 예제 : μ–΄λŠ μ‚¬μ΄νŠΈμ— λ‘œκ·ΈμΈν•˜λ©΄ DBμ—μ„œ μ‚¬μš©μž λ°μ΄ν„°λΌ κΈμ–΄μ™€μ„œ 보여μ€λ‹€. 이것은 책에 μžˆλŠ” 예제고, 이것을 κ°„λ‹¨νžˆ C++, 그리고 파일 μž…λ ₯으둜 λ³€ν˜•μ„ 해보면,
    • 좜λ ₯ 양식 : λ³€ν•˜λŠ” 것은 Kang-In-Su, Computer, Seoul, Su-saek이닀.

  • ~cpp 
    Hello, Kang-In-Su.
    We'll send a Computer to you.
    Address : Seoul, Su-saek
     

    ~cpp 
    // 일반적으둜 λŒ€λΆ€λΆ„ μ΄λ ‡κ²Œ ν•  것이닀.
    
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string name, good, dong, city;
    	ifstream fin("data.dat");
    	getline(fin, name);
    	getline(fin, good);
    	getline(fin, city);
    	getline(fin, dong);
    	cout << "Hello, " << name << ".\nWe'll send a " << good << " to you. \nAddress : "
    		<< city << ", " << dong << endl;
    	return 0;
    } 
    
    // Programming Pearlsμ—μ„œ μ œμ‹œν•˜λŠ” 방법은
    
    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    	string data[4];
    	string scheme = "Hello, $0. \nWe'll send a $1 to you. \nAddress : $2, $3\n";
    
    	ifstream fin("data.dat"); 
    	for(int i = 0 ; i < 4 ; ++i)
    		getline(fin, data[i]);
    	
    	int index = -1;
    	while(1) {
    		++index;
    		if(scheme[index] != '$')
    			cout << scheme[index];
    		else {
    			++index;
    			if(scheme[index] == '$')
    				cout << '$';
    			else if(scheme[index] >= '0' && scheme[index] <= '3')
    				cout << data[scheme[index] - 48];
    			else {
    				cout << "scheme error." << endl;
    				break;
    			}
    		}
    		if(scheme[index] == '\0')
    			break;
    	}
    
    	return 0;
    }
     

  • μ΄λ ‡κ²Œ 생겼닀. ꡉμž₯히 ν•΄κ΄΄λ§μΈ‘ν•˜λ‹€. 아직 μ΄λ ‡κ²Œ ν•˜λŠ” 것에 λŒ€ν•œ μž₯점은 잘 λͺ¨λ₯΄κ² λ‹€.

1.3. 3.3 An Array of Examples

  • 우리의 λ¦¬νŒ©ν† λ§μ΄λ‹€. μ—„μ²­λ‚œ 쀑볡이 μžˆλŠ” μ˜ˆμ œλΌ λ³΄μž. 이건 C++둜 ν•˜κΈ°κ°€ μ€ κ·ΈλŸ¬λ‹ˆ, 책에 주어진 λŒ€λ‘œ VBλΌ μ˜ˆλ‘œ λ“€μ–΄λ³΄μž. λ©”λ‰΄μ˜ μ•„μ΄ν…œμ΄ 10κ°œκ°€ μžˆλ‹€. ν•˜λ‚˜λΌ ν΄λ¦­ν• λ•Œλ§ˆλ‹€ κ·Έ μ•„μ΄ν…œμ— μ²΄ν¬λΌ ν•˜κ³  μ‹Άλ‹€. 쀑볡 짱!인 예제둜 λ‹€μŒκ³Ό 같은 μ˜ˆμ œκ°€ μžˆμ„μˆ˜ μžˆλ‹€.
    ~cpp 
    sub menuitem0_click()
    	menuitem0.checked = 1
    	menuitem1.checked = 0
    	menuitem2.checked = 0
    	menuitem3.checked = 0
    	menuitem4.checked = 0
    	menuitem5.checked = 0
    	menuitem6.checked = 0
    	menuitem7.checked = 0
    	menuitem8.checked = 0
    	menuitem9.checked = 0
    
    sub menuitem1_click()
    	menuitem0.checked = 0
    	menuitem1.checked = 1
    	menuitem2.checked = 0
    	menuitem3.checked = 0
    	menuitem4.checked = 0
    	menuitem5.checked = 0
    	menuitem6.checked = 0
    	menuitem7.checked = 0
    	menuitem8.checked = 0
    	menuitem9.checked = 0
    
    
    sub menuitem2_click()
    ...
    ...
     
  • λ”± 보면 μ•Œκ² μ§€λ§Œ, ꡉμž₯히 μš°μšΈν•˜λ‹€. μ €λŸ°κ²Œ 10번 λ°˜λ³΅λ˜λŠ” 것이닀. μ“°μž˜λ°κΈ° μ—†λŠ” μ½”λ“œκ°€ 무렀 110 μ„μ΄λ‚˜ λœλ‹€. ν•˜μ§€λ§Œ λ¦¬νŒ©ν† λ§μ„ κ³΅λΆ€ν–ˆλ‹€λ©΄ μ‰½κ²Œ λΉΌλ‚Όμˆ˜κ°€ μžˆμ„ 것이닀. κ·Έ λ°©λ²•μœΌλ‘œ VBμ—μ„œλŠ” 각각의 메뉴 μ•„μ΄ν…œμ„ λ°°μ—΄λ‘œ λ§Œλ“€μˆ˜κ°€ μžˆλ‹€. λ°°μ—΄λ‘œ λ§Œλ“  λ‹€μŒ λ©”μ†Œλ“œ μΆ”μΆœμ„ μ΄μš©ν•˜λ©΄, (μ˜ˆμ œλŠ” C++둜 λ‹€μ‹œ λ°”κΎΌλ‹€.--; λΉ„λ²  문법을 잘 λͺ°λΌμ„œ.)
    ~cpp 
    const int NUM_ITEMS = 10;
    void menuitem_click(int choice) {
    	for(int i = 0 ; i < NUM_ITEMS ; ++i)
    		menuitem[i].checked = false;			
    	menuitem[choice] = true;
    }
    
    void menuitem0_click()
    {
    	menuitem_click(0);
    }
    
    void menuitem0_click()
    {
    	menuitem_click(1);
    }
    ...
    ...
     
  • 이런 μ‹μœΌλ‘œ κ°€λ©΄ λœλ‹€λŠ” 것이닀. κ°„λ‹¨ν•œ κ²ƒμ΄λ‹ˆ κ·Έλƒ₯ λ„˜μ–΄κ°€μž.

1.4. Structuring Data

  • 잘 κ΅¬μ‘°ν™”λœ λ°μ΄ν„°μ˜ 의λΈλŠ” 계속 λ³€μ²œλ˜μ–΄ μ™”λ‹€.
  • 잘 지어진 λ³€μˆ˜ 이름 -> ν•¨μˆ˜μ™€ λ°μ΄ν„°μ˜ 뢄리 -> OOP

1.5. Powerful Tools for Specialized Data

  • ν”„λ‘œκ·Έλž˜λ°μ„ μ‰½κ²Œ ν•˜κΈ° μœ„ν•΄, νŽΈλ¦¬ν•œ 도ꡬ(HTML, Name-Value Pairs, μŠ€ν”„λ ˆλ“œμ‹œνŠΈ, 데이터 베이슀, λ“±λ“±)λΌ κ°–μΆ”μžλŠ” 것이닀. λ³„λ‘œ λ³Ό κ±° μ—†λ‹€.

1.6. Principles

  • ν”„λ‘œκ·Έλž¨μ„ μ§€λ•Œ 생각도 μ•ˆ 해보고 λ€λΉ„λŠ” 짓은 ν•˜μ§€ 말자. μž‘κ²Œ μ§€μˆ˜λ„ μžˆλŠ” ν”„λ‘œκ·Έλž¨μ„ 크게 μ§œλ²„λ¦¬λŠ” 일이 생길지도 λͺ¨λ₯Έλ‹€.
  • 자료ꡬ쑰의 μ€‘μš”μ„±μ„ κ°•μ‘°ν•˜κ³  μžˆλ‹€.
    μžλ£Œκ΅¬μ‘°λŠ” μ†Œν”„νŠΈμ›¨μ–΄λΌ λ§Œλ“ λ‹€ : 큰 ν”„λ‘œκ·Έλž¨μ„ μž‘μ€ ν”„λ‘œκ·Έλž¨μœΌλ‘œ μ„μ—¬μ€λ‹€.
    μžλ£Œκ΅¬μ‘°λΌ μž˜μ§œλ©΄, μ‹œκ°„, κ³΅κ°„μ˜ κ°μ†Œμ™€ 이식 κ°€λŠ₯ν•¨μ˜ 정도와 μœ μ§€λ³΄μˆ˜μ˜ μΈ‘λ©΄μ—μ„œ 이득을 λ³Ό 수 μžˆλ‹€.
  • μ΄λŸ¬λ©΄μ„œ 우리의 "The Mythical Man Month"의 ꡬ절이 λ‚˜μ˜¨λ‹€.
    ν‘œν˜„μ€ ν”„λ‘œκ·Έλž˜λ°μ˜ λ³Έμ§ˆμ΄λ‹€.
  • 전체적인 μš”μ•½μ„ ν•˜λ©΄
    • λ°˜λ³΅λ˜λŠ” μ½”λ“œλŠ” λ°°μ—΄λ‘œ λ°˜λ“  λ‹€μŒ λ£¨ν”„λΌ λŒλ¦¬μž
    • λ³΅μž‘ν•œ κ΅¬μ‘°λŠ” μΊ‘μŠν™”λΌ ν•˜μž -> 클래슀
    • κ°€λŠ₯ν•˜λ‹€λ©΄ μ§„λ³΄λœ νˆ΄μ„ μ‚¬μš©ν•˜μž.
    • 이 컬럼의 주제 : λ°μ΄ν„°λŠ” λ³΅μž‘ν•œ μ½”λ“œλΌ μ μ ˆν•œ 자료 ꡬ쑰둜 λ°”κΏˆμœΌλ‘œμ¨, ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•œλ‹€.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:03
Processing time 0.0249 sec