Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘μ „체 κΈ€ (1103)

KoreanFoodie's Study

Effective C++ | ν•­λͺ© 27 : μΊμŠ€νŒ…μ€ μ ˆμ•½, 또 μ ˆμ•½! μžŠμ§€ 말자

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 27 : μΊμŠ€νŒ…μ€ μ ˆμ•½, 또 μ ˆμ•½! μžŠμ§€ 말자 핡심 : 1. λ‹€λ₯Έ 방법이 κ°€λŠ₯ν•˜λ‹€λ©΄ μΊμŠ€νŒ…μ€ ν”Όν•˜μž. 특히 μˆ˜ν–‰ μ„±λŠ₯에 λ―Όκ°ν•œ μ½”λ“œμ—μ„œ dynamic_cast λŠ” λͺ‡ 번이고 λ‹€μ‹œ μƒκ°ν•˜μž. 섀계 쀑에 μΊμŠ€νŒ…μ΄ ν•„μš”ν•΄μ‘Œλ‹€λ©΄, μΊμŠ€νŒ…μ„ 쓰지 μ•ŠλŠ” λ‹€λ₯Έ 방법을 μ‹œλ„ν•΄ 보자. 2. μΊμŠ€νŒ…μ΄ μ–΄μ©” 수 없이 ν•„μš”ν•˜λ‹€λ©΄, ν•¨μˆ˜ μ•ˆμ— 숨길 수 μžˆλ„λ‘ ν•΄ 보자. μ΄λ ‡κ²Œ ν•˜λ©΄ μ΅œμ†Œν•œ μ‚¬μš©μžλŠ” μžμ‹ μ˜ μ½”λ“œμ— μΊμŠ€νŒ…μ„ 넣지 μ•Šκ³  이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 있게 λœλ‹€. 3. κ΅¬ν˜• μŠ€νƒ€μΌμ˜ 캐슀트λ₯Ό μ“°λ €κ±°λ“  C++ μŠ€νƒ€μΌμ˜ 캐슀트λ₯Ό μ„ ν˜Έν•˜μž. λ°œκ²¬ν•˜κΈ°λ„ 쉽고, 섀계..

Tutorials/C++ : Advanced 2022. 10. 25. 16:18
Effective C++ | ν•­λͺ© 25 : μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ μ•ŠλŠ” swap 에 λŒ€ν•œ 지원도 생각해 보자

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 25 : μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ μ•ŠλŠ” swap 에 λŒ€ν•œ 지원도 생각해 보자 핡심 : 1. std::swap 이 μ‚¬μš©μž μ •μ˜ νƒ€μž…μ— λŒ€ν•΄ 느리게 λ™μž‘ν•  여지가 μžˆλ‹€λ©΄ swap 멀버 ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜μž. 이 멀버 swap 은 μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ μ•Šλ„λ‘ λ§Œλ“€μž. 2. 멀버 swap 을 μ œκ³΅ν–ˆμœΌλ©΄, 이 멀버λ₯Ό ν˜ΈμΆœν•˜λŠ” 비멀버 swap 도 μ œκ³΅ν•˜μž. 클래슀(ν…œν”Œλ¦Ώμ΄ μ•„λ‹Œ)에 λŒ€ν•΄μ„œλŠ”, std::swap 도 νŠΉμˆ˜ν™”ν•΄ λ‘μž. 3. μ‚¬μš©μž μž…μž₯μ—μ„œ swap 을 ν˜ΈμΆœν•  λ•ŒλŠ”, std::swap 에 λŒ€ν•œ using 선언을 λ„£μ–΄ μ€€ 후에 λ„€μž„μŠ€νŽ˜μ΄μŠ€ ν•œμ • 없이 swap 을..

