๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 44 : ๋งค๊ฐ๋ณ์์ ๋ ๋ฆฝ์ ์ธ ์ฝ๋๋ ํ ํ๋ฆฟ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ์ํค์ ํต์ฌ : 1. ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ๋น์ท๋น์ทํ ํด๋์ค์ ํจ์๊ฐ ์ฌ๋ฌ ๋ฒ ๋ง๋ค์ด์ง๋ค. ๋ฐ๋ผ์ ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์์ ์ข ์๋์ง ์์ ํ ํ๋ฆฟ ์ฝ๋๋ ๋น๋ํ์ ์์ธ์ด ๋๋ค. 2. ๋นํ์ ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ก ์๊ธฐ๋ ์ฝ๋ ๋น๋ํ์ ๊ฒฝ์ฐ, ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ฅผ ํจ์ ๋งค๊ฐ๋ณ์ ํน์ ํด๋์ค ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ก ๋์ฒดํจ์ผ๋ก์จ ๋น๋ํ ์ข ์ข ์์จ ์ ์๋ค. 3. ํ์ ๋งค๊ฐ๋ณ์๋ก ์๊ธฐ๋ ์ฝ๋ ๋น๋ํ์ ๊ฒฝ์ฐ, ๋์ผํ ์ด์ง ํํ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์ธ์คํด์คํ๋๋ ํ์ ๋ค์ด ํ ๊ฐ์ง ํจ์ ๊ตฌํ์ ๊ณต์ ํ๊ฒ ๋ง๋ฆ์ผ๋ก์จ ๋น๋ํ๋ฅผ ๊ฐ์์ํฌ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 43 : ํ ํ๋ฆฟ์ผ๋ก ๋ง๋ค์ด์ง ๊ธฐ๋ณธ ํด๋์ค ์์ ์ด๋ฆ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์์ ๋์ ํต์ฌ : ํ์ ํด๋์ค ํ ํ๋ฆฟ์์ ๊ธฐ๋ณธ ํด๋์ค ํ ํ๋ฆฟ์ ์ด๋ฆ์ ์ฐธ์กฐํ ๋๋, "this->" ๋ฅผ ์ ๋์ฌ๋ก ๋ถ์ด๊ฑฐ๋ ๊ธฐ๋ณธ ํด๋์ค ํ์ ๋ฌธ์ ๋ช ์์ ์ผ๋ก ์จ ์ฃผ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ์ ํ ํ๋ฆฟ ํด๋์ค ์์ํ๋ ๋ค์ ์์ ์ฝ๋๋ฅผ ๋ณด์. class CompanyA { public: void sendCleartext(const std::string& msg); void sendEncrypted(const std::string& msg); }; // CompanyB, Compan..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 42 : typename ์ ๋ ๊ฐ์ง ์๋ฏธ๋ฅผ ์ ๋๋ก ํ์ ํ์ ํต์ฌ : 1. ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ ๋, class ๋ฐ typename ์ ์๋ก ๋ฐ๊พธ์ด ์จ๋ ๋ฌด๋ฐฉํ๋ค. 2. ์ค์ฒฉ ์์กด ํ์ ์ด๋ฆ์ ์๋ณํ๋ ์ฉ๋์๋ ๋ฐ๋์ typename ์ ์ฌ์ฉํ๋ค. ๋จ, ์ค์ฒฉ ์์กด ์ด๋ฆ์ด ๊ธฐ๋ณธ ํด๋์ค ๋ฆฌ์คํธ์ ์๊ฑฐ๋ ๋ฉค๋ฒ ์ด๊ธฐํ ๋ฆฌ์คํธ ๋ด์ ๊ธฐ๋ณธ ํด๋์ค ์๋ณ์๋ก ์๋ ๊ฒฝ์ฐ์๋ ์์ธ์ด๋ค. ์ง๋ฌธ : ์๋์ ๋ ํ ํ๋ฆฟ ์ ์ธ๋ฌธ์ ์ฐ์ธ class ์ typename ์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น? template class Widget; template class Wi..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 41 : ํ ํ๋ฆฟ ํ๋ก๊ทธ๋๋ฐ์ ์ฒ๋ฆฟ๊ธธ๋ ์์์ ์ธํฐํ์ด์ค์ ์ปดํ์ผ ํ์ ๋คํ์ฑ๋ถํฐ ํต์ฌ : 1. ํด๋์ค ๋ฐ ํ ํ๋ฆฟ์ ๋ชจ๋ ์ธํฐํ์ด์ค์ ๋คํ์ฑ์ ์ง์ํ๋ค. 2. ํด๋์ค์ ๊ฒฝ์ฐ, ์ธํฐํ์ด์ค๋ ๋ช ์์ ์ด๋ฉฐ ํจ์์ ์๊ทธ๋์ฒ๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค. ๋คํ์ฑ์ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๊ฐ์ ํจ์๋ฅผ ํตํด ๋ํ๋๋ค. 3. ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์์ ๊ฒฝ์ฐ, ์ธํฐํ์ด์ค๋ ์์์ ์ด๋ฉฐ ์ ํจ ํํ์์ ๊ธฐ๋ฐ์ ๋์ด ๊ตฌ์ฑ๋๋ค. ๋คํ์ฑ์ ์ปดํ์ผ ์ค์ ํ ํ๋ฆฟ ์ธ์คํด์คํ์ ํจ์ ์ค๋ฒ๋ก๋ฉ ๋ชจํธ์ฑ ํด๊ฒฐ์ ํตํด ๋ํ๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ณ๋ฅผ ํ์ ์ํค๋ ์ถ์ ๋ช ์์ ์ธํฐํ์ด์ค(ex..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 40 : ๋ค์ค ์์์ ์ฌ์ฌ์๊ณ ํด์ ์ฌ์ฉํ์ ํต์ฌ : 1. ๋ค์ค ์์์ ๋จ์ผ ์์๋ณด๋ค ๋ณต์กํ๋ค. ์๋ก์ด ๋ชจํธ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๋ฟ ์๋๋ผ ๊ฐ์ ์์์ด ํ์ํด์ง ์๋ ์๋ค. 2. ๊ฐ์ ์์์ ์ฐ๋ฉด ํฌ๊ธฐ ๋น์ฉ, ์๋ ๋น์ฉ์ด ๋์ด๋๋ฉฐ ์ด๊ธฐํ ๋ฐ ๋์ ์ฐ์ฐ์ ๋ณต์ก๋๊ฐ ์ปค์ง๋ค. ๋ฐ๋ผ์ ๊ฐ์ ๊ธฐ๋ณธ ํด๋์ค์๋ ๋ฐ์ดํฐ๋ฅผ ๋์ง ์๋ ๊ฒ์ด ํ์ค์ ์ผ๋ก ๊ฐ์ฅ ์ค์ฉ์ ์ด๋ค. 3. ๋ค์ค ์์์ ์ ๋ฒํ๊ฒ ์ธ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ฌ๋ฌ ์๋๋ฆฌ์ค ์ค ํ๋๋, ์ธํฐํ์ด์ค ํด๋์ค๋ก๋ถํฐ public ์์์ ์ํด๊ณผ ๋์์ ๊ตฌํ์ ๋๋ ํด๋์ค๋ก๋ถํฐ private ์์์ ์ํค๋ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 39 : private ์์์ ์ฌ์ฌ์๊ณ ํด์ ๊ตฌ์ฌํ์ ํต์ฌ : 1. private ์์์ ์๋ฏธ๋ is-implmented-in-terms-of(...๋ ...๋ฅผ ์จ์ ๊ตฌํ๋จ) ์ด๋ค. ๋๊ฐ ๊ฐ์ฒด ํฉ์ฑ๊ณผ ๋น๊ตํด์ ์ฐ์ด๋ ๋ถ์ผ๊ฐ ๋ง์ง๋ ์์ง๋ง, ํ์ ํด๋์ค ์ชฝ์์ ๊ธฐ๋ณธ ํด๋์ค์ protected ๋ฉค๋ฒ์ ์ ๊ทผํด์ผ ํ ๊ฒฝ์ฐ ํน์ ์์๋ฐ์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ ์ํด์ผ ํ ๊ฒฝ์ฐ์๋ private ์์์ด ๋๋ฆ๋๋ก ์๋ฏธ๊ฐ ์๋ค. 2. ๊ฐ์ฒด ํฉ์ฑ๊ณผ ๋ฌ๋ฆฌ, private ์์์ ๊ณต๋ฐฑ ๊ธฐ๋ณธ ํด๋์ค ์ต์ ํ(EBO) ๋ฅผ ํ์ฑํ์ํฌ์ ์๋ค. ์ด๋ ๊ฐ์ฒด ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ๊ณ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 38 : "has-a(...๋...๋ฅผ ๊ฐ์ง)" ํน์ "is-implemented-in-terms-of(...๋...๋ฅผ ์จ์ ๊ตฌํ๋จ)"๋ฅผ ๋ชจํํํ ๋๋ ๊ฐ์ฒด ํฉ์ฑ์ ์ฌ์ฉํ์ ํต์ฌ : 1. ๊ฐ์ฒด ํจ์ฑ(composition)์ ์๋ฏธ๋ public ์์์ด ๊ฐ์ง ์๋ฏธ์ ์์ ํ ๋ค๋ฅด๋ค. 2. ์์ฉ ์์ญ์์ ๊ฐ์ฒด ํฉ์ฑ์ ์๋ฏธ๋ has-a(...๋...๋ฅผ ๊ฐ์ง)์ด๋ค. ๊ตฌํ ์์ญ์์๋ is-implemented-in-terms-of(...๋ ...๋ฅผ ์จ์ ๊ตฌํ๋จ)์ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค. ํฉ์ฑ(composition) ์ด๋, ์ด๋ค ํ์ ์ ๊ฐ์ฒด๋ค์ด ๊ทธ์ ๋ค๋ฅธ ํ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 37 : ์ด๋ค ํจ์์ ๋ํด์๋ ์์๋ฐ์ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ๋๋ก ์ฌ์ ์ํ์ง ๋ง์ ํต์ฌ : ์์๋ฐ์ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ๋๋ก ์ฌ์ ์ํด์๋ ์ ๋๋ค. ์๋ํ๋ฉด ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋๋ ๋ฐ๋ฉด, ๊ฐ์ ํจ์(์ค๋ฒ๋ผ์ด๋ ๊ฐ๋ฅํ ์ ์ผํ ํจ์)๋ ๋์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ ์์๋ฅผ ๋ณด์. class Shape { public: enum ShapeColor { Red, Green, Blue }; // ๋ชจ๋ ๋ํ์ ์๊ธฐ ์์ ์ ๊ทธ๋ฆฌ๋ ํจ์๋ฅผ ์ ๊ณตํด์ผ ํจ virtual void draw(ShapeColor color = Red) ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 36 : ์์๋ฐ์ ๋น๊ฐ์ ํจ์๋ฅผ ํ์ ํด๋์ค์์ ์ฌ์ ์ํ๋ ๊ฒ์ ์ ๋ ๊ธ๋ฌผ! ํต์ฌ : ์์๋ฐ์ ๋น๊ฐ์ ํจ์๋ฅผ ์ฌ์ ์ํ๋ ์ผ์ ์ ๋๋ก ํ์ง ๋ง์ ์ฌ์ค ์ด ํญ๋ชฉ์ ๋น์ฐํ๋ค๋ฉด ๋น์ฐํ๋ฐ, ๋น๊ฐ์ ํจ์๋ฅผ ์์๋ฐ๋๋ค๋ ๊ฒ์ ๊ธฐ๋ฐ ํด๋์ค์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ชจ๋ ๋ฌผ๋ ค๋ฐ๋๋ค๋ ๋ป์ด๋ฏ๋ก ํ์ํด๋์ค์์ ์ฌ์ ์ํ๋ค๋๊ฒ ์ด๋ก ์ ์ผ๋ก๋ ๋ชจ์๋๊ฒ ๋๋ค. ํด๋น ๊ธฐ๋ฐ ํด๋์ค๋ฅผ ๋ฌผ๋ ค๋ฐ์ ํด๋์ค๋ ํด๋น ๋น๊ฐ์ ํด๋์ค๋ฅผ ํธ์ถํ ๋ ๊ธฐ๋ฐ ํด๋์ค์์ ์๋ํ ๋น๊ฐ์ ํจ์์ ๋์์ ๊ทธ๋๋ก ์ฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค! ์์๋ฅผ ํ๋ ๋ณด์. class B { public: void m..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 35 : ๊ฐ์ ํจ์ ๋์ ์ธ ๊ฒ๋ค๋ ์๊ฐํด ๋๋ ์์ธ๋ฅผ ์์๋๋๋ก ๊ธธ๋ฌ ๋์ ํต์ฌ : 1. ๊ฐ์ ํจ์ ๋์ ์ ์ธ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก NVI ๊ด์ฉ๊ตฌ ๋ฐ ์ ๋ต ํจํด์ ๋ค ์ ์๋ค. ์ด ์ค NVI ๊ด์ฉ๊ตฌ๋ ๊ทธ ์์ฒด๊ฐ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ํ ์์ด๋ค. 2. ๊ฐ์ฒด์ ํ์ํ ๊ธฐ๋ฅ์ ๋ฉค๋ฒ ํจ์๋ก๋ถํฐ ํด๋์ค ์ธ๋ถ์ ๋น๋ฉค๋ฒ ํจ์๋ก ์ฎ๊ธฐ๋ฉด, ๊ทธ ๋น๋ฉค๋ฒ ํจ์๋ ๊ทธ ํด๋์ค์ public ๋ฉค๋ฒ๊ฐ ์๋ ๊ฒ๋ค์ ์ ๊ทผํ ์ ์๋ค๋ ๋จ์ ์ด ์๊ธด๋ค. 3. std::function ๊ฐ์ฒด๋ ์ผ๋ฐํ๋ ํจ์ ํฌ์ธํฐ์ฒ๋ผ ๋์ํ๋ค. ์ด ๊ฐ์ฒด๋ ์ฃผ์ด์ง ๋์ ์๊ทธ๋์ฒ์ ํธํ๋๋..