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

์ด๋์ฐ๋์ '์ด๋์ฐ์ ๊ฒ์์ํ' ์ฑ ์ ๋ณด๋ฉฐ ์ข์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์๋ค๋ฉด, ์ฑ ์ ๊ตฌ๋งคํด ์ง์ ์ฝ์ด๋ณด์๊ธฐ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค! ๋ณํ ํ๋ ฌ์ ์ญํ๋ ฌ ๋ค์ํ ๋ณํ ํ๋ ฌ๋ค์ ์ญํ๋ ฌ์ ์์๋ณด์. ํฌ๊ธฐ ๋ณํํ๋ ฌ ๊ฐ ๊ธฐ์ ๋ฒกํฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ฐ a, b ๋งํผ ํค์ฐ๋ ํฌ๊ธฐ ๋ณํํ๋ ฌ์ ์ญํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ ๋จ ๋ณํํ๋ ฌ ํํ์ฌ๋ณํ ์ฒ๋ผ ๋ฏธ๋๋ฌ์ง๊ฒ ์๊ธด ์ ๋จ ๋ณํํ๋ ฌ์ ์ญํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค. ํ์ ๋ณํํ๋ ฌ ํ์ ๋ณํํ๋ ฌ์ ์ญํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค. θ ๋งํผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ ํ๋ ฌ์ ์ญํ๋ ฌ์ ๊ตฌํ๊ธฐ ์ํด์๋, -θ ๋งํผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ ํ๋ ฌ์ ์๊ฐํด๋ณด๋ฉด ๋๋ค! ์ผ๊ฐํจ์์ ์ฑ์ง์ ์ด์ฉํ๋ฉด ๊ฐ๋จํ ๊ตฌํ ์ ์๋ค.

์ฝ ๋ ๋ฌ๊ฐ ์ฝ์ผ๋ฉฐ ์ ๋ฆฌํ๊ณ ์์ฝํ Effective C++ ์ Effective Modern C++ ๊ฒ์๊ธ๋ค์ ๋ํ ๋ฆฌ์คํธ ์์ฝ๊ธ์ ๋๋ค. ๊ฐ๋ฐํ์ค๋ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋ผ๋ฉฐ, ์ง์ ์ฌ์ ์ฝ์ด๋ณด์๊ธธ ๊ฐ์ถ๋๋ฆฝ๋๋ค! 1์ฅ ํ์ ์ฐ์ญ ํญ๋ชฉ 1: ํ ํ๋ฆฟ ํ์ ์ฐ์ญ ๊ท์น์ ์์งํ๋ผ ํญ๋ชฉ 2: auto์ ํ์ ์ฐ์ญ ๊ท์น์ ์์งํ๋ผ ํญ๋ชฉ 3: decltype์ ์๋ ๋ฐฉ์์ ์์งํ๋ผ ํญ๋ชฉ 4: ์ฐ์ญ๋ ํ์์ ํ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋๋ผ 2์ฅ auto ํญ๋ชฉ 5: ๋ช ์์ ํ์ ์ ์ธ๋ณด๋ค๋ auto๋ฅผ ์ ํธํ๋ผ ํญ๋ชฉ 6: auto๊ฐ ์์น ์์ ํ์์ผ๋ก ์ฐ์ญ๋ ๋์๋ ๋ช ์์ ํ์์ ์ด๊ธฐ์น๋ฅผ ์ฌ์ฉํ๋ผ 3์ฅ ํ๋์ C++์ ์ ์ํ๊ธฐ ํญ๋ชฉ 7: ๊ฐ์ฒด ์์ฑ ์ ๊ดํธ(())์ ์ค๊ดํธ({})๋ฅผ ๊ตฌ๋ถํ๋ผ ํญ๋ชฉ 8: 0๊ณผ NULL๋ณด๋ค nullptr๋ฅผ ์ ..

