๋ชฉ๋ก2022/10 (117)
KoreanFoodie's Study
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 12 : ๊ฐ์ฒด์ ๋ชจ๋ ๋ถ๋ถ์ ๋น ์ง์์ด ๋ณต์ฌํ์ ํต์ฌ : 1. ๊ฐ์ฒด ๋ณต์ฌ ํจ์๋ ์ฃผ์ด์ง ๊ฐ์ฒด์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ ๋ฐ ๋ชจ๋ ํด๋์ค ๋ถ๋ถ์ ๋น ๋จ๋ฆฌ์ง ๋ง๊ณ ๋ณต์ฌํด์ผ ํ๋ค. 2. ํด๋์ค์ ๋ณต์ฌ ํจ์ ๋ ๊ฐ๋ฅผ ๊ตฌํํ ๋, ํ ์ชฝ์ ์ด์ฉํด์ ๋ค๋ฅธ ์ชฝ์ ๊ตฌํํ๋ ค๋ ์๋๋ ์ ๋๋ก ํ์ง ๋ง์. ๊ทธ ๋์ , ๊ณตํต๋ ๋์์ ์ 3์ ํจ์์๋ค ๋ถ๋ฆฌํด ๋๊ณ ์์ชฝ์์ ์ด๊ฒ์ ํธ์ถํ๊ฒ ๋ง๋ค์ด์ ํด๊ฒฐํ์. ๋ณต์ฌ ์์ฑ์์ ๋ณต์ฌ ๋์ ์ฐ์ฐ์๋ฅผ ํตํ์ด ๊ฐ์ฒด ๋ณต์ฌ ํจ์(copying function) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฐ๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ค์ ๊ธฐ๋ณธ์ผ๋ก ๋ง๋ค๋ค ๋ณด๋, ์ฌ์ฉ์๊ฐ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 11 : operator= ์์๋ ์๊ธฐ๋์ ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋น ์ง์ง ์๋๋ก ํ์ ํต์ฌ : 1. operator= ๋ฅผ ๊ตฌํํ ๋, ์ด๋ค ๊ฐ์ฒด๊ฐ ๊ทธ ์์ ์ ๋์ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ๋๋ก ๋ง๋ค์. ์๋ณธ ๊ฐ์ฒด์ ๋ณต์ฌ๋์ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋น๊ตํด๋ ๋๊ณ , ๋ฌธ์ฅ์ ์์๋ฅผ ์ ์ ํ ์กฐ์ ํ ์๋ ์์ผ๋ฉฐ, ๋ณต์ฌ ํ ๋ง๋ฐ๊พธ๊ธฐ ๊ธฐ๋ฒ์ ์จ๋ ๋๋ค. 2. ๋ ๊ฐ ์ด์์ ๊ฐ์ฒด์ ๋ํด ๋์ํ๋ ํจ์๊ฐ ์๋ค๋ฉด, ์ด ํจ์์ ๋๊ฒจ์ง๋ ๊ฐ์ฒด๋ค์ด ์ฌ์ค ๊ฐ์ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ์ ์ ํํ๊ฒ ๋์ํ๋์ง ํ์ธํ์. ์ด๋ฐ ์ฝ๋๋ ์ฌ์ค ์ ๋ฒํ(legal) ์ฝ๋์ด๋ค. class Widget{ ...
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 10 : ๋์ ์ฐ์ฐ์๋ *this ์ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๊ฒ ํ์ ํต์ฌ : ๋์ ์ฐ์ฐ์๋ *this ์ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ค์ด๋ผ C++ ์ ๋์ ์ฐ์ฐ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์ฌ์ฌ์ฒ๋ผ ์ฎ์ผ ์ ์๋ค. int x, y, z; // ๋์ ์ ์ฐ์ธก ์ฐ๊ด(right-associative)์ด๋ค. x = y = z = 15; // ๋ฐ๋ผ์ ์ ์์ ์ค์ ๋ก ์๋์ ๊ฐ๋ค x = (y = (z = 15))); ๋์ ์ฐ์ฐ์ด ์ฌ์ฌ์ฒ๋ผ ์ฎ์ด๋ ค๋ฉด ๋์ ์ฐ์ฐ์๊ฐ ์ข๋ณ ์ธ์์ ๋ํ ์ฐธ์กฐ์๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค(์ผ์ข ์ ๊ด๋ก[convention] ์ด๋ค). ์ด๋ += , -..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 9 : ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ฉธ ๊ณผ์ ์ค์๋ ์ ๋๋ก ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ์ง ๋ง์ ํต์ฌ : ์์ฑ์ ๋ฐ ์๋ฉธ์ ์์์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ์ง ๋ง์! ๊ฐ์ ํจ์๋ผ๊ณ ํด๋, ์ง๊ธ ์คํ ์ค์ธ ์์ฑ์๋ ์๋ฉธ์์ ํด๋น๋๋ ํด๋์ค์ ํ์ ํด๋์ค ์ชฝ์ผ๋ก๋ ๋ด๋ ค๊ฐ์ง ์๋๋ค! ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ฉธ ๊ณผ์ ์ค์๋ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ ๋๋ก ์ ๋๋ค! ์์๋ฅผ ๋ณด์. // ๋ชจ๋ ๊ฑฐ๋์ ๋ํ ๊ธฐ๋ณธ ํด๋์ค class Transaction { public: Transaction(); // ํ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ก๊ทธ ๊ธฐ๋ก์ ๋ง๋ ๋ค virtual void logTransactio..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 8 : ์์ธ๊ฐ ์๋ฉธ์๋ฅผ ๋ ๋์ง ๋ชปํ๋๋ก ๋ถ๋ค์ด ๋์ ํต์ฌ : 1. ์๋ฉธ์์์๋ ์์ธ๊ฐ ๋น ์ ธ๋๊ฐ๋ฉด ์ ๋๋ค. ๋ง์ฝ ์๋ฉธ์ ์์์ ํธ์ถ๋ ํจ์๊ฐ ์์ธ๋ฅผ ๋์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด, ์ด๋ค ์์ธ์ด๋ ์ง ์๋ฉธ์์์ ๋ชจ๋ ๋ฐ์๋ธ ํ์ ์ผ์ผ ๋ฒ๋ฆฌ๋ ์ง ํ๋ก๊ทธ๋จ์ ๋๋ด๋ ์ง ํด์ผ ํ๋ค. 2. ์ด๋ค ํด๋์ค์ ์ฐ์ฐ์ด ์งํ๋๋ค๊ฐ ๋์ง ์์ธ์ ๋ํด ์ฌ์ฉ์๊ฐ ๋ฐ์ํด์ผ ํ ํ์๊ฐ ์๋ค๋ฉด, ํด๋น ์ฐ์ฐ์ ์ ๊ณตํ๋ ํจ์๋ ๋ฐ๋์ ๋ณดํต์ ํจ์(์ฆ, ์๋ฉธ์๊ฐ ์๋ ํจ์) ์ด์ด์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๋ณด์. class Widget { public: ... // ์ด ํจ์๋ก๋ถํฐ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 7 : ๋คํ์ฑ์ ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค์์๋ ์๋ฉธ์๋ฅผ ๋ฐ๋์ ๊ฐ์ ์๋ฉธ์๋ก ์ ์ธํ์ ํต์ฌ : 1. ๋คํ์ฑ์ ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค์๋ ๋ฐ๋์ ๊ฐ์ ์๋ฉธ์๋ฅผ ์ ์ธํด์ผ ํ๋ค. ์ฆ, ์ด๋ค ํด๋์ค๊ฐ ๊ฐ์ ํจ์๋ฅผ ํ๋๋ผ๋ ๊ฐ๊ณ ์์ผ๋ฉด, ์ด ํด๋์ค์ ์๋ฉธ์๋ ๊ฐ์ ์๋ฉธ์์ด์ด์ผ ํ๋ค. 2. ๊ธฐ๋ณธ ํด๋์ค๋ก ์ค๊ณ๋์ง ์์๊ฑฐ๋ ๋คํ์ฑ์ ๊ฐ๋๋ก ์ค๊ณ๋์ง ์์ ํด๋์ค์๋ ๊ฐ์์๋ฉธ์๋ฅผ ์ ์ธํ์ง ๋ง์์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ TimeKeeper ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ผ๋ก ํ์ ํด๋์ค์ ํ์ ์ ๋ง๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค๊ณ ๊ฐ์ ํ์. class TimeKeeper { ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 6 : ์ปดํ์ผ๋ฌ๊ฐ ๋ง๋ค์ด๋ธ ํจ์๊ฐ ํ์ ์์ผ๋ฉด ํ์คํ ์ด๋ค์ ์ฌ์ฉ์ ๊ธํด ๋ฒ๋ฆฌ์ ํต์ฌ : ์ปดํ์ผ๋ฌ์์ ์๋์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํ์ฉ์น ์์ผ๋ ค๋ฉด, ๋์๋๋ ๋ฉค๋ฒ ํจ์๋ฅผ private ์ผ๋ก ์ ์ธํ ํ์ ๊ตฌํ์ ํ์ง ์์ ์ฑ๋ก ๋์. Uncopyable ๊ณผ ๋น์ทํ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฐ๋ ๊ฒ๋ ํ ๋ฐฉ๋ฒ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ๋ถ๋์ฐ์ ํ๋งคํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฒ ๋์๋๋ฐ, ๊ฐ ์์ฐ์ ์ธ์์์ ํ๋๋ฐ์ ์๋ค๋ ๊ฒ์ ์ ์ฉํด ๋ฌ๋ผ๊ณ ์์ฒญํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ฆ, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ ์ปดํ์ผ์ด ๋๋ฉด ์๋๋ค๋ ๋ป์ด๋ค! class HomeForSale {...}; .....
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 5 : C++ ๊ฐ ์๊ทผ์ฌ์ฉ ๋ง๋ค์ด ํธ์ถํด ๋ฒ๋ฆฌ๋ ํจ์๋ค์ ์ด๊ฐ์ ์ธ์ฐ์ ํต์ฌ : ์ปดํ์ผ๋ฌ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํด๋์ค์ ๋ํด ๊ธฐ๋ณธ ์์ฑ์, ๋ณต์ฌ ์์ฑ์, ๋ณต์ฌ ๋์ ์ฐ์ฐ์, ์๋ฉธ์๋ฅผ ์์์ ์ผ๋ก ๋ง๋ค์ด ๋์ ์ ์๋ค ํด๋์ค๋ฅผ ๋ง๋ค ๋, ์ปดํ์ผ๋ฌ๋ ๊ธฐ๋ณธ ์์ฑ์, ๋ณต์ฌ ์์ฑ์, ๋ณต์ฌ ๋์ ์ฐ์ฐ์, ์๋ฉธ์๋ฅผ ์์์ ์ผ๋ก ์์ฑํ๋ค. ์๋ฉธ์๋ ํด๋น ํด๋์ค๊ฐ ์์ํ ๊ธฐ๋ณธ ํด๋์ค์ ์๋ฉธ์๊ฐ ๊ฐ์ ์๋ฉธ์๋ก ๋์ด ์์ง ์์ผ๋ฉด ์ญ์ ๋น๊ฐ์ ์๋ฉธ์๋ก ๋ง๋ค์ด์ง๋ค(๋ฌผ๋ก ์ฌ์ฉ์๊ฐ ์์ฑ์๋ฅผ ์ ์ธํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ง ์๋๋ค). ๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 4 : ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ์ ํต์ฌ : 1. ๊ธฐ๋ณธ์ ๊ณต ํ์ ์ ๊ฐ์ฒด๋ ์ง์ ์์ผ๋ก ์ด๊ธฐํํ์. 2. ์์ฑ์์์๋, ์์ฑ์ ๋ณธ๋ฌธ ๋ด๋ฌด์ ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ๋ํ ๋์ ๋ฌธ์ ๋ฃ์ง ์๊ณ ์ด๊ธฐํ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์. ๋ํ ๋ฐ์ดํฐ ๋ฉค๋ฒ๊ฐ ์ ์ธ๋ ์์์ ๋๊ฐ์ด ๋์ดํ์. 3. ์ฌ๋ฌ ๋ฒ์ญ ๋จ์์ ์๋ ๋น์ง์ญ ์ ์ ๊ฐ์ฒด๋ค์ ์ด๊ธฐํ ์์ ๋ฌธ์ ๋ ํผํด์ ์ค๊ณํด์ผ ํ๋ค. ๋น์ง์ญ ์ ์ ๊ฐ์ฒด๋ฅผ ์ง์ญ ์ ์ ๊ฐ์ฒด๋ก ๋ฐ๊พธ๋ฉด ๋๋ค. ์์ฑ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฐ๋ ๊ฒ์, ์์ฑ๊ณผ ๋์์ '์ด๊ธฐํ' ํ๋ ๊ฒ์ด ์๋, '๋์ '์ ํํ๋ ๊ฒ์ด๋ค. class Us..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 3 : ๋์๋ง ๋ณด์ด๋ฉด const ๋ฅผ ๋ค์ด๋ ๋ณด์! ํต์ฌ : 1. const ๋ฅผ ๋ถ์ฌ ์ ์ธํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉ์์ ์๋ฌ๋ฅผ ์ก์๋ด๋ ๋ฐ ๋์์ ์ค๋ค. const ๋ ์ด๋ค ์ ํจ๋ฒ์์ ์๋ ๊ฐ์ฒด์๋ ๋ถ์ ์ ์์ผ๋ฉฐ, ํจ์ ๋งค๊ฐ๋ณ์ ๋ฐ ๋ฐํ ํ์ ์๋ ๋ถ์ ์ ์์ผ๋ฉฐ, ๋ฉค๋ฒ ํจ์์๋ ๋ถ์ ์ ์๋ค. 2. ์ปดํ์ผ๋ฌ ์ชฝ์์ ๋ณด๋ฉด ๋นํธ์์ค ์์์ฑ์ ์ง์ผ์ผ ํ์ง๋ง, ์ฐ๋ฆฌ๋ ๊ฐ๋ ์ ์ธ(๋ ผ๋ฆฌ์ ์ธ) ์์์ฑ์ ์ฌ์ฉํด์ ํ๋ก๊ทธ๋๋ฐํด์ผ ํ๋ค. 3. ์์ ๋ฉค๋ฒ ๋น ๋น์์ ๋ฉค๋ฒ ํจ์๊ฐ ๊ธฐ๋ฅ์ ์ผ๋ก ์๋ก ๋๊ฐ๊ฒ ๊ตฌํ๋์ด ์์ ๊ฒฝ์ฐ์๋ ์ฝ๋ ์ค๋ณต์ ํผํ๋ ๊ฒ์ด ์ข์๋ฐ, ์ด๋..