E D R , A S I H C RSS

More EffectiveC++

ANSI C++에 λŒ€ν•œ 약간은 수μ€μžˆλŠ” λ‚΄μš©μ„ λ‹€λ£¨λŠ” μ±…. EffectiveC++ 의 좔가적인 λ‚΄μš©μ΄λ‹€.

1. μ†Œκ°œ

- wowbook 인용

  • ANSI C++에 λŒ€ν•œ 제반적인 λ‚΄μš©μ„ κΉ”λ”ν•œ ν•„μ²΄λ‘œ μ‰½κ²Œ μ‰½κ²Œ 닀루고 μžˆλ‹€. λͺ…ν™•ν•œ κ°œλ… μ„λͺ…이 돗보인닀. ν”„λ‘œκ·Έλž¨κ³Ό λ””μžμΈ λŠ₯λ ₯을 ν–₯μƒμ‹œν‚€λŠ” 35개의 방법이 μ œμ‹œλ˜μ–΄ μžˆλ‹€. 배치, 가상 μƒμ„±μž, 포인터 레퍼런슀 μΉ΄μš΄νŒ…, ν”„λ½μ‹œ 클래슀, 더블 λ””μŠ€νŒ¨μΉ˜μ™€ 같은 C++의 보닀 μ„Έλ ¨λœ κΈ°μˆ μ— λŒ€ν•΄ μ„λͺ…ν•˜κ³ μžˆλ‹€.
  • 이 μ±…μ˜ μ£Όμš” λ‚΄μš©

~cpp 
- 포인터와 λ ˆνΌλŸ°μŠ€μ™€μ˜ 차이 
- C++ μŠ€νƒ€μΌ 캐슀트 
- λΆˆν•„μš”ν•œ λ””ν΄νŠΈ κ΅¬μ„±μžλŠ” μ œμ™Έ 
- μ‚¬μš©μž μ •μ˜μ˜ λ³€ν™˜ ν•¨μˆ˜ μ‚¬μš© 
- 증가 μ—°μ‚°μžμ™€ κ°μ†Œ μ—°μ‚°μžμ˜ μ „μœ„μ™€ ν›„μœ„ ν˜•νƒœμ˜ ꡬ별 
- new와 delete의 μ˜λΈ μ°¨μ΄ 
- μžμ› λ‚­λΉ„λΌ λ§‰κΈ°μœ„ν•œ μ†Œλ©Έμž μ‚¬μš© 
- μƒμ„±μžμ˜ μžμ› λ‚­λΉ„λΌ λ§‰μŒ 
- 가상 ν•¨μˆ˜ 호좜과 파라λΈν„° 패슀의 차이 이해 
- λ ˆνΌλŸ°μŠ€λΌ μ΄μš©ν•œ μ˜ˆμ™Έμƒν™© 캐취 
- μ˜ˆμ™Έμƒν™© λͺ…ν™•ν™” μ‚¬μš© 
- μ˜ˆμ™Έμƒν™© 핸듀링 λΉ„μš© 이해 
- 20/80 법칙 
- μ˜ˆμƒλœ 계산 λΉ„μš© μ²­μ‚° 
- μž„μ‹œ 객체의 λ°œμƒ 이해 
- 가상 ν•¨μˆ˜ λΉ„μš©, 닀쀑 κ³„μŠΉ, 가상 베이슀 ν΄λž˜μŠ€μ™€ RTTI 
- ꡬ쑰체 가상화 
- 클래슀 객체수의 μ œν•œ 
- νž™ 베이슀 객체 μš”κ΅¬μ™€ κΈˆμ§€ 
- 슀마트 포인터 
- 레퍼런슀 μΉ΄μš΄νŒ… 
- ν”„λ½μ‹œ 클래슀 
- ν•˜λ‚˜ μ΄μƒμ˜ 객체에 λŒ€ν•œ 가상 ν•¨μˆ˜ 생성 
- ν–₯ν›„ ν”„λ‘œκ·Έλž¨ 
- 리프가 μ—†λŠ” 클래슀 좔상 생성 
- 동일 ν”„λ‘œκ·Έλž¨μƒμ—μ„œ C++κ³Ό C의 κ²°ν•© 

