๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 24 : ํ์ ๋ณํ์ด ๋ชจ๋ ๋งค๊ฐ๋ณ์์ ๋ํด ์ ์ฉ๋์ด์ผ ํ๋ค๋ฉด ๋น๋ฉค๋ฒ ํจ์๋ฅผ ์ ์ธํ์ ํต์ฌ : ์ด๋ค ํจ์์ ๋ค์ด๊ฐ๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์(this ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ ํฌํจํด์) ์ ๋ํด ํ์ ๋ณํ์ ํด ์ค ํ์๊ฐ ์๋ค๋ฉด, ๊ทธ ํจ์๋ ๋น๋ฉค๋ฒ์ด์ด์ผ ํ๋ค. ์ ๋ฆฌ์๋ฅผ ๋ํ๋ด๋ ํด๋์ค๊ฐ ์๋ค๊ณ ํ๊ณ , ๊ณฑ์ ์ฐ์ฐ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์. class Rational { public: Rational(int numerator = 0, int denominator = 1); int numerator() const; int denominator() const;..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 23 : ๋ฉค๋ฒ ํจ์๋ณด๋ค๋ ๋น๋ฉค๋ฒ ๋นํ๋ ๋ ํจ์์ ๋ ๊ฐ๊น์์ง์ ํต์ฌ : ๋ฉค๋ฒ ํจ์๋ณด๋ค๋ ๋น๋ฉค๋ฒ ๋นํ๋ ๋ ํจ์๋ฅผ ์์ฃผ ์ฐ์. ์บก์ํ ์ ๋๊ฐ ๋์์ง๊ณ , ํจํค์ง ์ ์ฐ์ฑ๋ ์ปค์ง๋ฉฐ, ๊ธฐ๋ฅ์ ์ธ ํ์ฅ์ฑ๋ ๋์ด๋๋ค. ์น ๋ธ๋ผ์ฐ์ ์์ ์บ์๋ฅผ ๋น์ฐ๋ ํจ์, URL ๊ธฐ๋ก์ ์์ ๋ ํจ์, ์ฟ ํค๋ฅผ ์ ๊ฑฐํ๋ ํจ์๊ฐ ์๋ค๊ณ ํ์. ์ธ ๋์์ ๋์์ ํ๋๋ก ๋ง๋๋ ํจ์๋ฅผ ์ ์ํ ๋, ๋ฉค๋ฒ ํจ์๋ก ๋ง๋๋ ๊ฒ์ด ์ข์๊น, ๋น๋ฉค๋ฒ ํจ์๋ก ์ ๊ณตํ๋ ๊ฒ์ด ๋ ์ข์๊น? class WebBrowser { public: void clearCache(); void clearHist..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 22 : ๋ฐ์ดํฐ ๋ฉค๋ฒ๊ฐ ์ ์ธ๋ ๊ณณ์ private ์์ญ์์ ๋ช ์ฌํ์ ํต์ฌ : 1. ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ private ๋ฉค๋ฒ๋ก ์ ์ธํ์ ์ด๋ฅผ ํตํด ํด๋์ค ์ ์์๋ ๋ฌธ๋ฒ์ ์ผ๋ก ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ ์ ๊ทผ ํต๋ก๋ฅผ ์ ๊ณตํ ์ ์๊ณ , ํ์์ ๋ฐ๋ผ์๋ ์ธ๋ฐํ ์ ๊ทผ ์ ์ด๋ ๊ฐ๋ฅํ๋ฉฐ, ํด๋์ค์ ๋ถ๋ณ์์ฑ์ ๊ฐํํ ์ ์์ ๋ฟ ์๋๋ผ, ๋ด๋ถ ๊ตฌํ์ ์ตํต์ฑ๋ ๋ฐํํ ์ ์๋ค. 2. protected ๋ public ๋ณด๋ค ๋ ๋ง์ด '๋ณดํธ' ๋ฐ๊ณ ์๋ ๊ฒ์ด ์ ๋๋ก ์๋๋ค. ๋จผ์ , ๋ฐ์ดํฐ ๋ฉค๋ฒ์ public ๋์ private ์ ์จ์ผ ํ๋ ์ด์ ๋ฅผ ์์๋ณด์. ๋ฌธ๋ฒ์ ์ผ๊ด..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 21 : ํจ์์์ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ ๊ฒฝ์ฐ์ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋ ค๊ณ ๋ค์ง ๋ง์ ํต์ฌ : 1. ์ง์ญ ์คํ ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋ ์ผ, ํน์ ํ์ ํ ๋น๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋ ์ผ, ๋๋ ์ง์ญ ์ ์ ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋ ์ผ์ ๊ทธ๋ฐ ๊ฐ์ฒด๊ฐ ๋ ๊ฐ ์ด์ ํ์ํด์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ์ ๋๋ก ํ์ง ๋ง์(ํญ๋ชฉ 4๋ฅผ ๋ณด๋ฉด ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์์์ ์ ์ ํ ์ฝ๋ ์์ ๋ฅผ ์ฐพ์ ์ ์๋ค) ์ ๋ฆฌ์๋ฅผ ํํํ๋ ํด๋์ค์ ๊ณฑ์ operator ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ฉด, ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค! // 1. result ๊ฐ์ฒด๋ฅผ ์์ฑ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 20 : '๊ฐ์ ์ํ ์ ๋ฌ' ๋ณด๋ค๋ '์์๊ฐ์ฒด ์ฐธ์กฐ์์ ์ํ ์ ๋ฌ' ๋ฐฉ์์ ํํ๋ ํธ์ด ๋๊ฐ ๋ซ๋ค ํต์ฌ : 1. '๊ฐ์ ์ํ ์ ๋ฌ' ๋ณด๋ค๋ '์์ ๊ฐ์ฒด ์ฐธ์กฐ์์ ์ํ ์ ๋ฌ' ์ ์ ํธํ์. ๋์ฒด์ ์ผ๋ก ํจ์จ์ ์ผ ๋ฟ๋ง ์๋๋ผ ๋ณต์ฌ์์ค ๋ฌธ์ ๊น์ง ๋ง์์ค๋ค. 2. ์ด๋ฒ ํญ๋ชฉ์์ ๋ค๋ฃฌ ๋ฒ์น์ ๊ธฐ๋ณธ์ ๊ณต ํ์ ๋ฐ STL ๋ฐ๋ณต์, ๊ทธ๋ฆฌ๊ณ ํจ์ ๊ฐ์ฒด ํ์ ์๋ ๋ง์ง ์๋๋ค. ์ด๋ค์ ๋ํด์๋ '๊ฐ์ ์ํ ์ ๋ฌ' ์ด ๋ ์ ์ ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก C++ ๋ ํจ์๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๊ฑฐ๋ ์ ๋ฌํ ๋ '๊ฐ์ ์ํ ์ ๋ฌ(pass-by-value)' ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์ด๋ฌํ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 19 : ํด๋์ค ์ค๊ณ๋ ํ์ ์ค๊ณ์ ๋๊ฐ์ด ์ทจ๊ธํ์ ํต์ฌ : ํด๋์ค ์ค๊ณ๋ ํ์ ์ค๊ณ์ด๋ค. ์๋ก์ด ํ์ ์ ์ ์ํ๊ธฐ ์ ์, ์ด๋ฒ ํญ๋ชฉ์ ๋์จ ๋ชจ๋ ๊ณ ๋ ค์ฌํญ์ ๋น ์ง์์ด ์ ๊ฒํด ๋ณด์! C++ ์์ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํ๋ค๋ ๊ฒ์ ์๋ก์ด ํ์ ์ ํ๋ ์ ์ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ์์๋ค์ ์๊ณ ํ ํ ๋ง๋ค์ด ๋ณด์! ์๋ก ์ ์ํ ํ์ ์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ฉธ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ ธ์ผ ํ๋๊ฐ? (operator new, operator delete[] ๋ฑ๋ฑ) ๊ฐ์ฒด ์ด๊ธฐํ๋ ๊ฐ์ฒด ๋์ ๊ณผ ์ด๋ป๊ฒ ๋ฌ๋ผ์ผ ํ๋๊ฐ? ์๋ก์ด ํ์ ์ผ๋ก ๋ง๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ ์ํด..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 18 : ์ธํฐํ์ด์ค ์ค๊ณ๋ ์ ๋๋ก ์ฐ๊ธฐ์ ์ฝ๊ฒ, ์ํฐ๋ฆฌ๋ก ์ฐ๊ธฐ์ ์ด๋ ต๊ฒ ํ์ ํต์ฌ : 1. ์ข์ ์ธํฐํ์ด์ค๋ ์ ๋๋ก ์ฐ๊ธฐ์ ์ฌ์ฐ๋ฉฐ ์ํฐ๋ฆฌ๋ก ์ฐ๊ธฐ์ ์ด๋ ต๋ค. ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ๋๋ ์ด ํน์ฑ์ ์ง๋ ์ ์๋๋ก ๊ณ ๋ฏผํ๊ณ ๋ ๊ณ ๋ฏผํ์ 2. ์ธํฐํ์ด์ค์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์ ์ด๋๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ธํฐํ์ด์ค ์ฌ์ด์ ์ผ๊ด์ฑ ์ก์์ฃผ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์ ๊ณต ํ์ ๊ณผ์ ๋์ ํธํ์ฑ ์ ์งํ๊ธฐ๊ฐ ์๋ค. 3. ์ฌ์ฉ์์ ์ค์๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋ก์ด ํ์ ๋ง๋ค๊ธฐ, ํ์ ์ ๋ํ ์ฐ์ฐ์ ์ ํํ๊ธฐ, ๊ฐ์ฒด์ ๊ฐ์ ๋ํด ์ ์ฝ ๊ฑธ๊ธฐ, ์์ ๊ด๋ฆฌ ์์ ์ ์ฌ์ฉ์ ์ฑ ์์ผ๋ก ๋์ง ์๊ธฐ๊ฐ ์..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 17 : new ๋ก ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ค๋งํธ ํฌ์ธํฐ์ ์ ์ฅํ๋ ์ฝ๋๋ ๋ณ๋์ ํ ๋ฌธ์ฅ์ผ๋ก ๋ง๋ค์ ํต์ฌ : new ๋ก ์์ํ ๊ฐ์ฒด๋ฅผ ์ค๋งํธ ํฌ์ธํฐ๋ก ๋ฃ๋ ์ฝ๋๋ ๋ณ๋์ ํ ๋ฌธ์ฅ์ผ๋ก ๋ง๋ค์. ์ด๊ฒ์ด ์ ๋์ด ์์ผ๋ฉด, ์์ธ๊ฐ ๋ฐ์๋ ๋ ๋๋ฒ๊น ํ๊ธฐ ํ๋ ์์ ๋์ถ์ด ์ด๋๋ ์ ์๋ค! ์ฒ๋ฆฌ ์ฐ์ ์์๋ฅผ ์๋ ค์ฃผ๋ ํจ์๊ฐ ํ๋ ์๊ณ , ๋์ ์ผ๋ก ํ ๋นํ Widget ๊ฐ์ฒด์ ๋ํด ์ด๋ค ์ฐ์ ์์์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ํจ์๊ฐ ํ๋ ์๋ค๊ณ ๊ฐ์ ํ์. int priority(); void processWidget(std::shared_ptr pw, int prio..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 16 : new ๋ฐ delete ๋ฅผ ์ฌ์ฉํ ๋๋ ํํ๋ฅผ ๋ฐ๋์ ๋ง์ถ์ ํต์ฌ : new ํํ์์ [ ] ๋ฅผ ์ผ์ผ๋ฉด, ๋์๋๋ delete ํํ์์๋ [ ] ๋ฅผ ์จ์ผ ํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, new ํํ์์ [ ] ๋ฅผ ์ ์ผ์ผ๋ฉด, ๋์๋๋ delete ํํ์์๋ [ ] ๋ฅผ ์ฐ์ง ๋ง์์ผ ํ๋ค. ์๋ ์ฝ๋๋ ์ด๋ค ๋ถ๋ถ์ด ์๋ชป๋์์๊น? std::string *stringArray = new std::string[100]; ... delete stringArray; stringArray ๋ ๋ฐฐ์ด์ด๋ฏ๋ก, delete[] ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฐฐ์ด์ ๊ฐ์ฒด ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 15 : ์์ ๊ด๋ฆฌ ํด๋์ค์์ ๊ด๋ฆฌ๋๋ ์์์ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ํ์ ํต์ฌ : 1. ์ค์ ์์์ ์ง์ ์ ๊ทผํด์ผ ํ๋ ๊ธฐ์กด API ๋ค๋ ๋ง๊ธฐ ๋๋ฌธ์, RAII ํด๋์ค๋ฅผ ๋ง๋ค ๋๋ ๊ทธ ํด๋์ค๊ฐ ๊ด๋ฆฌํ๋ ์์์ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ด์ด ์ฃผ์ด์ผ ํ๋ค. 2. ์์ ์ ๊ทผ์ ๋ช ์์ ๋ณํ ํน์ ์์์ ๋ณํ์ ํตํด ๊ฐ๋ฅํ๋ค. ์์ ์ฑ๋ง ๋ฐ์ง๋ฉด ๋ช ์์ ๋ณํ์ด ๋์ฒด์ ์ผ๋ก ๋ ๋ซ์ง๋ง, ๊ณ ๊ฐ ํธ์์ฑ์ ๋๊ณ ๋ณด๋ฉด ์์์ ๋ณํ์ด ๊ด์ฐฎ๋ค. ๋ค์์ ๊ฒฝ์ฐ์ฒ๋ผ, RAII ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๊ทธ ๊ฐ์ ๊ฐ ๊ฐ์ธ๊ณ ์๋ ์ค์ ์์์ผ๋ก ๋ณํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๊ธด๋ค. ..