๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/br3jxK/btrPyARGvjW/EbItz1qvrPCQ99VRSX8u20/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 37 : ์ด๋ค ํจ์์ ๋ํด์๋ ์์๋ฐ์ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ๋๋ก ์ฌ์ ์ํ์ง ๋ง์ ํต์ฌ : ์์๋ฐ์ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ๋๋ก ์ฌ์ ์ํด์๋ ์ ๋๋ค. ์๋ํ๋ฉด ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋๋ ๋ฐ๋ฉด, ๊ฐ์ ํจ์(์ค๋ฒ๋ผ์ด๋ ๊ฐ๋ฅํ ์ ์ผํ ํจ์)๋ ๋์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ ์์๋ฅผ ๋ณด์. class Shape { public: enum ShapeColor { Red, Green, Blue }; // ๋ชจ๋ ๋ํ์ ์๊ธฐ ์์ ์ ๊ทธ๋ฆฌ๋ ํจ์๋ฅผ ์ ๊ณตํด์ผ ํจ virtual void draw(ShapeColor color = Red) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cshkZc/btrPx0pPGuK/uAHMF15w3uLIlsYIQhwRG0/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 36 : ์์๋ฐ์ ๋น๊ฐ์ ํจ์๋ฅผ ํ์ ํด๋์ค์์ ์ฌ์ ์ํ๋ ๊ฒ์ ์ ๋ ๊ธ๋ฌผ! ํต์ฌ : ์์๋ฐ์ ๋น๊ฐ์ ํจ์๋ฅผ ์ฌ์ ์ํ๋ ์ผ์ ์ ๋๋ก ํ์ง ๋ง์ ์ฌ์ค ์ด ํญ๋ชฉ์ ๋น์ฐํ๋ค๋ฉด ๋น์ฐํ๋ฐ, ๋น๊ฐ์ ํจ์๋ฅผ ์์๋ฐ๋๋ค๋ ๊ฒ์ ๊ธฐ๋ฐ ํด๋์ค์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ชจ๋ ๋ฌผ๋ ค๋ฐ๋๋ค๋ ๋ป์ด๋ฏ๋ก ํ์ํด๋์ค์์ ์ฌ์ ์ํ๋ค๋๊ฒ ์ด๋ก ์ ์ผ๋ก๋ ๋ชจ์๋๊ฒ ๋๋ค. ํด๋น ๊ธฐ๋ฐ ํด๋์ค๋ฅผ ๋ฌผ๋ ค๋ฐ์ ํด๋์ค๋ ํด๋น ๋น๊ฐ์ ํด๋์ค๋ฅผ ํธ์ถํ ๋ ๊ธฐ๋ฐ ํด๋์ค์์ ์๋ํ ๋น๊ฐ์ ํจ์์ ๋์์ ๊ทธ๋๋ก ์ฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค! ์์๋ฅผ ํ๋ ๋ณด์. class B { public: void m..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/1yHzZ/btrPzj9CXtd/wSbhPxSWQzGE0PIneg89Ok/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 35 : ๊ฐ์ ํจ์ ๋์ ์ธ ๊ฒ๋ค๋ ์๊ฐํด ๋๋ ์์ธ๋ฅผ ์์๋๋๋ก ๊ธธ๋ฌ ๋์ ํต์ฌ : 1. ๊ฐ์ ํจ์ ๋์ ์ ์ธ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก NVI ๊ด์ฉ๊ตฌ ๋ฐ ์ ๋ต ํจํด์ ๋ค ์ ์๋ค. ์ด ์ค NVI ๊ด์ฉ๊ตฌ๋ ๊ทธ ์์ฒด๊ฐ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ํ ์์ด๋ค. 2. ๊ฐ์ฒด์ ํ์ํ ๊ธฐ๋ฅ์ ๋ฉค๋ฒ ํจ์๋ก๋ถํฐ ํด๋์ค ์ธ๋ถ์ ๋น๋ฉค๋ฒ ํจ์๋ก ์ฎ๊ธฐ๋ฉด, ๊ทธ ๋น๋ฉค๋ฒ ํจ์๋ ๊ทธ ํด๋์ค์ public ๋ฉค๋ฒ๊ฐ ์๋ ๊ฒ๋ค์ ์ ๊ทผํ ์ ์๋ค๋ ๋จ์ ์ด ์๊ธด๋ค. 3. std::function ๊ฐ์ฒด๋ ์ผ๋ฐํ๋ ํจ์ ํฌ์ธํฐ์ฒ๋ผ ๋์ํ๋ค. ์ด ๊ฐ์ฒด๋ ์ฃผ์ด์ง ๋์ ์๊ทธ๋์ฒ์ ํธํ๋๋..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zanGh/btrPuIpYy3M/sCEMxuetI0jsHBOBPuSDjK/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 34 : ์ธํฐํ์ด์ค ์์๊ณผ ๊ตฌํ ์์์ ์ฐจ์ด๋ฅผ ์ ๋๋ก ํ์ ํ๊ณ ๊ตฌ๋ณํ์ ํต์ฌ : 1. ์ธํฐํ์ด์ค ์์์ ๊ตฌํ ์์๊ณผ ๋ค๋ฅด๋ค. public ์์์์, ํ์ ํด๋์ค๋ ํญ์ ๊ธฐ๋ณธ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ๋ ๋ฌผ๋ ค๋ฐ๋๋ค. 2. ์์ ๊ฐ์ ํจ์๋ ์ธํฐํ์ด์ค ์์๋ง์ ํ์ฉํ๋ค. 3. ๋จ์(๋น์์) ๊ฐ์ ํจ์๋ ์ธํฐํ์ด์ค ์์๊ณผ ๋๋ถ์ด ๊ธฐ๋ณธ ๊ตฌํ์ ์์๋ ๊ฐ๋ฅํ๋๋ก ์ง์ ํ๋ค. 4. ๋น๊ฐ์ ํจ์๋ ์ธํฐํ์ด์ค ์์๊ณผ ๋๋ถ์ด ํ์ ๊ตฌํ์ ์์๋ ๊ฐํ๋๋ก ์ง์ ํ๋ค. ํด๋์ค ์ค๊ณ์์ ์ ์ฅ์์, ๋ฉค๋ฒ ํจ์์ ์ธํฐํ์ด์ค(์ ์ธ)๋ง์ ํ์ ํด๋์ค์ ์์๋ฐ๊ณ ์ถ์ ๋..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9j4Jf/btrPvvqjITz/Ki4r3a0MPFoYfd4tBxckWK/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 33 : ์์๋ ์ด๋ฆ์ ์จ๊ธฐ๋ ์ผ์ ํผํ์ ํต์ฌ : 1. ํ์ ํด๋์ค์ ์ด๋ฆ์ ๊ธฐ๋ณธ ํด๋์ค์ ์ด๋ฆ์ ๊ฐ๋ฆฐ๋ค. public ์์์์๋ ์ด๋ฐ ์ด๋ฆ ๊ฐ๋ฆผ ํ์์ ๋ฐ๋์งํ์ง ์๋ค. 2. ๊ฐ๋ ค์ง ์ด๋ฆ์ ๋ค์ ๋ณผ ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก, using ์ ์ธ ํน์ ์ ๋ฌ ํจ์๋ฅผ ์ธ ์ ์๋ค. ๋ค์ ์์ ์ฝ๋๋ฅผ ๋ณด์. class Base { private: int x; public: virtual void mf1() = 0; virtual void mf1(int); virtual void mf2(); void mf3(); void mf3(double); ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yP0RH/btrPwAE2UuJ/ymdDjrh56iXO2T3XU8kz01/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 32 : public ์์ ๋ชจํ์ ๋ฐ๋์ "is-a(...๋ ...์ ์ผ์ข ์ด๋ค)"๋ฅผ ๋ฐ๋ฅด๋๋ก ๋ง๋ค์ ํต์ฌ : public ์์์ ์๋ฏธ๋ "is-a(...๋ ...์ ์ผ์ข )"์ด๋ค. ๊ธฐ๋ณธ ํด๋์ค์ ์ ์ฉ๋๋ ๋ชจ๋ ๊ฒ๋ค์ด ํ์ ํด๋์ค์ ๊ทธ๋๋ก ์ ์ฉ๋์ด์ผ ํ๋ค. ์๋ํ๋ฉด ๋ชจ๋ ํ์ ํด๋์ค ๊ฐ์ฒด๋ ๊ธฐ๋ณธ ํด๋์ค ๊ฐ์ฒด์ ์ผ์ข ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ค Base ํด๋์ค๋ก๋ถํฐ Derived ํด๋์ค๊ฐ public ์์์ ๋ฐ์๋ค๋ฉด, Derived ํด๋์ค๋ Base ํด๋์ค๋ณด๋ค ๋ ํน์ํ ๊ฐ๋ ์ ๋ํ๋ด๊ฒ ๋๋ค. ์ฌ์ฉ์ฒ๊ฐ ์ ํ๋๋ค๊ณ ๋ด๋ ์ข๋ค. public ์์์ด ์ ๊ธฐ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vKXvu/btrPvkh96wW/4BGPg3hk5KSldztuoaceQK/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 31 : ํ์ผ ์ฌ์ด์ ์ปดํ์ผ ์์กด์ฑ์ ์ต๋๋ก ์ค์ด์ ํต์ฌ : 1. ์ปดํ์ผ ์์กด์ฑ์ ์ต์ํํ๋ ์์ ์ ๋ฐฐ๊ฒฝ์ด ๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ '์ ์' ๋์ ์ '์ ์ธ' ์ ์์กดํ๊ฒ ๋ง๋ค์๋ ๊ฒ์ด๋ค. ์ด ์์ด๋์ด์ ๊ธฐ๋ฐํ ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ๋ฒ์ ํธ๋ค ํด๋์ค์ ์ธํฐํ์ด์ค ํด๋์ค์ด๋ค. 2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํค๋๋ ๊ทธ ์์ฒด๋ก ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ์ด์ผ ํ๋ฉฐ ์ ์ธ๋ถ๋ง ๊ฐ๊ณ ์๋ ํํ์ฌ์ผ ํ๋ค. ์ด ๊ท์น์ ํ ํ๋ฆฟ์ด ์ฐ์ด๊ฑฐ๋ ์ฐ์ด์ง ์๊ฑฐ๋ ๋์ผํ๊ฒ ์ ์ฉํ์. C++ ๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ๋ ์ผ์ ์ผ๊ฐ๊ฒฌ์ด ์๋ค. ์์๋ฅผ ๋ณด์. class Person {..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bhfmHK/btrPwALLKAa/txo0tEwcnCDiAr7SScJdq0/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 30 : ์ธ๋ผ์ธ ํจ์๋ ๋ฏธ์ฃผ์๊ณ ์ฃผ์ ๋ฐ์ ธ์ ์ดํดํด ๋์ ํต์ฌ : 1. ํจ์ ์ธ๋ผ์ธ์ ์๊ณ , ์์ฃผ ํธ์ถ๋๋ ํจ์์ ๋ํด์๋ง ํ์. ์ด๋ ๊ฒ ํ๋ฉด ๋๋ฒ๊น ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ์ด๋๋ฆฌ ์ ๊ทธ๋ ์ด๋๊ฐ ์ฉ์ดํด์ง๊ณ , ์์นซ ์๊ธธ ์ ์๋ ์ฝ๋ ๋ถํ๋ฆผ ํ์์ด ์ต์ํ๋๋ฉฐ, ํ๋ก๊ทธ๋จ์ ์๋ ฅ์ด ๋ ๋นจ๋ผ์ง ์ ์๋ ์ฌ์ง๊ฐ ์ต๊ณ ๋ก ๋ง์์ง๋ค. 2. ํจ์ ํ ํ๋ฆฟ์ด ๋๊ฐ ํค๋ ํ์ผ์ ๋ค์ด๊ฐ๋ค๋ ์ผ๋ฐ์ ์ธ ๋ถ๋ถ๋ง ์๊ฐํด์ ์ด๋ค์ inline ์ผ๋ก ์ ์ธํ๋ฉด ์ ๋๋ค. ์ธ๋ผ์ธ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ํจ์ ๋ณธ๋ฌธ์ ๋ํด ๋ฌธ๋งฅ๋ณ(context-specific) ์ต์ ํ๋ฅผ ๊ฑธ๊ธฐ๊ฐ ์ฉ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bR27Rd/btrPvkh9QY0/xQkwVxRjiqsV5Pbo4mTtYK/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 29 : ์์ธ ์์ ์ฑ์ด ํ๋ณด๋๋ ๊ทธ๋ ์ํด ์ธ์ฐ๊ณ ๋ ์ธ์ฐ์! ํต์ฌ : 1. ์์ธ ์์ ์ฑ์ ๊ฐ์ถ ํจ์๋ ์คํ ์ค ์์ธ๊ฐ ๋ฐ์๋๋๋ผ๋ ์์์ ๋์ถ์ํค์ง ์์ผ๋ฉฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋๋ฝํ ์ฑ๋ก ๋ด๋ฒ๋ ค ๋์ง ์๋๋ค. ์ด๋ฐ ํจ์๋ค์ด ์ ๊ณตํ ์ ์๋ ์์ธ ์์ ์ฑ ๋ณด์ฅ์ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ฅ, ๊ฐ๋ ฅํ ๋ณด์ฅ, ์์ธ ๊ธ์ง ๋ณด์ฅ์ด ์๋ค. 2. ๊ฐ๋ ฅํ ์์ธ ์์ ์ฑ ๋ณด์ฅ์ '๋ณต์ฌ-ํ-๋ง๋ฐ๊พธ๊ธฐ' ๋ฐฉ๋ฒ์ ์จ์ ๊ตฌํํ ์ ์์ง๋ง, ๋ชจ๋ ํจ์์ ๋ํด ๊ฐ๋ ฅํ ๋ณด์ฅ์ด ์ค์ฉ์ ์ธ ๊ฒ์ ์๋๋ค. 3. ์ด๋ค ํจ์๊ฐ ์ ๊ณตํ๋ ์์ธ ์์ ์ฑ ๋ณด์ฅ์ ๊ฐ๋๋, ๊ทธ ํจ์๊ฐ ๋ด๋ถ์ ์ผ๋ก ํธ์ถํ๋ ํจ์๋ค..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ttqFC/btrPvjQ13F0/WKiP9VmqP3qkB3bCKiXk51/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 28 : ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ๋ํ 'ํธ๋ค'์ ๋ฐํํ๋ ์ฝ๋๋ ๋๋๋ก ํผํ์ ํต์ฌ : ์ด๋ค ๊ฐ์ฒด์ ๋ด๋ถ์์์ ๋ํ ํธ๋ค(์ฐธ์กฐ์, ํฌ์ธํฐ, ๋ฐ๋ณต์) ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋๋ก ํผํ์. ์บก์ํ ์ ๋๋ฅผ ๋์ด๊ณ , ์์ ๋ฉค๋ฒ ํจ์๊ฐ ๊ฐ์ฒด์ ์์์ฑ์ ์ ์งํ ์ฑ๋ก ๋์ํ ์ ์๋๋ก ํ๋ฉฐ, ๋ฌดํจ์ฐธ์กฐ ํธ๋ค์ด ์๊ธฐ๋ ๊ฒฝ์ฐ๋ฅผ ์ต์ํํ ์ ์๋ค. ํด๋์ค ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐ์๋ก ๋ฐํํ๋ ๊ฒ์ ์ฃผ์ํด์ผ ํ๋ค. ๋ค์ ์์๋ฅผ ๋ณด์. clas Point { public: Point(int x, int y); ... void setX(int newVal); voi..