2. Project About That

  • μž‘μ„±μž:λ₯˜μƒλΌ(neocoin)

  • More Effective C++ 의 μš”μ•½
  • λͺ©ν‘œ: 자료둜 이용 ν• μˆ˜ μžˆμ„ μ •λ„μ˜ 정보 전달
  • 진행 일정
    μ‹œμž‘ 2002.01.14 μ•Œλ°” μœ μ§€ 보수둜 μ˜ˆμ •λ³΄λ‹€ 늦게 μ‹œμž‘
    처음 λͺ©ν‘œ 2002.01.31 18μž₯ μ’…λ£Œ
    1μ°¨ μ—°κΈ° 2002.02.15 28μž₯ μ’…λ£Œ
    2μ°¨ μ—°κΈ° 2002.02.28 32μž₯ μ’…λ£Œ
    3μ°¨ μ—°κΈ° 2002.03.08 35μž₯ μ’…λ£Œ
  • . 2002.03.21 μ΅œμ’… 기둝 :
    • μ›μ„œλΌ λ³΄μ„Έμš”. λ³΄μ‹œλ‹€ μ΄μƒν•œ λΆ€λΆ„λ§Œ 같이 생각을.
    • 이 λ¬Έμ„œλŠ” ZeroPage νšŒμ›λ“€μ„ μœ„ν•œ λ‚΄λΆ€ λ¬Έμ„œμž…λ‹ˆλ‹€. νšŒμ› 이외에 μ €μž‘κΆŒ λ¬Έμ œμ— μ†Œμ§€κ°€ λ˜λŠ” λ¬Έμ œμ— κ΄€ν•΄μ„œ μ±…μž„μ„ 질수 μ—†μŠ΅λ‹ˆλ‹€.
    • μ‹œκ°„μ΄ μ—†μœΌλ‹ˆ, μ°¨ν›„ λ¬Έμ„œλΌ λ‹€μ‹œ λ‹€λ“¬λŠ” 것은 2002λ…„ 여름 방학쀑에 ν•  μƒκ°μž…λ‹ˆλ‹€.

2.1. Link

2.1.1. Basic

MoreEffectiveC++/Basic S
  • Item 1: Distinguish between pointers and references. - Pointer와 Referenceꡬ별해라.
  • Item 2: Prefer C++ style casts.- μŠ€νƒ€μΌμ˜ ν˜•λ³€ν™˜μ„ ꢌμž₯ν•œλ‹€.
  • Item 3: Never treat arrays polymorphically - μ ˆλŒ€λ‘œ! 클래슀 κ°„μ˜ λ‹€ν˜•μ„±μ„ ν†΅ν•œ λ°°μ—΄ 취급을 ν•˜μ§€ 말라
  • Item 4: Avoid gratuitous default constructors. - μ•”μ‹œμ μœΌλ‘œ μ œκ³΅λ˜λŠ” κΈ°λ³Έ μƒμ„±μžλΌ ν”Όν•˜λΌ. ν˜Ήμ€ κΈ°λ³Έ μƒμ„±μžμ˜ λͺ¨ν˜Έμ„±μ„ νŒŒμ•…ν•˜λΌ.

2.1.2. Operator

MoreEffectiveC++/Operator S
  • Item 5: Be wary of user-defined conversion functions. - μ‚¬μš©μž μ •μ˜ ν˜•λ³€ν™˜(conversion) ν•¨μˆ˜μ— μ£Όμ˜ν•˜λΌ!
  • Item 6: Distinguish between prefix and postfix forms of increment and decrement operators. - prefix와 postfix둜의 증감 μ—°μ‚°μž κ΅¬λΆ„ν•˜λΌ!
  • Item 7: Never overload &&, ||, or ,. - μ ˆλŒ€λ‘œ! &&, ||, ',' 이 μ—°μ‚°μžλ“€μ„ overload ν•˜μ§€ 말아라
  • Item 8: Understand the differend meanings of new and delete - new와 deleteκ°€ μ“°μž„μ— λ”°λ₯Έ 의λΈλ“€μ˜ μ°¨μ΄λΌ μ΄ν•΄ν•˜λΌ.

2.1.3. Exception

