๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 14 : ์์ ๊ด๋ฆฌ ํด๋์ค์ ๋ณต์ฌ ๋์์ ๋ํด ์ง์งํ๊ฒ ๊ณ ์ฐฐํ์ ํต์ฌ : 1. RAII ๊ฐ์ฒด์ ๋ณต์ฌ๋ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ด๋ฆฌํ๋ ์์์ ๋ณต์ฌ ๋ฌธ์ ๋ฅผ ์๊ณ ๊ฐ๊ธฐ ๋๋ฌธ์, ๊ทธ ์์์ ์ด๋ป๊ฒ ๋ณต์ฌํ๋๋์ ๋ฐ๋ผ RAII ๊ฐ์ฒด์ ๋ณต์ฌ ๋์์ด ๊ฒฐ์ ๋๋ค. 2. RAII ํด๋์ค์ ๊ตฌํํ๋ ์ผ๋ฐ์ ์ธ ๋ณต์ฌ ๋์์ ๋ณต์ฌ๋ฅผ ๊ธ์งํ๊ฑฐ๋ ์ฐธ์กฐ ์นด์ดํ ์ ํด ์ฃผ๋ ์ ์ผ๋ก ๋ง๋ฌด๋ฆฌํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด ์ธ์ ๋ฐฉ๋ฒ๋ค๋ ๊ฐ๋ฅํ๋ค! ์ฐ๋ฆฌ๊ฐ ์ง์ RAII ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ์๊ฒผ๋ค๊ณ ๊ฐ์ ํ์. class Lock { public: explicit Lock(..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 13 : ์์ ๊ด๋ฆฌ์๋ ๊ฐ์ฒด๊ฐ ๊ทธ๋ง! ํต์ฌ : 1. ์์ ๋์ถ์ ๋ง๊ธฐ ์ํด, ์์ฑ์ ์์์ ์์์ ํ๋ํ๊ณ ์๋ฉธ์์์ ๊ทธ๊ฒ์ ํด์ ํ๋ RAII ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ 2. ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ ์ฐ์ด๋ RAII ํด๋์ค๋ shared_ptr ๊ทธ๋ฆฌ๊ณ auto_ptr ์ด๋ค. ์ด ๋ ๊ฐ์ด๋ฐ shared_ptr ์ด ๋ณต์ฌ ์์ ๋์์ด ์ง๊ด์ ์ด๊ธฐ ๋๋ฌธ์ ๋๊ฐ ๋ ์ข๋ค. ๋ฐ๋ฉด, auto_ptr ์ ๋ณต์ฌ๋๋ ๊ฐ์ฒด(์๋ณธ ๊ฐ์ฒด) ๋ฅผ null ๋ก ๋ง๋ค์ด ๋ฒ๋ฆฐ๋ค. -> auto_ptr ์ C++ 11 ์ดํ๋ก ์ธ ์ ์๊ฒ ๋จ! ๋์ unique_ptr ๋ฅผ ์ฌ์ฉํ๋ค ์ค๋งํธ ํฌ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 12 : ๊ฐ์ฒด์ ๋ชจ๋ ๋ถ๋ถ์ ๋น ์ง์์ด ๋ณต์ฌํ์ ํต์ฌ : 1. ๊ฐ์ฒด ๋ณต์ฌ ํจ์๋ ์ฃผ์ด์ง ๊ฐ์ฒด์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ ๋ฐ ๋ชจ๋ ํด๋์ค ๋ถ๋ถ์ ๋น ๋จ๋ฆฌ์ง ๋ง๊ณ ๋ณต์ฌํด์ผ ํ๋ค. 2. ํด๋์ค์ ๋ณต์ฌ ํจ์ ๋ ๊ฐ๋ฅผ ๊ตฌํํ ๋, ํ ์ชฝ์ ์ด์ฉํด์ ๋ค๋ฅธ ์ชฝ์ ๊ตฌํํ๋ ค๋ ์๋๋ ์ ๋๋ก ํ์ง ๋ง์. ๊ทธ ๋์ , ๊ณตํต๋ ๋์์ ์ 3์ ํจ์์๋ค ๋ถ๋ฆฌํด ๋๊ณ ์์ชฝ์์ ์ด๊ฒ์ ํธ์ถํ๊ฒ ๋ง๋ค์ด์ ํด๊ฒฐํ์. ๋ณต์ฌ ์์ฑ์์ ๋ณต์ฌ ๋์ ์ฐ์ฐ์๋ฅผ ํตํ์ด ๊ฐ์ฒด ๋ณต์ฌ ํจ์(copying function) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฐ๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ค์ ๊ธฐ๋ณธ์ผ๋ก ๋ง๋ค๋ค ๋ณด๋, ์ฌ์ฉ์๊ฐ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 11 : operator= ์์๋ ์๊ธฐ๋์ ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋น ์ง์ง ์๋๋ก ํ์ ํต์ฌ : 1. operator= ๋ฅผ ๊ตฌํํ ๋, ์ด๋ค ๊ฐ์ฒด๊ฐ ๊ทธ ์์ ์ ๋์ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ๋๋ก ๋ง๋ค์. ์๋ณธ ๊ฐ์ฒด์ ๋ณต์ฌ๋์ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋น๊ตํด๋ ๋๊ณ , ๋ฌธ์ฅ์ ์์๋ฅผ ์ ์ ํ ์กฐ์ ํ ์๋ ์์ผ๋ฉฐ, ๋ณต์ฌ ํ ๋ง๋ฐ๊พธ๊ธฐ ๊ธฐ๋ฒ์ ์จ๋ ๋๋ค. 2. ๋ ๊ฐ ์ด์์ ๊ฐ์ฒด์ ๋ํด ๋์ํ๋ ํจ์๊ฐ ์๋ค๋ฉด, ์ด ํจ์์ ๋๊ฒจ์ง๋ ๊ฐ์ฒด๋ค์ด ์ฌ์ค ๊ฐ์ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ์ ์ ํํ๊ฒ ๋์ํ๋์ง ํ์ธํ์. ์ด๋ฐ ์ฝ๋๋ ์ฌ์ค ์ ๋ฒํ(legal) ์ฝ๋์ด๋ค. class Widget{ ...
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 10 : ๋์ ์ฐ์ฐ์๋ *this ์ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๊ฒ ํ์ ํต์ฌ : ๋์ ์ฐ์ฐ์๋ *this ์ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ค์ด๋ผ C++ ์ ๋์ ์ฐ์ฐ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์ฌ์ฌ์ฒ๋ผ ์ฎ์ผ ์ ์๋ค. int x, y, z; // ๋์ ์ ์ฐ์ธก ์ฐ๊ด(right-associative)์ด๋ค. x = y = z = 15; // ๋ฐ๋ผ์ ์ ์์ ์ค์ ๋ก ์๋์ ๊ฐ๋ค x = (y = (z = 15))); ๋์ ์ฐ์ฐ์ด ์ฌ์ฌ์ฒ๋ผ ์ฎ์ด๋ ค๋ฉด ๋์ ์ฐ์ฐ์๊ฐ ์ข๋ณ ์ธ์์ ๋ํ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค(์ผ์ข ์ ๊ด๋ก[convention] ์ด๋ค). ์ด๋ += , -..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 9 : ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ฉธ ๊ณผ์ ์ค์๋ ์ ๋๋ก ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ์ง ๋ง์ ํต์ฌ : ์์ฑ์ ๋ฐ ์๋ฉธ์ ์์์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ์ง ๋ง์! ๊ฐ์ ํจ์๋ผ๊ณ ํด๋, ์ง๊ธ ์คํ ์ค์ธ ์์ฑ์๋ ์๋ฉธ์์ ํด๋น๋๋ ํด๋์ค์ ํ์ ํด๋์ค ์ชฝ์ผ๋ก๋ ๋ด๋ ค๊ฐ์ง ์๋๋ค! ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ฉธ ๊ณผ์ ์ค์๋ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ ๋๋ก ์ ๋๋ค! ์์๋ฅผ ๋ณด์. // ๋ชจ๋ ๊ฑฐ๋์ ๋ํ ๊ธฐ๋ณธ ํด๋์ค class Transaction { public: Transaction(); // ํ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ก๊ทธ ๊ธฐ๋ก์ ๋ง๋ ๋ค virtual void logTransactio..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 8 : ์์ธ๊ฐ ์๋ฉธ์๋ฅผ ๋ ๋์ง ๋ชปํ๋๋ก ๋ถ๋ค์ด ๋์ ํต์ฌ : 1. ์๋ฉธ์์์๋ ์์ธ๊ฐ ๋น ์ ธ๋๊ฐ๋ฉด ์ ๋๋ค. ๋ง์ฝ ์๋ฉธ์ ์์์ ํธ์ถ๋ ํจ์๊ฐ ์์ธ๋ฅผ ๋์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด, ์ด๋ค ์์ธ์ด๋ ์ง ์๋ฉธ์์์ ๋ชจ๋ ๋ฐ์๋ธ ํ์ ์ผ์ผ ๋ฒ๋ฆฌ๋ ์ง ํ๋ก๊ทธ๋จ์ ๋๋ด๋ ์ง ํด์ผ ํ๋ค. 2. ์ด๋ค ํด๋์ค์ ์ฐ์ฐ์ด ์งํ๋๋ค๊ฐ ๋์ง ์์ธ์ ๋ํด ์ฌ์ฉ์๊ฐ ๋ฐ์ํด์ผ ํ ํ์๊ฐ ์๋ค๋ฉด, ํด๋น ์ฐ์ฐ์ ์ ๊ณตํ๋ ํจ์๋ ๋ฐ๋์ ๋ณดํต์ ํจ์(์ฆ, ์๋ฉธ์๊ฐ ์๋ ํจ์) ์ด์ด์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๋ณด์. class Widget { public: ... // ์ด ํจ์๋ก๋ถํฐ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 7 : ๋คํ์ฑ์ ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค์์๋ ์๋ฉธ์๋ฅผ ๋ฐ๋์ ๊ฐ์ ์๋ฉธ์๋ก ์ ์ธํ์ ํต์ฌ : 1. ๋คํ์ฑ์ ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค์๋ ๋ฐ๋์ ๊ฐ์ ์๋ฉธ์๋ฅผ ์ ์ธํด์ผ ํ๋ค. ์ฆ, ์ด๋ค ํด๋์ค๊ฐ ๊ฐ์ ํจ์๋ฅผ ํ๋๋ผ๋ ๊ฐ๊ณ ์์ผ๋ฉด, ์ด ํด๋์ค์ ์๋ฉธ์๋ ๊ฐ์ ์๋ฉธ์์ด์ด์ผ ํ๋ค. 2. ๊ธฐ๋ณธ ํด๋์ค๋ก ์ค๊ณ๋์ง ์์๊ฑฐ๋ ๋คํ์ฑ์ ๊ฐ๋๋ก ์ค๊ณ๋์ง ์์ ํด๋์ค์๋ ๊ฐ์์๋ฉธ์๋ฅผ ์ ์ธํ์ง ๋ง์์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ TimeKeeper ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ผ๋ก ํ์ ํด๋์ค์ ํ์ ์ ๋ง๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค๊ณ ๊ฐ์ ํ์. class TimeKeeper { ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 6 : ์ปดํ์ผ๋ฌ๊ฐ ๋ง๋ค์ด๋ธ ํจ์๊ฐ ํ์ ์์ผ๋ฉด ํ์คํ ์ด๋ค์ ์ฌ์ฉ์ ๊ธํด ๋ฒ๋ฆฌ์ ํต์ฌ : ์ปดํ์ผ๋ฌ์์ ์๋์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํ์ฉ์น ์์ผ๋ ค๋ฉด, ๋์๋๋ ๋ฉค๋ฒ ํจ์๋ฅผ private ์ผ๋ก ์ ์ธํ ํ์ ๊ตฌํ์ ํ์ง ์์ ์ฑ๋ก ๋์. Uncopyable ๊ณผ ๋น์ทํ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฐ๋ ๊ฒ๋ ํ ๋ฐฉ๋ฒ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ๋ถ๋์ฐ์ ํ๋งคํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฒ ๋์๋๋ฐ, ๊ฐ ์์ฐ์ ์ธ์์์ ํ๋๋ฐ์ ์๋ค๋ ๊ฒ์ ์ ์ฉํด ๋ฌ๋ผ๊ณ ์์ฒญํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ฆ, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ ์ปดํ์ผ์ด ๋๋ฉด ์๋๋ค๋ ๋ป์ด๋ค! class HomeForSale {...}; .....
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 5 : C++ ๊ฐ ์๊ทผ์ฌ์ฉ ๋ง๋ค์ด ํธ์ถํด ๋ฒ๋ฆฌ๋ ํจ์๋ค์ ์ด๊ฐ์ ์ธ์ฐ์ ํต์ฌ : ์ปดํ์ผ๋ฌ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํด๋์ค์ ๋ํด ๊ธฐ๋ณธ ์์ฑ์, ๋ณต์ฌ ์์ฑ์, ๋ณต์ฌ ๋์ ์ฐ์ฐ์, ์๋ฉธ์๋ฅผ ์์์ ์ผ๋ก ๋ง๋ค์ด ๋์ ์ ์๋ค ํด๋์ค๋ฅผ ๋ง๋ค ๋, ์ปดํ์ผ๋ฌ๋ ๊ธฐ๋ณธ ์์ฑ์, ๋ณต์ฌ ์์ฑ์, ๋ณต์ฌ ๋์ ์ฐ์ฐ์, ์๋ฉธ์๋ฅผ ์์์ ์ผ๋ก ์์ฑํ๋ค. ์๋ฉธ์๋ ํด๋น ํด๋์ค๊ฐ ์์ํ ๊ธฐ๋ณธ ํด๋์ค์ ์๋ฉธ์๊ฐ ๊ฐ์ ์๋ฉธ์๋ก ๋์ด ์์ง ์์ผ๋ฉด ์ญ์ ๋น๊ฐ์ ์๋ฉธ์๋ก ๋ง๋ค์ด์ง๋ค(๋ฌผ๋ก ์ฌ์ฉ์๊ฐ ์์ฑ์๋ฅผ ์ ์ธํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ง ์๋๋ค). ๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ..