๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bHVPQk/btrPycq1Ncz/sNzL3inaNRazgWoZ3b67f0/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 40 : ๋์์ฑ์๋ std::atomic ์ ์ฌ์ฉํ๊ณ , volatile ์ ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉํ๋ผ. ํต์ฌ : 1. std::atomic ์ ๋ฎคํ ์ค ๋ณดํธ ์์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ ๊ทผํ๋ ์๋ฃ๋ฅผ ์ํ ๊ฒ์ผ๋ก, ๋์์ ์ํํธ์จ์ด์ ์์ฑ์ ์ํ ๋๊ตฌ์ด๋ค. 2. volatile ์ ์ฝ๊ธฐ์ ๊ธฐ๋ก์ ์ต์ ํ๋ก ์ ๊ฑฐํ์ง ๋ง์์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ํ ๊ฒ์ผ๋ก, ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃฐ ๋ ํ์ํ ๋๊ตฌ์ด๋ค. std::atomic ์ ๋ณดํต ๋ฎคํ ์ค๋ณด๋ค ๋ ํจ์จ์ ์ธ ๊ธฐ๊ณ์ด ๋ช ๋ น๋ค๋ก ๊ตฌํ๋๋ค. std::atomic ์ ์ฌ์ฉํ๋ ๋ค์ ์์ ์ฝ๋๋ฅผ ๋ณด์. std::atomi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eZtskH/btrPyALMWuR/0U08k4mBi7D5Kq9gbHEgJ1/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 39 : ๋จ๋ฐ์ฑ ์ฌ๊ฑด ํต์ ์๋ void ๋ฏธ๋ ๊ฐ์ฒด๋ฅผ ๊ณ ๋ คํ๋ผ ํต์ฌ : 1. ๊ฐ๋จํ ์ฌ๊ฑด ํต์ ์ ์ํํ ๋, ์กฐ๊ฑด ๋ณ์ ๊ธฐ๋ฐ ์ค๊ณ์๋ ์ฌ๋ถ์ ๋ฎคํ ์ค๊ฐ ํ์ํ๊ณ , ๊ฒ์ถ ๊ณผ์ ์ ๋ฐ์ ๊ณผ์ ์ ์งํ ์์์ ์ ์ฝ์ด ์์ผ๋ฉฐ, ์ฌ๊ฑด์ด ์ค์ ๋ก ๋ฐ์ํ๋์ง๋ฅผ ๋ฐ์ ๊ณผ์ ๊ฐ ๋ค์ ํ์ธํด์ผ ํ๋ค. 2. ํ๋๊ทธ ๊ธฐ๋ฐ ์ค๊ณ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฐ ๋จ์ ๋ค์ด ์์ง๋ง, ๋์ ์ฐจ๋จ์ด ์๋๋ผ ํด๋ง์ด ์ผ์ด๋๋ค๋ ๋จ์ ์ด ์๋ค. 3. ์กฐ๊ฑด ๋ณ์์ ํ๋๊ทธ๋ฅผ ์กฐํฉํ ์๋ ์์ผ๋, ๊ทธ๋ฐ ์กฐํฉ์ ์ด์ฉํ ํต์ ๋ฉ์ปค๋์ฆ์ ํ์ ์ด์์ผ๋ก ๋ณต์กํ๋ค. 4. std::promise ์ ๋ฏธ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4ctNm/btrPy8BisxW/MpSO2857NFRQXNBJ7FT5YK/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 38 : ์ค๋ ๋ ํธ๋ค ์๋ฉธ์๋ค์ ๋ค์ํ ํ๋ ๋ฐฉ์์ ์ฃผ์ํ๋ผ ํต์ฌ : 1. ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฉธ์๋ ๊ทธ๋ฅ ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฃ ๋ฉค๋ฒ๋ค์ ํ๊ดดํ ๋ฟ์ด๋ค. 2. std::async ๋ฅผ ํตํด ์๋๋ ๋น์ง์ฐ ๊ณผ์ ์ ๋ํ ๊ณต์ ์ํ๋ฅผ ์ฐธ์กฐํ๋ ๋ง์ง๋ง ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฉธ์๋ ๊ทธ ๊ณผ์ ๊ฐ ์๋ฃ๋ ๋๊น์ง ์ฐจ๋จ๋๋ค(๊ธฐ๋ค๋ฆฐ๋ค). ํฉ๋ฅ ๊ฐ๋ฅ std::thread ๋ ๋ฐํ ์์คํ ์ ์คํ ์ค๋ ๋์ ๋์๋๋ค. ๊ทธ์ ๋น์ทํ๊ฒ ์ง์ฐ๋์ง ์์ ๊ณผ์ ์ ๋ํ ๋ฏธ๋ ๊ฐ์ฒด๋ ์์คํ ์ค๋ ๋์ ๋์๋๋ค. ๋ฐ๋ผ์ std::thread ๊ฐ์ฒด์ ๋ฏธ๋ ๊ฐ์ฒด ๋ชจ๋ ์์คํ ์ค๋ ๋์ ๋ํ ํธ๋ค(ha..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ccFHFq/btrPAph7xzk/1G4gcjv62oTWJPNJoSocek/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 37 : std::thread ๋ค์ ๋ชจ๋ ๊ฒฝ๋ก์์ ํฉ๋ฅ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด๋ผ ํต์ฌ : 1. ๋ชจ๋ ๊ฒฝ๋ก์์ std::thread ๋ฅผ ํฉ๋ฅ ๋ถ๊ฐ๋ฅ์ผ๋ก ๋ง๋ค์ด๋ผ. 2. ์๋ฉธ ์ join ๋ฐฉ์์ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์ด ์ฑ๋ฅ ์ด์์ผ๋ก ์ด์ด์ง ์ ์๋ค. 3. ์๋ฉธ ์ detach ๋ฐฉ์์ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์ด ๋ฏธ์ ์ ํ๋์ผ๋ก ์ด์ด์ง ์ ์๋ค. 4. ์๋ฃ ๋ฉค๋ฒ ๋ชฉ๋ก์์ std::thread ๊ฐ์ฒด๋ฅผ ๋ง์ง๋ง์ ์ ์ธํ๋ผ. ๋ชจ๋ std::thread ๊ฐ์ฒด๋ ํฉ๋ฅ ๊ฐ๋ฅ(joinable) ์ํ์ด๊ฑฐ๋ ํฉ๋ฅ ๋ถ๊ฐ๋ฅ(unjoinable) ์ํ์ด๋ค. ํฉ๋ฅ ๊ฐ๋ฅ std::thre..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rc4JO/btrPxIqaOob/EKpdRc1Du6NqqBEXkCcHt0/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 36 : ๋น๋๊ธฐ์ฑ์ด ํ์์ผ ๋์๋ std::launch::async ๋ฅผ ์ง์ ํ๋ผ ํต์ฌ : 1. std::async ์ ๊ธฐ๋ณธ ์๋ ๋ฐฉ์นจ์ ๊ณผ์ ์ ๋น๋๊ธฐ์ ์คํ๊ณผ ๋๊ธฐ์ ์คํ์ ๋ชจ๋ ํ์ฉํ๋ค. 2. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ์ฐ์ฑ ๋๋ฌธ์ thread_local ์ ๊ทผ์ ๋ถํ์ค์ฑ์ด ๋ฐ์ํ๊ณ , ๊ณผ์ ๊ฐ ์ ๋๋ก ์คํ๋์ง ์์ ์๋ ์๊ณ , ์๊ฐ ๋ง๋ฃ ๊ธฐ๋ฐ wait ํธ์ถ์ ๋ํ ํ๋ก๊ทธ๋จ ๋ ผ๋ฆฌ์๋ ์ํฅ์ด ๊ฐ๋ค. 3. ๊ณผ์ ๋ฅผ ๋ฐ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํด์ผ ํ๋ค๋ฉด std::launch::async ๋ฅผ ์ง์ ํ๋ผ. std::async ๊ทธ ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๊ฒ ๋ค๋ ์..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cRPhgg/btrPzNDvgrn/ejWJqNc5r3xTL93LSBGy90/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 35 : ์ค๋ ๋ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ๋ณด๋ค ๊ณผ์ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ํธํ๋ผ ํต์ฌ : 1. std::thread API ์์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ ํจ์์ ๋ฐํ๊ฐ์ ์ง์ ์ป์ ์ ์์ผ๋ฉฐ, ๋ง์ผ ๊ทธ๋ฐ ํจ์๊ฐ ์์ธ๋ฅผ ๋์ง๋ฉด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ค. 2. ์ค๋ ๋ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ค๋ ๋ ๊ณ ๊ฐ, ๊ณผ๋ค๊ตฌ๋ , ๋ถํ ๊ท ํํ, ์ ํ๋ซํผ์ผ๋ก์ ์ ์์ ๋ ์๊ฐ ์ง์ ์ฒ๋ฆฌํด์ผ ํ๋ค. 3. std::async ์ ๊ธฐ๋ณธ ์๋ ๋ฐฉ์นจ์ ์ด์ฉํ ๊ณผ์ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ทธ๋ฐ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ฅผ ์์์ ์ฒ๋ฆฌํด์ค๋ค. doAsyncWork ๋ผ๋ ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๋ค๊ณ ํ์. ๋ฐฉ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ztCQ9/btrPzBQLlx3/AtS4qRgbRMxKHPijWt2dqk/img.png)
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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cTvrM5/btrPyt65yvT/6bpAQSHrpq7KSE4q2AOJY1/img.png)
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 ์ปดํ์ผ๋ฌ๊ฐ_๋ง๋ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cLv29w/btrPApWIlje/nIqI761aSDtWa9509OZ3X1/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 32 : ๊ฐ์ฒด๋ฅผ ํด๋ก์ ์์ผ๋ก ์ด๋ํ๋ ค๋ฉด ์ด๊ธฐํ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. ๊ฐ์ฒด๋ฅผ ํด๋ก์ ์์ผ๋ก ์ด๋ํ ๋์๋ C++14 ์ ์ด๊ธฐํ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ผ. 2. C++11 ์์๋ ์ง์ ์์ฑํ ํด๋์ค๋ std::bind ๋ก ์ด๊ธฐํ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ํ๋ด๋ผ ์ ์๋ค. ๋๋ค ์ฌ์ฉ์ ๊ฐ ๊ฐ๋ฌด๋ฆฌ์ ์ฐธ์กฐ ๊ฐ๋ฌด๋ฆฌ๊ฐ ๋ง๋ ์น ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ ์ ์ฉ ๊ฐ์ฒด(std::unique_ptr, std::future ๋ฑ)์ด ์ข์ ์์ด๋ค. C++14 ์์๋ ๊ฐ์ฒด๋ฅผ ํด๋ก์ ์์ผ๋ก ์ด๋ํ๋ ์๋จ์ ์ง์ ์ ๊ณตํ๋ค. C++11 ์์๋ ์ด๋ ๊ฐ๋ฌด๋ฆฌ๋ฅผ ํ๋ด๋ผ ์ ์๋ค. ์ด๊ธฐํ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmNBxJ/btrPzLyYRzv/8wUKhzW1RiHphU3WzBFNKK/img.png)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 31 : ๊ธฐ๋ณธ ๊ฐ๋ฌด๋ฆฌ ๋ชจ๋๋ฅผ ํผํ๋ผ ํต์ฌ : 1. ๊ธฐ๋ณธ ์ฐธ์กฐ ๊ฐ๋ฌด๋ฆฌ๋ ์ฐธ์กฐ๊ฐ ๋์์ ์์ ์ํ์ด ์๋ค. 2. ๊ธฐ๋ณธ ๊ฐ ๊ฐ๋ฌด๋ฆฌ๋ ํฌ์ธํฐ(ํนํ this)๊ฐ ๋์์ ์์ ์ ์์ผ๋ฉฐ, ๋๋ค๊ฐ ์๊ธฐ ์๊ฒฐ์ ์ด๋ผ๋ ์คํด๋ฅผ ๋ถ๋ฅผ ์ ์๋ค. ํญ๋ชฉ์ ๋ค์ด๊ฐ๊ธฐ ์ , ์์ฃผ ๋์ค๋ ์ฉ์ด๋ฅผ ๋ค์ ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ๋ค. ๋๋ค ํํ์(lambda expression) : ์ด๋ฆ ๊ทธ๋๋ก ํ๋์ ํํ์์ผ๋ก, ์์ค ์ฝ๋์์ "[ ]( ){ }" ๋ก ํํ๋๋ ๋ถ๋ถ์ด๋ค. ํด๋ก์ (closure) : ๋๋ค์ ์ํด ๋ง๋ค์ด์ง ์คํ ์์ ๊ฐ์ฒด. ๊ฐ๋ฌด๋ฆฌ ๋ชจ๋(capture mode)์..