MoreEffectiveC++/Exception, S before 12
  • Item 9: Use destuctors to prevent resource leaks. - μžμ›μ΄ μƒˆλŠ”κ±Έ λ§‰λŠ” νŒŒκ΄΄μžλΌ μ‚¬μš©ν•΄λΌ.
  • Item 10: Prevent resource leaks in constructors. - μƒμ„±μžμ—μ„œ μžμ›μ΄ μ„ΈλŠ”κ±Έ 막아라.
  • Item 11: Prevent exception from leaving destuctors. - 파괴자둜 λΆ€ν„°μ˜ μ˜ˆμ™Έ μ²˜λ¦¬λΌ λ§‰μ•„λΌ.
  • Item 12: Understand how throwing an exception differs from passing a parameter or calling a virtual function
    - 가상 ν•¨μˆ˜ λΆ€λ₯΄κΈ°λ‚˜, 인자 μ „λ‹¬λ‘œ μ²˜λ¦¬μ™€ μ˜ˆμ™Έμ „λ‹¬μ˜ λ°©λ²•μ˜ 차이점을 μ΄ν•΄ν•˜λΌ.
  • Item 13: Catch exception by reference - μ˜ˆμ™ΈλŠ” μ°Έμ‘°(reference)둜 μž‘μ•„λΌ.
  • Item 14: Use exception specifications judiciously. - μ˜ˆμ™ΈλΌ μ‹ μ€‘ν•˜κ²Œ μ‚¬μš©ν•˜λΌ.
  • Item 15: Understand the costs of exception handling. - μ˜ˆμ™Έ 핸듀링에 λŒ€ν•œ λΉ„μš© μ§€λΆˆ λŒ€ν•œ 이해

2.1.4. Efficiency

MoreEffectiveC++/Efficiency, T
  • Item 16: Remember the 80-20 rule. - 80-20 κ·œμΉ™μ„ 기얡해라.
  • Item 17: Consider using lazy evaluation - lazy evaluation의 μ“°μž„μ— λŒ€ν•˜μ—¬ 생각해 보자.
  • Item 18: Amortize the cose of expected computations. - μ˜ˆμƒλ˜λŠ” μ—°μ‚°μ˜ 값을 계산해 두어라.
  • Item 19: Understand the orgin of temporary objects.- μž„μ‹œ κ°μ²΄λ“€μ˜ 기본을 μ΄ν•΄ν•˜μž.
  • Item 20: Facilitate the return value optimization - λ°˜ν™˜λ˜λŠ” 값을 μ΅œμ ν™” ν•˜λΌ
  • Item 21: Overload to avoid implicit type conversions.- μ•”μ‹œμ (implicit) ν˜•λ³€ν™˜μ˜ overloadλΌ ν”Όν•˜λΌ
  • Item 22: Consider using op= instead of stand-alone op.- 혼자 μ“°μ΄λŠ” op(+,-,/) λŒ€μ‹ μ— op=(+=,-=,/=)을 μ“°λŠ”κ±Έ 생각해 봐라.
  • Item 23: Consider alternative libraries. - 라이브러리 ꡐ체에 κ΄€ν•΄μ„œ 생각해 봐라.
  • Item 24: Understand the costs of virtual functions, multiple ingeritance, virtual base classes, and RTTI
    - 가상 ν•¨μˆ˜, 닀쀑 상속, 가상 기초 클래슀, RTTI(μ‹€μ‹œκ°„ ν˜• 검사)에 λŒ€ν•œ λΉ„μš©μ„ μ΄ν•΄ν•˜λΌ

2.1.5. Techniques1of2

MoreEffectiveC++/Techniques1of3, S or T
  • Item 25: Virtualizing constructors and non-member functions. - μƒμ„±μžμ™€ 비멀버 ν•¨μˆ˜λΌ κ°€μƒμœΌλ‘œ λŒμ•„κ°€κ²Œ ν•˜κΈ°.
  • Item 26: Limiting the number of objects of a class - 객체 숫자 μ œν•œν•˜κΈ°.
  • Item 27: Requiring or prohibiting heap-based objects. - Heapμ˜μ—­μ„ μ‚¬μš©ν•˜λŠ” 객체 μš”κ΅¬ν•˜κΈ° or ν”Όν•˜κΈ°.
  • Item 28: Smart pointers - λ˜‘λ˜‘ν•œ 포인터:슀마트 포인터

2.1.6. Techniques2of2

MoreEffectiveC++/Techniques2of3, T
  • Item 29: Reference counting - μ°Έμ‘° μ„ΈκΈ°
  • Item 30: Proxy - λŒ€λ¦¬μž

2.1.7. Techniques2of2

MoreEffectiveC++/Techniques3of3, T
  • Item 31: Making functions virtual with respect to more than one object. - ν•˜λ‚˜ 이상 객체에 λŒ€μ‘ν•˜λŠ” ν•¨μˆ˜λΌ virtual(가상)으둜 λ™μž‘ μ‹œν‚€κΈ°