์ฝ ๋ ๋ฌ๊ฐ ์ฝ์ผ๋ฉฐ ์ ๋ฆฌํ๊ณ ์์ฝํ Effective C++ ์ Effective Modern C++ ๊ฒ์๊ธ๋ค์ ๋ํ ๋ฆฌ์คํธ ์์ฝ๊ธ์ ๋๋ค. ๊ฐ๋ฐํ์ค๋ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋ผ๋ฉฐ, ์ง์ ์ฌ์ ์ฝ์ด๋ณด์๊ธธ ๊ฐ์ถ๋๋ฆฝ๋๋ค! Chapter 1 C++์ ์์ผ๋ฉด C++์ ๋ฒ์ ๋ฐ๋ฆ ์๋ค ํญ๋ชฉ 1: C++๋ฅผ ์ธ์ด๋ค์ ์ฐํฉ์ฒด๋ก ๋ฐ๋ผ๋ณด๋ ์๋ชฉ์ ํ์ ํญ๋ชฉ 2: #define์ ์ฐ๋ ค๊ฑฐ๋ const, enum, inline์ ๋ ์ฌ๋ฆฌ์ ํญ๋ชฉ 3: ๋์๋ง ๋ณด์ด๋ฉด const๋ฅผ ๋ค์ด๋ ๋ณด์! ํญ๋ชฉ 4: ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ์ Chapter 2 ์์ฑ์, ์๋ฉธ์ ๋ฐ ๋์ ์ฐ์ฐ์ ํญ๋ชฉ 5: C++๊ฐ ์๊ทผ์ฌ์ฉ ๋ง๋ค์ด ํธ์ถํด ๋ฒ๋ฆฌ๋ ํจ์๋ค์ ์ด๊ฐ์ ์ธ์ฐ์ ํญ๋ชฉ 6: ์ปดํ์ผ๋ฌ๊ฐ ๋ง๋ค์ด๋ธ ํจ์๊ฐ ํ์ ์์ผ๋ฉด ํ์คํ ์ด๋ค์ ์ฌ์ฉ์ ..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 42 : ์ฝ์ ๋์ ์์ฑ ์ฝ์ ์ ๊ณ ๋ คํ๋ผ ํต์ฌ : 1. ์ด๋ก ์ ์ผ๋ก, ์์ฑ ์ฝ์ ํจ์๋ค์ ์ข ์ข ํด๋น ์ฝ์ ๋ฒ์ ๋ณด๋ค ๋ ํจ์จ์ ์ด์ด์ผ ํ๋ฉฐ, ๋ ํจ์จ์ ์ธ ๊ฒฝ์ฐ๋ ์ ๋๋ก ์์ด์ผ ํ๋ค. 2. ์ค์ง์ ์ผ๋ก, (1) ์ถ๊ฐํ ๊ฐ์ด ์ปจํ ์ด๋์ ๋ฐฐ์ ๋๋ ๊ฒ์ด ์ปจํ ์ด๋์ ๋ฐฐ์ ๋๋ ๊ฒ์ด ์๋๋ผ ์ปจํ ์ด๋ ์์์ ์์ฑ๋๊ณ , (2) ์ธ์ ํ์(๋ค)์ด ์ปจํ ์ด๋๊ฐ ๋ด๋ ํ์๊ณผ ๋ค๋ฅด๊ณ , (3) ๊ทธ ๊ฐ์ด ์ค๋ณต๋ ๊ฐ์ด์ด๋ ์ปจํ ์ด๋๊ฐ ๊ฑฐ๋ถํ์ง ์๋๋ค๋ฉด, ์์ฑ ์ฝ์ ํจ์๊ฐ ์ฝ์ ํจ์๋ณด๋ค ๋น ๋ฅผ ๊ฐ๋ฅ์ฑ์ด ์์ฃผ ํฌ๋ค. 3. ์์ฑ ์ฝ์ ํจ์๋ ์ฝ์ ํจ์๋ผ๋ฉด ๊ฑฐ๋ถ๋นํ์ ํ์ ๋ณํ๋ค์ ..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 41 : ์ด๋์ด ์ ๋ ดํ๊ณ ํญ์ ๋ณต์ฌ๋๋ ๋ณต์ฌ ๊ฐ๋ฅ ๋งค๊ฐ๋ณ์์ ๋ํด์๋ ๊ฐ ์ ๋ฌ์ ๊ณ ๋ คํ๋ผ ํต์ฌ : 1. ์ด๋์ด ์ ๋ ดํ๊ณ ํญ์ ๋ณต์ฌ๋๋ ๋ณต์ฌ ๊ฐ๋ฅ ๋งค๊ฐ๋ณ์์ ๋ํด์๋ ๊ฐ ์ ๋ฌ์ด ์ฐธ์กฐ ์ ๋ฌ๋งํผ์ด๋ ํจ์จ์ ์ด๊ณ , ๊ตฌํํ๊ธฐ๊ฐ ๋ ์ฝ๊ณ , ์ฐ์ถ๋๋ ๋ชฉ์ ์ฝ๋์ ํฌ๊ธฐ๋ ๋ ์๋ค. 2. ์ผ๊ฐ ์ธ์์ ๊ฒฝ์ฐ ๊ฐ ์ ๋ฌ(์ฆ, ๋ณต์ฌ ์์ฑ) ๋ค์์ ์ด๋ ๋ฐฐ์ ์ ์ฐธ์กฐ ์ ๋ฌ ๋ค์์ ๋ณต์ฌ ๋ฐฐ์ ๋ณด๋ค ํจ์ฌ ๋น์ ๊ฐ๋ฅ์ฑ์ด ์๋ค. 3. ๊ฐ ์ ๋ฌ์์๋ ์๋ฆผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ฐ ํด๋์ค ๋งค๊ฐ๋ณ์ ํ์์ ๋ํด์๋ ๊ฐ ์ ๋ฌ์ด ์ ํฉํ์ง ์๋ค. Widget ํด๋..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 40 : ๋์์ฑ์๋ std::atomic ์ ์ฌ์ฉํ๊ณ , volatile ์ ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉํ๋ผ. ํต์ฌ : 1. std::atomic ์ ๋ฎคํ ์ค ๋ณดํธ ์์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ ๊ทผํ๋ ์๋ฃ๋ฅผ ์ํ ๊ฒ์ผ๋ก, ๋์์ ์ํํธ์จ์ด์ ์์ฑ์ ์ํ ๋๊ตฌ์ด๋ค. 2. volatile ์ ์ฝ๊ธฐ์ ๊ธฐ๋ก์ ์ต์ ํ๋ก ์ ๊ฑฐํ์ง ๋ง์์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ํ ๊ฒ์ผ๋ก, ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃฐ ๋ ํ์ํ ๋๊ตฌ์ด๋ค. std::atomic ์ ๋ณดํต ๋ฎคํ ์ค๋ณด๋ค ๋ ํจ์จ์ ์ธ ๊ธฐ๊ณ์ด ๋ช ๋ น๋ค๋ก ๊ตฌํ๋๋ค. std::atomic ์ ์ฌ์ฉํ๋ ๋ค์ ์์ ์ฝ๋๋ฅผ ๋ณด์. std::atomi..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 39 : ๋จ๋ฐ์ฑ ์ฌ๊ฑด ํต์ ์๋ void ๋ฏธ๋ ๊ฐ์ฒด๋ฅผ ๊ณ ๋ คํ๋ผ ํต์ฌ : 1. ๊ฐ๋จํ ์ฌ๊ฑด ํต์ ์ ์ํํ ๋, ์กฐ๊ฑด ๋ณ์ ๊ธฐ๋ฐ ์ค๊ณ์๋ ์ฌ๋ถ์ ๋ฎคํ ์ค๊ฐ ํ์ํ๊ณ , ๊ฒ์ถ ๊ณผ์ ์ ๋ฐ์ ๊ณผ์ ์ ์งํ ์์์ ์ ์ฝ์ด ์์ผ๋ฉฐ, ์ฌ๊ฑด์ด ์ค์ ๋ก ๋ฐ์ํ๋์ง๋ฅผ ๋ฐ์ ๊ณผ์ ๊ฐ ๋ค์ ํ์ธํด์ผ ํ๋ค. 2. ํ๋๊ทธ ๊ธฐ๋ฐ ์ค๊ณ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฐ ๋จ์ ๋ค์ด ์์ง๋ง, ๋์ ์ฐจ๋จ์ด ์๋๋ผ ํด๋ง์ด ์ผ์ด๋๋ค๋ ๋จ์ ์ด ์๋ค. 3. ์กฐ๊ฑด ๋ณ์์ ํ๋๊ทธ๋ฅผ ์กฐํฉํ ์๋ ์์ผ๋, ๊ทธ๋ฐ ์กฐํฉ์ ์ด์ฉํ ํต์ ๋ฉ์ปค๋์ฆ์ ํ์ ์ด์์ผ๋ก ๋ณต์กํ๋ค. 4. std::promise ์ ๋ฏธ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ..

