๋ชฉ๋ก2022/10 (117)
KoreanFoodie's Study

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 ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๊ทธ ๊ฐ์ ๊ฐ ๊ฐ์ธ๊ณ ์๋ ์ค์ ์์์ผ๋ก ๋ณํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๊ธด๋ค. ..

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 ๋ฅผ ์ฌ์ฉํ๋ค ์ค๋งํธ ํฌ..