2.1.8. Miscellany

MoreEffectiveC++/Miscellany T
  • Item 32: Program in the Future tense - λΈλž˜λΌ λŒ€λΉ„ν•˜λŠ” ν”„λ‘œκ·Έλž¨
  • Item 33: Make non-leaf classes abstract. - μœ λ„λœ ν΄λž˜μŠ€κ°€ μ—†λŠ” μƒνƒœμ˜ 클래슀둜 좔상화 ν•˜λΌ.
  • Item 34: Understand how to combine C++ and C in the same program. - 같은 ν”„λ‘œκ·Έλž¨μ—μ„œ C++와 CλΌ ν˜Όν•©ν•˜λŠ” 법 이해해라.
  • Item 35: Familiarize yourself with Β°the language standard. - μ–Έμ–΄ ν‘œμ€μ— μΉœν•΄μ ΈλΌ.

2.1.9. Appendix

MoreEffectiveC++/Appendix : ν•œκΈ€ν™”μ˜ ν•„μš”μ„±μ„ λͺ»λŠλΌλ©°, μœ„ν‚€ν™”λ§Œ μ‹œμΌœλ†“μŒ
  • Recommended Reading
  • An auto_ptr Implementation

2.2. μ„ΈλΈλ‚˜μš© ν•­ν•΄ 지도

  • MoreEffectiveC++/C++이 μ–΄λ ΅λ‹€?

