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

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 35 : ์ค๋ ๋ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ๋ณด๋ค ๊ณผ์ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ํธํ๋ผ ํต์ฌ : 1. std::thread API ์์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ ํจ์์ ๋ฐํ๊ฐ์ ์ง์ ์ป์ ์ ์์ผ๋ฉฐ, ๋ง์ผ ๊ทธ๋ฐ ํจ์๊ฐ ์์ธ๋ฅผ ๋์ง๋ฉด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ค. 2. ์ค๋ ๋ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ค๋ ๋ ๊ณ ๊ฐ, ๊ณผ๋ค๊ตฌ๋ , ๋ถํ ๊ท ํํ, ์ ํ๋ซํผ์ผ๋ก์ ์ ์์ ๋ ์๊ฐ ์ง์ ์ฒ๋ฆฌํด์ผ ํ๋ค. 3. std::async ์ ๊ธฐ๋ณธ ์๋ ๋ฐฉ์นจ์ ์ด์ฉํ ๊ณผ์ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ทธ๋ฐ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ฅผ ์์์ ์ฒ๋ฆฌํด์ค๋ค. doAsyncWork ๋ผ๋ ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๋ค๊ณ ํ์. ๋ฐฉ..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 34 : std::bind ๋ณด๋ค ๋๋ค๋ฅผ ์ ํธํ๋ผ ํต์ฌ : 1. std::bind ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋๋ค๊ฐ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ํํ๋ ฅ์ด ์ข๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ํจ์จ์ ์ด๋ค. 2. C++14 ๊ฐ ์๋ C++11 ์์๋ ์ด๋ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ๊ตฌํํ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ํ ํ๋ฆฟํ๋ ํจ์ ํธ์ถ ์ฐ์ฐ์์ ๋ฌถ์ผ๋ ค ํ ๋ std::bind ๊ฐ ์ ์ฉํ ์ ์๋ค. C++11 ์์๋ ๊ฑฐ์ ํญ์, C++14 ์์๋ ํ๊ณ ํ๊ฒ ๋๋ค๊ฐ std::bind ์ ๋นํด ์ฐ์ํ ์ ํ์ด๋ค. ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๋ณด์. // ์๊ฐ์์ ํ ์ง์ ์ ๋ํํ๋ ํ์ ๋ณ์นญ using Time = std::chro..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 33 : std::forward ๋ฅผ ํตํด ์ ๋ฌํ auto&& ๋งค๊ฐ๋ณ์์๋ decltype ์ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. std::forward ๋ฅผ ํตํด ์ ๋ฌํ auto&& ๋งค๊ฐ๋ณ์์๋ decltype ์ ์ฌ์ฉํ๋ผ. C+14 ์์ ๊ฐ์ฅ ๊ณ ๋ฌด์ ์ธ ๊ธฐ๋ฅ์ ์ผ๋ฐ์ ๋๋ค(generic lambdas), ์ฆ ๋งค๊ฐ ๋ณ์์ auto ๋ฅผ ์ฌ์ฉํ๋ ๋๋ค์ด๋ค. ์์๋ฅผ ๋ณด์. auto f = [](auto x) { return normalized(x); }; ์ ๋๋ค๊ฐ ์ฐ์ถํ๋ ํด๋ก์ ํด๋์ค์ ํจ์ ํธ์ถ ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค. class ์ปดํ์ผ๋ฌ๊ฐ_๋ง๋ ..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 32 : ๊ฐ์ฒด๋ฅผ ํด๋ก์ ์์ผ๋ก ์ด๋ํ๋ ค๋ฉด ์ด๊ธฐํ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. ๊ฐ์ฒด๋ฅผ ํด๋ก์ ์์ผ๋ก ์ด๋ํ ๋์๋ C++14 ์ ์ด๊ธฐํ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ผ. 2. C++11 ์์๋ ์ง์ ์์ฑํ ํด๋์ค๋ std::bind ๋ก ์ด๊ธฐํ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ํ๋ด๋ผ ์ ์๋ค. ๋๋ค ์ฌ์ฉ์ ๊ฐ ๊ฐ๋ฌด๋ฆฌ์ ์ฐธ์กฐ ๊ฐ๋ฌด๋ฆฌ๊ฐ ๋ง๋ ์น ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ ์ ์ฉ ๊ฐ์ฒด(std::unique_ptr, std::future ๋ฑ)์ด ์ข์ ์์ด๋ค. C++14 ์์๋ ๊ฐ์ฒด๋ฅผ ํด๋ก์ ์์ผ๋ก ์ด๋ํ๋ ์๋จ์ ์ง์ ์ ๊ณตํ๋ค. C++11 ์์๋ ์ด๋ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ํ๋ด๋ผ ์ ์๋ค. ์ด๊ธฐํ..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 31 : ๊ธฐ๋ณธ ๊ฐ๋ฌด๋ฆฌ ๋ชจ๋๋ฅผ ํผํ๋ผ ํต์ฌ : 1. ๊ธฐ๋ณธ ์ฐธ์กฐ ๊ฐ๋ฌด๋ฆฌ๋ ์ฐธ์กฐ๊ฐ ๋์์ ์์ ์ํ์ด ์๋ค. 2. ๊ธฐ๋ณธ ๊ฐ ๊ฐ๋ฌด๋ฆฌ๋ ํฌ์ธํฐ(ํนํ this)๊ฐ ๋์์ ์์ ์ ์์ผ๋ฉฐ, ๋๋ค๊ฐ ์๊ธฐ ์๊ฒฐ์ ์ด๋ผ๋ ์คํด๋ฅผ ๋ถ๋ฅผ ์ ์๋ค. ํญ๋ชฉ์ ๋ค์ด๊ฐ๊ธฐ ์ , ์์ฃผ ๋์ค๋ ์ฉ์ด๋ฅผ ๋ค์ ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ๋ค. ๋๋ค ํํ์(lambda expression) : ์ด๋ฆ ๊ทธ๋๋ก ํ๋์ ํํ์์ผ๋ก, ์์ค ์ฝ๋์์ "[ ]( ){ }" ๋ก ํํ๋๋ ๋ถ๋ถ์ด๋ค. ํด๋ก์ (closure) : ๋๋ค์ ์ํด ๋ง๋ค์ด์ง ์คํ ์์ ๊ฐ์ฒด. ๊ฐ๋ฌด๋ฆฌ ๋ชจ๋(capture mode)์..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 30 : ์๋ฒฝ ์ ๋ฌ์ด ์คํจํ๋ ๊ฒฝ์ฐ๋ค์ ์ ์์๋๋ผ ํต์ฌ : 1. ์๋ฒฝ ์ ๋ฌ์ ํ ํ๋ฆฟ ํ์ ์ฐ์ญ์ด ์คํจํ๊ฑฐ๋ ํ๋ฆฐ ํ์์ ์ฐ์ญํ์ ๋ ์คํจํ๋ค. 2. ์ธ์๊ฐ ์ค๊ดํธ ์ด๊ธฐ์น์ด๊ฑฐ๋ 0 ๋๋ NULL ๋ก ํํ๋ ๋ ํฌ์ธํฐ, ์ ์ธ๋ง ๋ ์ ์ static const ๋ฐ constexpr ์๋ฃ ๋ฉค๋ฒ, ํ ํ๋ฆฟ ๋ฐ ์ค๋ณต์ ์ฌ๋ ํจ์ ์ด๋ฆ, ๋นํธํ๋์ด๋ฉด ์๋ฒฝ ์ ๋ฌ์ด ์คํจํ๋ค. ์๋ฒฝ ์ ๋ฌ์ ๋จ์ํ ๊ฐ์ฒด๋ค์ ์ ๋ฌํ๋ ๊ฒ๋ง์ด ์๋๋ผ, ๊ทธ ๊ฐ์ฒด๋ค์ ์ฃผ์ ํน์ง, ์ฆ ํ์, ์ผ๊ฐ/์ค๋ฅธ๊ฐ ์ฌ๋ถ, const ๋ volatile ์ฌ๋ถ๊น์ง๋ ์ ๋ฌํด์ผ ํ๋ค. ์์๋ฅผ ๋ณด์...

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 29 : ์ด๋ ์ฐ์ฐ์ด ์กด์ฌํ์ง ์๊ณ , ์ ๋ ดํ์ง ์๊ณ , ์ ์ฉ๋์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ผ ํต์ฌ : 1. ์ด๋ ์ฐ์ฐ๋ค์ด ์กด์ฌํ์ง ์๊ณ , ์ ๋ ดํ์ง ์๊ณ , ์ ์ฉ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์. 2. ํ์๋ค๊ณผ ์ด๋ ์๋ฏธ๋ก ์ง์ ์ฌ๋ถ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฐ ๊ฐ์ ์ ๋ ํ์๊ฐ ์๋ค. ์๋ง C++11 ์์ ๊ฐ์ฅ ์ฃผ๋ ๊ฐ๋ฅ์ ์ด๋ ์๋ฏธ๋ก (move semantics) ์ผ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฒฝ์ฐ์ ์ด๋ ์ฐ์ฐ์ด ๊ฐ๋ฅํ ๊ฒ์ ์๋๊ณ , ๋ ๋ณต์ฌ๋ณด๋ค ์ ๋ ดํ ๊ฒ์ ์๋๋ค. ์๋ฅผ ๋ค์ด, std::vector ์ ๊ฒฝ์ฐ std::move ์ฐ์ฐ์, ์ปจํ ์ด๋์ ์๋ ์..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 28 : ์ฐธ์กฐ ์ถ์ฝ์ ์์งํ๋ผ ํต์ฌ : 1. ์ฐธ์กฐ ์ถ์ฝ์ ํ ํ๋ฆฟ ์ธ์คํด์คํ, auto ํ์ ์ฐ์ญ, typedef ๊ณผ ๋ณ์นญ ์ ์ธ์ ์ง์ ๋ฐ ์ฌ์ฉ, decltype ์ ์ง์ ๋ฐ ์ฌ์ฉ์ด๋ผ๋ ๋ค ๊ฐ์ง ๋ฌธ๋งฅ์์ ์ผ์ด๋๋ค. 2. ์ปดํ์ผ๋ฌ๊ฐ ์ฐธ์กฐ ์ถ์ฝ ๋ฌธ๋งฅ์์ ์ฐธ์กฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ง๋ค์ด๋ด๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ ํ๋์ ์ฐธ์กฐ๊ฐ ๋๋ค. ์๋์ ๋ ์ฐธ์กฐ ์ค ํ๋๋ผ๋ ์ผ๊ฐ ์ฐธ์กฐ์ด๋ฉด ๊ฒฐ๊ณผ๋ ์ผ๊ฐ ์ฐธ์กฐ์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค๋ฅธ๊ฐ ์ฐธ์กฐ์ด๋ค. 3. ํ์ ์ฐ์ญ์ด ์ผ๊ฐ๊ณผ ์ค๋ฅธ๊ฐ์ ๊ตฌ๋ถํ๋ ๋ฌธ๋งฅ๊ณผ ์ฐธ์กฐ ์ถ์ฝ์ด ์ผ์ด๋๋ ๋ฌธ๋งฅ์์ ๋ณดํธ ์ฐธ์กฐ๋ ์ค๋ฅธ๊ฐ ์ฐธ์กฐ์ด๋ค. ์ฐ๋ฆฌ๋ T&& ๊ฐ์..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 27 : ๋ณดํธ ์ฐธ์กฐ์ ๋ํ ์ค๋ณต์ ์ฌ ๋์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฒ๋ค์ ์์ ๋๋ผ ํต์ฌ : 1. ๋ณดํธ ์ฐธ์กฐ์ ์ค๋ณต์ ์ฌ์ ์กฐํฉ์ ๋ํ ๋์์ผ๋ก๋ ๊ตฌ๋ณ๋๋ ํจ์ ์ด๋ฆ ์ฌ์ฉ, ๋งค๊ฐ๋ณ์๋ฅผ const ์ ๋ํ ์ผ๊ฐ ์ฐธ์กฐ๋ก ์ ๋ฌ, ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ผ๋ก ์ ๋ฌ, ๊ผฌ๋ฆฌํ ๋ฐฐ๋ถ ์ฌ์ฉ ๋ฑ์ด ์๋ค. 2. std::enable_if ๋ฅผ ์ด์ฉํด์ ํ ํ๋ฆฟ์ ์ธ์คํด์คํ๋ฅผ ์ ํํจ์ผ๋ก์จ ๋ณดํธ ์ฐธ์กฐ์ ์ค๋ณต์ ์ฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค. std::enable_if ๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ณดํธ ์ฐธ์กฐ ์ค๋ณต์ ์ฌ๋ฅผ ์ฌ์ฉํ๋ ์กฐ๊ฑด์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์ ์ดํ๋ ์ฉ๋๋ก ์ฐ์ธ๋ค. 3. ๋ณดํธ ์ฐธ์กฐ ๋งค๊ฐ๋ณ์..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 26 : ๋ณดํธ ์ฐธ์กฐ์ ๋ํ ์ค๋ณต์ ์ฌ๋ฅผ ํผํ๋ผ ํต์ฌ : 1. ๋ณดํธ ์ฐธ์กฐ์ ๋ํ ์ค๋ณต์ ์ฌ๋ ๊ฑฐ์ ํญ์ ๋ณดํธ ์ฐธ์กฐ ์ค๋ณต์ ์ฌ ๋ฒ์ ์ด ์์๋ณด๋ค ์์ฃผ ํธ์ถ๋๋ ์ํฉ์ผ๋ก ์ด์ด์ง๋ค. 2. ์๋ฒฝ ์ ๋ฌ ์์ฑ์๋ค์ ํนํ๋ ๋ฌธ์ ๊ฐ ๋ง๋ค. ๊ทธ๋ฐ ์์ฑ์๋ ๋์ฒด๋ก ๋นconst ์ผ๊ฐ์ ๋ํ ๋ณต์ฌ ์์ฑ์๋ณด๋ค ๋ ๋์ ๋ถํฉ์ด๋ฉฐ, ๊ธฐ๋ฐ ํด๋์ค ๋ณต์ฌ ๋ฐ ์ด๋ ์์ฑ์๋ค์ ๋ํ ํ์ ํด๋์ค๋ค์ ํธ์ถ๋ค์ ๊ฐ๋ก์ฑ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์. std::multiset names; void logAndAdd(const std::string& name) ..