C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 38 : ์ค๋ ๋ ํธ๋ค ์๋ฉธ์๋ค์ ๋ค์ํ ํ๋ ๋ฐฉ์์ ์ฃผ์ํ๋ผ ํต์ฌ : 1. ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฉธ์๋ ๊ทธ๋ฅ ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฃ ๋ฉค๋ฒ๋ค์ ํ๊ดดํ ๋ฟ์ด๋ค. 2. std::async ๋ฅผ ํตํด ์๋๋ ๋น์ง์ฐ ๊ณผ์ ์ ๋ํ ๊ณต์ ์ํ๋ฅผ ์ฐธ์กฐํ๋ ๋ง์ง๋ง ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฉธ์๋ ๊ทธ ๊ณผ์ ๊ฐ ์๋ฃ๋ ๋๊น์ง ์ฐจ๋จ๋๋ค(๊ธฐ๋ค๋ฆฐ๋ค). ํฉ๋ฅ ๊ฐ๋ฅ std::thread ๋ ๋ฐํ ์์คํ ์ ์คํ ์ค๋ ๋์ ๋์๋๋ค. ๊ทธ์ ๋น์ทํ๊ฒ ์ง์ฐ๋์ง ์์ ๊ณผ์ ์ ๋ํ ๋ฏธ๋ ๊ฐ์ฒด๋ ์์คํ ์ค๋ ๋์ ๋์๋๋ค. ๋ฐ๋ผ์ std::thread ๊ฐ์ฒด์ ๋ฏธ๋ ๊ฐ์ฒด ๋ชจ๋ ์์คํ ์ค๋ ๋์ ๋ํ ํธ๋ค(ha..

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 ๊ทธ ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๊ฒ ๋ค๋ ์..