2.3. Log

  1. 2002.02.09 볼수둝 μ ˆμ‹€ν•œ λ‚΄μš© νˆ¬μ„±μ΄ 이닀. Efficiency의 뢀뢄이 κ°€μž₯ μ€‘μš”ν•˜λ‹€κ³  λ½‘μ•˜λŠ”λ°, λ‹€μŒ Technicque νŒŒνŠΈλŠ” EfficiencyλΌ λΉ„μ›ƒκ³  μžˆλ‹€. 각 μž₯λ§ˆλ‹€ 거의 두세배에 λ‹€λΌλŠ” μ–‘κ³Ό λ”λΆˆμ–΄, "C++μ—μ„œ μ•Œκ³  μ‹Άμ—ˆλ˜ 것이 μ—¬κΈ° λ‹€ λͺ¨μ—¬ μžˆκ΅¬λ‚˜" ν•˜λŠ” 생각이 λ“ λ‹€. λ‚΄μš©μ΄ λ„ˆλ¬΄ λ§Žμ•„μ„œ μ–΄μ©”μˆ˜ 없이 λ‹€μ‹œ μš”μ•½ 체제둜 κ°€μ•Ό κ² λ‹€.
  2. 2002.02.15 λ“œλ””μ–΄ 슀마트 ν¬μΈν„°λΌ μ„λͺ…ν• μˆ˜ μžˆλŠ” skill을 νšλ“ν–ˆλ‹€. λ‹€μŒμ€ Reference counting μ„λͺ… skill을 νšλ“ν•΄μ•Ό ν•œλ‹€. Reference counting은 COM기술의 근간이 되고 있으며, κ³Όκ±° Java VMμ—μ„œ Garbage collection을 μˆ˜ν–‰ν• λ•Œ μ‚¬μš©ν–ˆλ‹€κ³  μ•Œκ³  μžˆλ‹€. λ¬Όλ‘  ν˜„μž¬λŠ” Java Garbage Collectorλ‚˜ CLRμ΄λ‚˜ Tracing을 μ·¨ν•˜κ³  μžˆλŠ” κ²ƒμœΌλ‘œ μ•Œκ³  μžˆλ‹€. μ•„. 였늘이 ν”„λ‘œμ νŠΈ λ§ˆμ§€λ§‰ μ‹œμ μœΌλ‘œ μž‘μ€ 날인데, λ„μ €νžˆ λΆˆκ°€λŠ₯ν•˜κ³ , 쀑도 ν¬κΈ°ν•˜κΈ°μ—λŠ” λ’€μ˜ λ‚΄μš©λ“€μ΄ λ„ˆλ¬΄ 맀λ ₯μžˆλ‹€. 칼을 λ½‘μ•˜μœΌλ‹ˆ μ΄λ²ˆλ‹¬ μ•ˆμœΌλ‘œλŠ” 끝μž₯을 λ³Έλ‹€.
  3. 2002.02.17 Reference Counting μ„λͺ… μŠ€ν‚¬ νšλ“. μ΄μ œκΉŒμ§€μ€‘ κ°€μž₯ λ°©λŒ€ν•œ λΆ„λŸ‰μ΄κ³ , μ΄μ±…μ˜ λ‹€λ₯Έ 이름이 More Difficult C++ λΌλŠ” 것에 100% κ³΅κ°ν•˜κ²Œ λ§Œλ“ λ‹€. Techniquesκ°€ λ„ˆλ¬΄ κΈΈμ–΄μ„œ 1of2, 2of2 μ΄λ ‡κ²Œ λ‘˜λ‘œ μͺΌκ° λ‹€. (μ„Έκ°œλ‘œ μͺΌκ°€μ§€λ„ λͺ¨λ₯Έλ‹€.) μ²˜μŒμ—λŠ” 재λΈλ‘œ μ‹œμž‘ν–ˆλŠ”λ°, μš”μ¦˜μ€ μ‹μŒμ„ μ „νν•˜κ³ , λ°₯ λ¨ΉμœΌλŸ¬κ°€μ•Όμ§€. 이제 7개(λΆ€λ‘κΉŒμ§€) λ‚¨μ•˜λ‹€.
  4. 2002.02.24 31μž₯이 이제 2μž₯ 정도 밖에 남지 μ•Šμ•˜λ‹€. μ΄λ²ˆμ£ΌλŠ” 이런일 μ €λŸ°μΌ ν•‘κ³„λ˜λ©΄μ„œ λͺ»ν–ˆλ‹€κ³  μœ„μ•ˆν•˜λŠ”λ°, 정말 μ°Ήμ°Ήν•˜λ„€. 거의 4일 정도 μ§€μ²΄λ˜κ³  μžˆμœΌλ‹ˆ. λ‹€μ‹œ λ§ˆμŒμ„ 가닀듬에 내일 μ™„λ£Œν•΄μ•Όμ§€.
  5. 2002.02.25 31μž₯ μ’…λ£Œ. 이제 μ΄μ±…μ˜ 핡심듀은 끝이 λ‚œλ“.
  6. 2002.03.02 33μž₯ μ΄ˆμ•ˆ μ’…λ£Œ. μ§μ „μ—μ„œ μ’Œμ ˆν•˜μ§€ μ•ŠμœΌλ¦¬.
  7. 2002.03.04 34μž₯ μ΄ˆμ•ˆ μ’…λ£Œ
  8. 2002.03.08 λ¬Έμ„œν™” μ’…λ£Œ ( 1~35μž₯ ν•œκΈ€ν™” or μš”μ•½, Appendix와 indexλŠ” μ œμ™Έ)
    • μ•„, λ“œλ””μ–΄ 끝이닀. 사싀 μ§„μ§œ λ²ˆμ—­μ²˜λŸΌ 끝을 λ³Όλ €λ©΄ auto_ptrκ³Ό Recommended Reading을 해석해야 ν•˜κ² μ§€λ§Œ λ‚΄λ§ˆμŒμ΄λ‹€. 더 이상 λ‚΄μš©μ΄ μ—†λ‹€κ³  ν•˜λ©΄ λ§žμ„ κΉŒλ‚˜. 휴. μ›λž˜ ν•œλ‹¬μ •λ„ 죽어라 맀달렀 끝낼렀고 ν•œκ²ƒμ„ ν•œλ‹¬ 반 μ€ λ„˜κ²Όλ‹€. (2월은 28μΌκΉŒμ§€λž€ 말이닀. ^^;;) 이제 μ΄λΌ λ°”νƒ•μœΌλ‘œν•œ μ„ΈλΈλ‚˜ 자료만이 λ‚¨μ•˜κ΅¬λ‚˜. 1ν•™κΈ°κ°€ λλ‚˜κ³  λ°©ν•™λ•Œ λ‹€μ‹œ ν•œλ²ˆ λ§žμΆ€λ²•μ΄λ‚˜ 고치고 싢은 λ‚΄μš©μ„ 고칠것이닀. 보람찬 ν•˜λ£¨λ‹€.

3. Thread

  • λŒ€λ‹¨λŒ€λ‹¨..~ 곡을 λ“€μ΄λ”λ‹ˆ λ“œλ””μ–΄ ν•œλ°”ν€΄ λŒμœΌμ…¨κ΅°. μΆ•ν•˜λ“œλ¦¬λ„€.. --μ„μ²œ


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