๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 37 : std::thread ๋ค์ ๋ชจ๋ ๊ฒฝ๋ก์์ ํฉ๋ฅ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด๋ผ ํต์ฌ : 1. ๋ชจ๋ ๊ฒฝ๋ก์์ std::thread ๋ฅผ ํฉ๋ฅ ๋ถ๊ฐ๋ฅ์ผ๋ก ๋ง๋ค์ด๋ผ. 2. ์๋ฉธ ์ join ๋ฐฉ์์ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์ด ์ฑ๋ฅ ์ด์์ผ๋ก ์ด์ด์ง ์ ์๋ค. 3. ์๋ฉธ ์ detach ๋ฐฉ์์ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์ด ๋ฏธ์ ์ ํ๋์ผ๋ก ์ด์ด์ง ์ ์๋ค. 4. ์๋ฃ ๋ฉค๋ฒ ๋ชฉ๋ก์์ std::thread ๊ฐ์ฒด๋ฅผ ๋ง์ง๋ง์ ์ ์ธํ๋ผ. ๋ชจ๋ std::thread ๊ฐ์ฒด๋ ํฉ๋ฅ ๊ฐ๋ฅ(joinable) ์ํ์ด๊ฑฐ๋ ํฉ๋ฅ ๋ถ๊ฐ๋ฅ(unjoinable) ์ํ์ด๋ค. ํฉ๋ฅ ๊ฐ๋ฅ std::thre..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 36 : ๋น๋๊ธฐ์ฑ์ด ํ์์ผ ๋์๋ std::launch::async ๋ฅผ ์ง์ ํ๋ผ ํต์ฌ : 1. std::async ์ ๊ธฐ๋ณธ ์๋ ๋ฐฉ์นจ์ ๊ณผ์ ์ ๋น๋๊ธฐ์ ์คํ๊ณผ ๋๊ธฐ์ ์คํ์ ๋ชจ๋ ํ์ฉํ๋ค. 2. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ์ฐ์ฑ ๋๋ฌธ์ thread_local ์ ๊ทผ์ ๋ถํ์ค์ฑ์ด ๋ฐ์ํ๊ณ , ๊ณผ์ ๊ฐ ์ ๋๋ก ์คํ๋์ง ์์ ์๋ ์๊ณ , ์๊ฐ ๋ง๋ฃ ๊ธฐ๋ฐ wait ํธ์ถ์ ๋ํ ํ๋ก๊ทธ๋จ ๋ ผ๋ฆฌ์๋ ์ํฅ์ด ๊ฐ๋ค. 3. ๊ณผ์ ๋ฅผ ๋ฐ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํด์ผ ํ๋ค๋ฉด std::launch::async ๋ฅผ ์ง์ ํ๋ผ. std::async ๊ทธ ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๊ฒ ๋ค๋ ์..
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&& ๊ฐ์..