Tutorials/C++ : Advanced 2022. 10. 25. 16:15
Effective C++ | ν•­λͺ© 24 : νƒ€μž… λ³€ν™˜μ΄ λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ— λŒ€ν•΄ μ μš©λ˜μ–΄μ•Ό ν•œλ‹€λ©΄ 비멀버 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 24 : νƒ€μž… λ³€ν™˜μ΄ λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ— λŒ€ν•΄ μ μš©λ˜μ–΄μ•Ό ν•œλ‹€λ©΄ 비멀버 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜μž 핡심 : μ–΄λ–€ ν•¨μˆ˜μ— λ“€μ–΄κ°€λŠ” λͺ¨λ“  λ§€κ°œλ³€μˆ˜(this 포인터가 κ°€λ¦¬ν‚€λŠ” 객체도 ν¬ν•¨ν•΄μ„œ) 에 λŒ€ν•΄ νƒ€μž… λ³€ν™˜μ„ ν•΄ 쀄 ν•„μš”κ°€ μžˆλ‹€λ©΄, κ·Έ ν•¨μˆ˜λŠ” 비멀버이어야 ν•œλ‹€. 유리수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν΄λž˜μŠ€κ°€ μžˆλ‹€κ³  ν•˜κ³ , κ³±μ…‰ 연산을 λ§Œλ“ λ‹€κ³  κ°€μ •ν•˜μž. class Rational { public: Rational(int numerator = 0, int denominator = 1); int numerator() const; int denominator() const;..

Tutorials/C++ : Advanced 2022. 10. 25. 16:15
Effective C++ | ν•­λͺ© 23 : 멀버 ν•¨μˆ˜λ³΄λ‹€λŠ” 비멀버 λΉ„ν”„λ Œλ“œ ν•¨μˆ˜μ™€ 더 κ°€κΉŒμ›Œμ§€μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 23 : 멀버 ν•¨μˆ˜λ³΄λ‹€λŠ” 비멀버 λΉ„ν”„λ Œλ“œ ν•¨μˆ˜μ™€ 더 κ°€κΉŒμ›Œμ§€μž 핡심 : 멀버 ν•¨μˆ˜λ³΄λ‹€λŠ” 비멀버 λΉ„ν”„λ Œλ“œ ν•¨μˆ˜λ₯Ό 자주 μ“°μž. μΊ‘μŠν™” 정도가 높아지고, νŒ¨ν‚€μ§• μœ μ—°μ„±λ„ 컀지며, κΈ°λŠ₯적인 ν™•μž₯성도 λŠ˜μ–΄λ‚œλ‹€. μ›Ή λΈŒλΌμš°μ €μ—μ„œ μΊμ‹œλ₯Ό λΉ„μš°λŠ” ν•¨μˆ˜, URL 기둝을 μ—†μ• λŠ” ν•¨μˆ˜, μΏ ν‚€λ₯Ό μ œκ±°ν•˜λŠ” ν•¨μˆ˜κ°€ μžˆλ‹€κ³  ν•˜μž. μ„Έ λ™μž‘μ„ λ™μ‹œμ— ν•˜λ„λ‘ λ§Œλ“œλŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ, 멀버 ν•¨μˆ˜λ‘œ λ§Œλ“œλŠ” 것이 μ’‹μ„κΉŒ, 비멀버 ν•¨μˆ˜λ‘œ μ œκ³΅ν•˜λŠ” 것이 더 μ’‹μ„κΉŒ? class WebBrowser { public: void clearCache(); void clearHist..

Tutorials/C++ : Advanced 2022. 10. 25. 16:14
Effective C++ | ν•­λͺ© 22 : 데이터 멀버가 선언될 곳은 private μ˜μ—­μž„μ„ λͺ…μ‹¬ν•˜μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 22 : 데이터 멀버가 선언될 곳은 private μ˜μ—­μž„μ„ λͺ…μ‹¬ν•˜μž 핡심 : 1. 데이터 λ©€λ²„λŠ” private λ©€λ²„λ‘œ μ„ μ–Έν•˜μž 이λ₯Ό 톡해 클래슀 μ œμž‘μžλŠ” λ¬Έλ²•μ μœΌλ‘œ 일관성 μžˆλŠ” 데이터 μ ‘κ·Ό ν†΅λ‘œλ₯Ό μ œκ³΅ν•  수 있고, ν•„μš”μ— λ”°λΌμ„œλŠ” μ„Έλ°€ν•œ μ ‘κ·Ό μ œμ–΄λ„ κ°€λŠ₯ν•˜λ©°, 클래슀의 λΆˆλ³€μ†μ„±μ„ κ°•ν™”ν•  수 μžˆμ„ 뿐 μ•„λ‹ˆλΌ, λ‚΄λΆ€ κ΅¬ν˜„μ˜ μœ΅ν†΅μ„±λ„ λ°œνœ˜ν•  수 μžˆλ‹€. 2. protected λŠ” public 보닀 더 많이 '보호' λ°›κ³  μžˆλŠ” 것이 μ ˆλŒ€λ‘œ μ•„λ‹ˆλ‹€. λ¨Όμ €, 데이터 멀버에 public λŒ€μ‹  private 을 써야 ν•˜λŠ” 이유λ₯Ό μ•Œμ•„λ³΄μž. 문법적 일관..

Tutorials/C++ : Advanced 2022. 10. 25. 16:13
Effective C++ | ν•­λͺ© 21 : ν•¨μˆ˜μ—μ„œ 객체λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•  κ²½μš°μ— 참쑰자λ₯Ό λ°˜ν™˜ν•˜λ €κ³  듀지 말자

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 21 : ν•¨μˆ˜μ—μ„œ 객체λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•  κ²½μš°μ— 참쑰자λ₯Ό λ°˜ν™˜ν•˜λ €κ³  듀지 말자 핡심 : 1. 지역 μŠ€νƒ 객체에 λŒ€ν•œ ν¬μΈν„°λ‚˜ 참쑰자λ₯Ό λ°˜ν™˜ν•˜λŠ” 일, ν˜Ήμ€ νž™μ— ν• λ‹Ήλœ 객체에 λŒ€ν•œ 참쑰자λ₯Ό λ°˜ν™˜ν•˜λŠ” 일, λ˜λŠ” 지역 정적 객체에 λŒ€ν•œ ν¬μΈν„°λ‚˜ 참쑰자λ₯Ό λ°˜ν™˜ν•˜λŠ” 일은 그런 객체가 두 개 이상 ν•„μš”ν•΄μ§ˆ κ°€λŠ₯성이 μžˆλ‹€λ©΄ μ ˆλŒ€λ‘œ ν•˜μ§€ 말자(ν•­λͺ© 4λ₯Ό 보면 단일 μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œμ˜ μ μ ˆν•œ μ½”λ“œ 예제λ₯Ό 찾을 수 μžˆλ‹€) 유리수λ₯Ό ν‘œν˜„ν•˜λŠ” 클래슀의 κ³±μ…ˆ operator λ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν•˜λ©΄, 각기 λ‹€λ₯Έ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€! // 1. result 객체λ₯Ό 생성..

Tutorials/C++ : Advanced 2022. 10. 25. 16:13
Effective C++ | ν•­λͺ© 20 : '값에 μ˜ν•œ 전달' λ³΄λ‹€λŠ” 'μƒμˆ˜κ°μ²΄ μ°Έμ‘°μžμ— μ˜ν•œ 전달' 방식을 νƒν•˜λŠ” 편이 λŒ€κ°œ λ‚«λ‹€

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 20 : '값에 μ˜ν•œ 전달' λ³΄λ‹€λŠ” 'μƒμˆ˜κ°μ²΄ μ°Έμ‘°μžμ— μ˜ν•œ 전달' 방식을 νƒν•˜λŠ” 편이 λŒ€κ°œ λ‚«λ‹€ 핡심 : 1. '값에 μ˜ν•œ 전달' λ³΄λ‹€λŠ” 'μƒμˆ˜ 객체 μ°Έμ‘°μžμ— μ˜ν•œ 전달' 을 μ„ ν˜Έν•˜μž. λŒ€μ²΄μ μœΌλ‘œ 효율적일 뿐만 μ•„λ‹ˆλΌ 볡사손싀 λ¬Έμ œκΉŒμ§€ 막아쀀닀. 2. 이번 ν•­λͺ©μ—μ„œ 닀룬 법칙은 기본제곡 νƒ€μž… 및 STL 반볡자, 그리고 ν•¨μˆ˜ 객체 νƒ€μž…μ—λŠ” λ§žμ§€ μ•ŠλŠ”λ‹€. 이듀에 λŒ€ν•΄μ„œλŠ” '값에 μ˜ν•œ 전달' 이 더 μ μ ˆν•˜λ‹€. 기본적으둜 C++ λŠ” ν•¨μˆ˜λ‘œλΆ€ν„° 객체λ₯Ό μ „λ‹¬λ°›κ±°λ‚˜ 전달할 λ•Œ '값에 μ˜ν•œ 전달(pass-by-value)' 방식을 μ‚¬μš©ν•œλ‹€. μ΄λŸ¬ν•œ..

Tutorials/C++ : Advanced 2022. 10. 25. 16:12
Effective C++ | ν•­λͺ© 19 : 클래슀 μ„€κ³„λŠ” νƒ€μž… 섀계와 λ˜‘κ°™μ΄ μ·¨κΈ‰ν•˜μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 19 : 클래슀 μ„€κ³„λŠ” νƒ€μž… 섀계와 λ˜‘κ°™μ΄ μ·¨κΈ‰ν•˜μž 핡심 : 클래슀 μ„€κ³„λŠ” νƒ€μž… 섀계이닀. μƒˆλ‘œμš΄ νƒ€μž…μ„ μ •μ˜ν•˜κΈ° 전에, 이번 ν•­λͺ©μ— λ‚˜μ˜¨ λͺ¨λ“  고렀사항을 빠짐없이 점검해 보자! C++ μ—μ„œ μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •μ˜ν•œλ‹€λŠ” 것은 μƒˆλ‘œμš΄ νƒ€μž…μ„ ν•˜λ‚˜ μ •μ˜ν•˜λŠ” 것과 κ°™λ‹€. λ”°λΌμ„œ λ‹€μŒκ³Ό 같은 μš”μ†Œλ“€μ„ μˆ™κ³ ν•œ ν›„ λ§Œλ“€μ–΄ 보자! μƒˆλ‘œ μ •μ˜ν•œ νƒ€μž…μ˜ 객체 생성 및 μ†Œλ©Έμ€ μ–΄λ–»κ²Œ 이루어져야 ν•˜λŠ”κ°€? (operator new, operator delete[] λ“±λ“±) 객체 μ΄ˆκΈ°ν™”λŠ” 객체 λŒ€μž…κ³Ό μ–΄λ–»κ²Œ 달라야 ν•˜λŠ”κ°€? μƒˆλ‘œμš΄ νƒ€μž…μœΌλ‘œ λ§Œλ“  객체가 값에 μ˜ν•΄..

Tutorials/C++ : Advanced 2022. 10. 25. 16:12
Effective C++ | ν•­λͺ© 18 : μΈν„°νŽ˜μ΄μŠ€ μ„€κ³„λŠ” μ œλŒ€λ‘œ μ“°κΈ°μ—” μ‰½κ²Œ, μ—‰ν„°λ¦¬λ‘œ μ“°κΈ°μ—” μ–΄λ ΅κ²Œ ν•˜μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 18 : μΈν„°νŽ˜μ΄μŠ€ μ„€κ³„λŠ” μ œλŒ€λ‘œ μ“°κΈ°μ—” μ‰½κ²Œ, μ—‰ν„°λ¦¬λ‘œ μ“°κΈ°μ—” μ–΄λ ΅κ²Œ ν•˜μž 핡심 : 1. 쒋은 μΈν„°νŽ˜μ΄μŠ€λŠ” μ œλŒ€λ‘œ 쓰기에 μ‰¬μš°λ©° μ—‰ν„°λ¦¬λ‘œ 쓰기에 μ–΄λ ΅λ‹€. μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€ λ•ŒλŠ” 이 νŠΉμ„±μ„ 지닐 수 μžˆλ„λ‘ κ³ λ―Όν•˜κ³  또 κ³ λ―Όν•˜μž 2. μΈν„°νŽ˜μ΄μŠ€μ˜ μ˜¬λ°”λ₯Έ μ‚¬μš©μ„ μ΄λ„λŠ” λ°©λ²•μœΌλ‘œλŠ” μΈν„°νŽ˜μ΄μŠ€ μ‚¬μ΄μ˜ 일관성 μž‘μ•„μ£ΌκΈ°, 그리고 기본제곡 νƒ€μž…κ³Όμ˜ λ™μž‘ ν˜Έν™˜μ„± μœ μ§€ν•˜κΈ°κ°€ μžˆλ‹€. 3. μ‚¬μš©μžμ˜ μ‹€μˆ˜λ₯Ό λ°©μ§€ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” μƒˆλ‘œμš΄ νƒ€μž… λ§Œλ“€κΈ°, νƒ€μž…μ— λŒ€ν•œ 연산을 μ œν•œν•˜κΈ°, 객체의 값에 λŒ€ν•΄ μ œμ•½ κ±ΈκΈ°, μžμ› 관리 μž‘μ—…μ„ μ‚¬μš©μž μ±…μž„μœΌλ‘œ 놓지 μ•ŠκΈ°κ°€ 있..

Tutorials/C++ : Advanced 2022. 10. 25. 16:12