๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/copQUf/btrPvvDL5Cv/eOzeo29s5aT4h5qmLgVu0k/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 17 : new ๋ก ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ค๋งํธ ํฌ์ธํฐ์ ์ ์ฅํ๋ ์ฝ๋๋ ๋ณ๋์ ํ ๋ฌธ์ฅ์ผ๋ก ๋ง๋ค์ ํต์ฌ : new ๋ก ์์ํ ๊ฐ์ฒด๋ฅผ ์ค๋งํธ ํฌ์ธํฐ๋ก ๋ฃ๋ ์ฝ๋๋ ๋ณ๋์ ํ ๋ฌธ์ฅ์ผ๋ก ๋ง๋ค์. ์ด๊ฒ์ด ์ ๋์ด ์์ผ๋ฉด, ์์ธ๊ฐ ๋ฐ์๋ ๋ ๋๋ฒ๊น ํ๊ธฐ ํ๋ ์์ ๋์ถ์ด ์ด๋๋ ์ ์๋ค! ์ฒ๋ฆฌ ์ฐ์ ์์๋ฅผ ์๋ ค์ฃผ๋ ํจ์๊ฐ ํ๋ ์๊ณ , ๋์ ์ผ๋ก ํ ๋นํ Widget ๊ฐ์ฒด์ ๋ํด ์ด๋ค ์ฐ์ ์์์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ํจ์๊ฐ ํ๋ ์๋ค๊ณ ๊ฐ์ ํ์. int priority(); void processWidget(std::shared_ptr pw, int prio..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bylheK/btrPytSCCiy/BAD03PVvg75FTKq4hYDgE1/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 16 : new ๋ฐ delete ๋ฅผ ์ฌ์ฉํ ๋๋ ํํ๋ฅผ ๋ฐ๋์ ๋ง์ถ์ ํต์ฌ : new ํํ์์ [ ] ๋ฅผ ์ผ์ผ๋ฉด, ๋์๋๋ delete ํํ์์๋ [ ] ๋ฅผ ์จ์ผ ํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, new ํํ์์ [ ] ๋ฅผ ์ ์ผ์ผ๋ฉด, ๋์๋๋ delete ํํ์์๋ [ ] ๋ฅผ ์ฐ์ง ๋ง์์ผ ํ๋ค. ์๋ ์ฝ๋๋ ์ด๋ค ๋ถ๋ถ์ด ์๋ชป๋์์๊น? std::string *stringArray = new std::string[100]; ... delete stringArray; stringArray ๋ ๋ฐฐ์ด์ด๋ฏ๋ก, delete[] ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฐฐ์ด์ ๊ฐ์ฒด ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vTz2o/btrPukJxOYd/mSKxMwWJKM8lzNmeSkjqDK/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 15 : ์์ ๊ด๋ฆฌ ํด๋์ค์์ ๊ด๋ฆฌ๋๋ ์์์ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ํ์ ํต์ฌ : 1. ์ค์ ์์์ ์ง์ ์ ๊ทผํด์ผ ํ๋ ๊ธฐ์กด API ๋ค๋ ๋ง๊ธฐ ๋๋ฌธ์, RAII ํด๋์ค๋ฅผ ๋ง๋ค ๋๋ ๊ทธ ํด๋์ค๊ฐ ๊ด๋ฆฌํ๋ ์์์ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ด์ด ์ฃผ์ด์ผ ํ๋ค. 2. ์์ ์ ๊ทผ์ ๋ช ์์ ๋ณํ ํน์ ์์์ ๋ณํ์ ํตํด ๊ฐ๋ฅํ๋ค. ์์ ์ฑ๋ง ๋ฐ์ง๋ฉด ๋ช ์์ ๋ณํ์ด ๋์ฒด์ ์ผ๋ก ๋ ๋ซ์ง๋ง, ๊ณ ๊ฐ ํธ์์ฑ์ ๋๊ณ ๋ณด๋ฉด ์์์ ๋ณํ์ด ๊ด์ฐฎ๋ค. ๋ค์์ ๊ฒฝ์ฐ์ฒ๋ผ, RAII ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๊ทธ ๊ฐ์ ๊ฐ ๊ฐ์ธ๊ณ ์๋ ์ค์ ์์์ผ๋ก ๋ณํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๊ธด๋ค. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ctifKP/btrPt74A529/uqk7Oh5gTnS2vUCmtp61xk/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 14 : ์์ ๊ด๋ฆฌ ํด๋์ค์ ๋ณต์ฌ ๋์์ ๋ํด ์ง์งํ๊ฒ ๊ณ ์ฐฐํ์ ํต์ฌ : 1. RAII ๊ฐ์ฒด์ ๋ณต์ฌ๋ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ด๋ฆฌํ๋ ์์์ ๋ณต์ฌ ๋ฌธ์ ๋ฅผ ์๊ณ ๊ฐ๊ธฐ ๋๋ฌธ์, ๊ทธ ์์์ ์ด๋ป๊ฒ ๋ณต์ฌํ๋๋์ ๋ฐ๋ผ RAII ๊ฐ์ฒด์ ๋ณต์ฌ ๋์์ด ๊ฒฐ์ ๋๋ค. 2. RAII ํด๋์ค์ ๊ตฌํํ๋ ์ผ๋ฐ์ ์ธ ๋ณต์ฌ ๋์์ ๋ณต์ฌ๋ฅผ ๊ธ์งํ๊ฑฐ๋ ์ฐธ์กฐ ์นด์ดํ ์ ํด ์ฃผ๋ ์ ์ผ๋ก ๋ง๋ฌด๋ฆฌํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด ์ธ์ ๋ฐฉ๋ฒ๋ค๋ ๊ฐ๋ฅํ๋ค! ์ฐ๋ฆฌ๊ฐ ์ง์ RAII ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ์๊ฒผ๋ค๊ณ ๊ฐ์ ํ์. class Lock { public: explicit Lock(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJrvH9/btrPtIw6AXX/uaavU7IcxiA0ku10lA4NWk/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 13 : ์์ ๊ด๋ฆฌ์๋ ๊ฐ์ฒด๊ฐ ๊ทธ๋ง! ํต์ฌ : 1. ์์ ๋์ถ์ ๋ง๊ธฐ ์ํด, ์์ฑ์ ์์์ ์์์ ํ๋ํ๊ณ ์๋ฉธ์์์ ๊ทธ๊ฒ์ ํด์ ํ๋ RAII ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ 2. ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ ์ฐ์ด๋ RAII ํด๋์ค๋ shared_ptr ๊ทธ๋ฆฌ๊ณ auto_ptr ์ด๋ค. ์ด ๋ ๊ฐ์ด๋ฐ shared_ptr ์ด ๋ณต์ฌ ์์ ๋์์ด ์ง๊ด์ ์ด๊ธฐ ๋๋ฌธ์ ๋๊ฐ ๋ ์ข๋ค. ๋ฐ๋ฉด, auto_ptr ์ ๋ณต์ฌ๋๋ ๊ฐ์ฒด(์๋ณธ ๊ฐ์ฒด) ๋ฅผ null ๋ก ๋ง๋ค์ด ๋ฒ๋ฆฐ๋ค. -> auto_ptr ์ C++ 11 ์ดํ๋ก ์ธ ์ ์๊ฒ ๋จ! ๋์ unique_ptr ๋ฅผ ์ฌ์ฉํ๋ค ์ค๋งํธ ํฌ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dPtI9G/btrPw0p0vrR/zWggEFmISqfLN9x4i0CwTk/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 12 : ๊ฐ์ฒด์ ๋ชจ๋ ๋ถ๋ถ์ ๋น ์ง์์ด ๋ณต์ฌํ์ ํต์ฌ : 1. ๊ฐ์ฒด ๋ณต์ฌ ํจ์๋ ์ฃผ์ด์ง ๊ฐ์ฒด์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ ๋ฐ ๋ชจ๋ ํด๋์ค ๋ถ๋ถ์ ๋น ๋จ๋ฆฌ์ง ๋ง๊ณ ๋ณต์ฌํด์ผ ํ๋ค. 2. ํด๋์ค์ ๋ณต์ฌ ํจ์ ๋ ๊ฐ๋ฅผ ๊ตฌํํ ๋, ํ ์ชฝ์ ์ด์ฉํด์ ๋ค๋ฅธ ์ชฝ์ ๊ตฌํํ๋ ค๋ ์๋๋ ์ ๋๋ก ํ์ง ๋ง์. ๊ทธ ๋์ , ๊ณตํต๋ ๋์์ ์ 3์ ํจ์์๋ค ๋ถ๋ฆฌํด ๋๊ณ ์์ชฝ์์ ์ด๊ฒ์ ํธ์ถํ๊ฒ ๋ง๋ค์ด์ ํด๊ฒฐํ์. ๋ณต์ฌ ์์ฑ์์ ๋ณต์ฌ ๋์ ์ฐ์ฐ์๋ฅผ ํตํ์ด ๊ฐ์ฒด ๋ณต์ฌ ํจ์(copying function) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฐ๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ค์ ๊ธฐ๋ณธ์ผ๋ก ๋ง๋ค๋ค ๋ณด๋, ์ฌ์ฉ์๊ฐ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwhfvz/btrPvjwIEVt/Y6Yxz0sOnNkBaQjzwqJKh0/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 11 : operator= ์์๋ ์๊ธฐ๋์ ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋น ์ง์ง ์๋๋ก ํ์ ํต์ฌ : 1. operator= ๋ฅผ ๊ตฌํํ ๋, ์ด๋ค ๊ฐ์ฒด๊ฐ ๊ทธ ์์ ์ ๋์ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ๋๋ก ๋ง๋ค์. ์๋ณธ ๊ฐ์ฒด์ ๋ณต์ฌ๋์ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋น๊ตํด๋ ๋๊ณ , ๋ฌธ์ฅ์ ์์๋ฅผ ์ ์ ํ ์กฐ์ ํ ์๋ ์์ผ๋ฉฐ, ๋ณต์ฌ ํ ๋ง๋ฐ๊พธ๊ธฐ ๊ธฐ๋ฒ์ ์จ๋ ๋๋ค. 2. ๋ ๊ฐ ์ด์์ ๊ฐ์ฒด์ ๋ํด ๋์ํ๋ ํจ์๊ฐ ์๋ค๋ฉด, ์ด ํจ์์ ๋๊ฒจ์ง๋ ๊ฐ์ฒด๋ค์ด ์ฌ์ค ๊ฐ์ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ์ ์ ํํ๊ฒ ๋์ํ๋์ง ํ์ธํ์. ์ด๋ฐ ์ฝ๋๋ ์ฌ์ค ์ ๋ฒํ(legal) ์ฝ๋์ด๋ค. class Widget{ ...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/74hzV/btrPuOXTzVr/4Bqedeo8Z6eAiYWkg1T0Ak/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 10 : ๋์ ์ฐ์ฐ์๋ *this ์ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๊ฒ ํ์ ํต์ฌ : ๋์ ์ฐ์ฐ์๋ *this ์ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ค์ด๋ผ C++ ์ ๋์ ์ฐ์ฐ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์ฌ์ฌ์ฒ๋ผ ์ฎ์ผ ์ ์๋ค. int x, y, z; // ๋์ ์ ์ฐ์ธก ์ฐ๊ด(right-associative)์ด๋ค. x = y = z = 15; // ๋ฐ๋ผ์ ์ ์์ ์ค์ ๋ก ์๋์ ๊ฐ๋ค x = (y = (z = 15))); ๋์ ์ฐ์ฐ์ด ์ฌ์ฌ์ฒ๋ผ ์ฎ์ด๋ ค๋ฉด ๋์ ์ฐ์ฐ์๊ฐ ์ข๋ณ ์ธ์์ ๋ํ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค(์ผ์ข ์ ๊ด๋ก[convention] ์ด๋ค). ์ด๋ += , -..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dIJFXi/btrPujKAYqe/OqM88Ut3tiPPMXnMKvRBo0/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 9 : ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ฉธ ๊ณผ์ ์ค์๋ ์ ๋๋ก ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ์ง ๋ง์ ํต์ฌ : ์์ฑ์ ๋ฐ ์๋ฉธ์ ์์์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ์ง ๋ง์! ๊ฐ์ ํจ์๋ผ๊ณ ํด๋, ์ง๊ธ ์คํ ์ค์ธ ์์ฑ์๋ ์๋ฉธ์์ ํด๋น๋๋ ํด๋์ค์ ํ์ ํด๋์ค ์ชฝ์ผ๋ก๋ ๋ด๋ ค๊ฐ์ง ์๋๋ค! ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ฉธ ๊ณผ์ ์ค์๋ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ ๋๋ก ์ ๋๋ค! ์์๋ฅผ ๋ณด์. // ๋ชจ๋ ๊ฑฐ๋์ ๋ํ ๊ธฐ๋ณธ ํด๋์ค class Transaction { public: Transaction(); // ํ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ก๊ทธ ๊ธฐ๋ก์ ๋ง๋ ๋ค virtual void logTransactio..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9ZvAK/btrPt7KhZPY/kqoKCFNKtN0ZvKU1guyabK/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 8 : ์์ธ๊ฐ ์๋ฉธ์๋ฅผ ๋ ๋์ง ๋ชปํ๋๋ก ๋ถ๋ค์ด ๋์ ํต์ฌ : 1. ์๋ฉธ์์์๋ ์์ธ๊ฐ ๋น ์ ธ๋๊ฐ๋ฉด ์ ๋๋ค. ๋ง์ฝ ์๋ฉธ์ ์์์ ํธ์ถ๋ ํจ์๊ฐ ์์ธ๋ฅผ ๋์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด, ์ด๋ค ์์ธ์ด๋ ์ง ์๋ฉธ์์์ ๋ชจ๋ ๋ฐ์๋ธ ํ์ ์ผ์ผ ๋ฒ๋ฆฌ๋ ์ง ํ๋ก๊ทธ๋จ์ ๋๋ด๋ ์ง ํด์ผ ํ๋ค. 2. ์ด๋ค ํด๋์ค์ ์ฐ์ฐ์ด ์งํ๋๋ค๊ฐ ๋์ง ์์ธ์ ๋ํด ์ฌ์ฉ์๊ฐ ๋ฐ์ํด์ผ ํ ํ์๊ฐ ์๋ค๋ฉด, ํด๋น ์ฐ์ฐ์ ์ ๊ณตํ๋ ํจ์๋ ๋ฐ๋์ ๋ณดํต์ ํจ์(์ฆ, ์๋ฉธ์๊ฐ ์๋ ํจ์) ์ด์ด์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๋ณด์. class Widget { public: ... // ์ด ํจ์๋ก๋ถํฐ ..