๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 17 : ํน์ ๋ฉค๋ฒ ํจ์๋ค์ ์๋ ์์ฑ ์กฐ๊ฑด์ ์์งํ๋ผ ํต์ฌ : 1. ์ปดํ์ผ๋ฌ๊ฐ ์ค์ค๋ก ์์ฑํ ์ ์๋ ๋ฉค๋ฒ ํจ์๋ค, ์ฆ ๊ธฐ๋ณธ ์์ฑ์์ ์๋ฉธ์, ๋ณต์ฌ ์ฐ์ฐ๋ค, ์ด๋ ์ฐ์ฐ๋ค์ ๊ฐ๋ฆฌ์ผ ํน์ ๋ฉค๋ฒ ํจ์๋ผ๊ณ ํ๋ค. 2. ์ด๋ ์ฐ์ฐ๋ค์ ์ด๋ ์ฐ์ฐ๋ค์ด๋ ๋ณต์ฌ ์ฐ์ฐ๋ค, ์๋ฉธ์๊ฐ ๋ช ์์ ์ผ๋ก ์ ์ธ๋์ด ์์ง ์์ ํด๋์ค์ ๋ํด์๋ง ์๋์ผ๋ก ์์ฑ๋๋ค. 3. ๋ณต์ฌ ์์ฑ์๋ ๋ณต์ฌ ์์ฑ์๊ฐ ๋ช ์์ ์ผ๋ก ์ ์ธ๋์ด ์์ง ์์ ํด๋์ค์ ๋ํด์๋ง ์๋์ผ๋ก ์์ฑ๋๋ฉฐ, ๋ง์ผ ์ด๋ ์ฐ์ฐ์ด ํ๋๋ผ๋ ์ ์ธ๋์ด ์์ผ๋ฉด ์ญ์ ๋๋ค. ๋ณต์ฌ ๋ฐฐ์ ์ฐ์ฐ์๋ ๋ณต์ฌ ๋ฐฐ์ ์ฐ์ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 16 : const ๋ฉค๋ฒ ํจ์๋ฅผ ์ค๋ ๋์ ์์ ํ๊ฒ ์์ฑํ๋ผ ํต์ฌ : 1. ๋์์ ๋ฌธ๋งฅ์์ ์ฐ์ด์ง ์์ ๊ฒ์ด ํ์คํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, const ๋ฉค๋ฒ ํจ์๋ ์ค๋ ๋์ ์์ ํ๊ฒ ์์ฑํ๋ผ. 2. std::atomic ๋ณ์๋ mutex ์ ๋นํด ์ฑ๋ฅ์์ ์ด์ ์ด ์์ง๋ง, ํ๋์ ๋ณ์ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฅ์๋ฅผ ๋ค๋ฃฐ ๋์๋ง ์ ํฉํ๋ค. ๋ค์๊ณผ ๊ฐ์ ๋คํญ์ ํด๋์ค๊ฐ ์๋ค๊ณ ํ์. class Polynomial { public: using RootsType = std::vector; RootsType roots() const { // ์บ์๊ฐ ์ ํจํ์ง ์์ผ๋ฉด ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 15 : ๊ฐ๋ฅํ๋ฉด ํญ์ constexpr ๋ฅผ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. constexpr ๊ฐ์ฒด๋ const ์ด๋ฉฐ, ์ปดํ์ผ ๋์ค์ ์๋ ค์ง๋ ๊ฐ๋ค๋ก ์ด๊ธฐํ๋๋ค. 2. constexpr ํจ์๋ ๊ทธ ๊ฐ์ด ์ปดํ์ผ ๋์ค์ ์๋ ค์ง๋ ์ธ์๋ค๋ก ํธ์ถํ๋ ๊ฒฝ์ฐ์๋ ์ปดํ์ผ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ถํ๋ค. 3. constexpr ๊ฐ์ฒด๋ ํจ์๋ ๋นconstexpr ๊ฐ์ฒด๋ ํจ์๋ณด๋ค ๊ด๋ฒ์ํ ๋ฌธ๋งฅ์์ ์ฌ์ฉํ ์ ์๋ค. 4. constexpr ์ ๊ฐ์ฒด๋ ํจ์์ ์ธํฐํ์ด์ค์ ์ผ๋ถ์ด๋ค. ๊ฐ๋ ์ ์ผ๋ก, constexpr ๋ ์ด๋ ํ ๊ฐ์ด ๋จ์ง ์์์ผ ๋ฟ๋ง ์๋๋ผ ์ปดํ์ผ ์์ ์์ ์๋ ค์ง..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 14 : ์์ธ๋ฅผ ๋ฐฉ์ถํ์ง ์์ ํจ์๋ noexcept ๋ก ์ ์ธํ๋ผ ํต์ฌ : 1. noexcept ๋ ํจ์์ ์ธํฐํ์ด์ค์ ์ผ๋ถ์ด๋ค. ์ด๋ ํธ์ถ์๊ฐ noexcept ์ฌ๋ถ์ ์์กดํ ์ ์์์ ๋ปํ๋ค. 2. noexcept ํจ์๋ ๋น noexcept ํจ์๋ณด๋ค ์ต์ ํ์ ์ฌ์ง๊ฐ ํฌ๋ค. 3. noexcept ๋ ์ด๋ ์ฐ์ฐ๋ค๊ณผ swap, ๋ฉ๋ชจ๋ฆฌ ํด์ ํจ์๋ค, ๊ทธ๋ฆฌ๊ณ ์๋ฉธ์๋ค์ ํนํ๋ ์ ์ฉํ๋ค. 4. ๋๋ถ๋ถ์ ํจ์๋ noexcept ๊ฐ ์๋๋ผ ์์ธ์ ์ค๋ฆฝ์ ์ด๋ค. ํจ์๋ฅผ noexcept ๋ก ์ ์ธํ ๊ฒ์ธ์ง์ ์ฌ๋ถ๋ ์ธํฐํ์ด์ค ์ค๊ณ์์ ๋ฌธ์ ์ธ๋ฐ, ์ด๋ ํด๋ผ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 13 : iterator ๋ณด๋ค const_iterator ๋ฅผ ์ ํธํ๋ผ ํต์ฌ : 1. iterator ๋ณด๋ค const_iterator ๋ฅผ ์ ํธํ๋ผ. 2. ์ต๋ํ ์ผ๋ฐ์ ์ธ ์ฝ๋์์๋ begin, end, rbegin ๋ฑ์ ๋น๋ฉค๋ฒ ๋ฒ์ ๋ค์ ํด๋น ๋ฉค๋ฒ ํจ์๋ค๋ณด๋ค ์ ํธํ๋ผ. C++98 ์์๋, const_iterator ์ฌ์ฉ์ด ์ฝ์ง ์์๋ค. typedef std::vector::iterator IterT; typedef std::vector::const_iterator ConstIterT; std::vector values; ... ConstI..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 12 : ์ฌ์ ์ ํจ์๋ค์ override ๋ก ์ ์ธํ๋ผ ํต์ฌ : 1. ์ฌ์ ์ ํจ์๋ override ๋ก ์ ์ธํ๋ผ. 2. ๋ฉค๋ฒ ํจ์ ์ฐธ์กฐ ํ์ ์ฌ(reference qualifier)๋ฅผ ์ด์ฉํ๋ฉด ๋ฉค๋ฒ ํจ์๊ฐ ํธ์ถ๋๋ ๊ฐ์ฒด(*this)์ ์ผ๊ฐ ๋ฒ์ ๊ณผ ์ค๋ฅธ๊ฐ ๋ฒ์ ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ๊ธฐ๋ฐ ํด๋์ค์์ ์ ์๋ ๊ฐ์ ํจ์๊ฐ ํ์ ํด๋์ค์์ ์ฌ์ ์๋๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ค์ด ๋ง์กฑ ๋์ด์ผ ํ๋ค. ๊ธฐ๋ฐ ํด๋์ค ํจ์๊ฐ ๊ฐ์ํจ์ ์ด์ด์ผ ํจ ๊ธฐ๋ฐ ํจ์์ ํ์ ํจ์์ ์ด๋ฆ์ด ๋์ผํด์ผ ํจ(์๋ฉธ์ ์ ์ธ) ๊ธฐ๋ฐ ํจ์์ ํ์ ํจ์์ ๋งค๊ฐ๋ณ์ ํ์๋ค..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 11 : ์ ์๋์ง ์์ ๋น๊ณต๊ฐ ํจ์๋ณด๋ค ์ญ์ ๋ ํจ์๋ฅผ ์ ํธํ๋ผ ํต์ฌ : 1. ์ ์๋์ง ์์ ๋น๊ณต๊ฐ ํจ์๋ณด๋ค ์ญ์ ๋ ํจ์๋ฅผ ์ ํธํ๋ผ. 2. ๋น๋ฉค๋ฒ ํจ์์ ํ ํ๋ฆฟ ์ธ์คํด์ค๋ฅผ ๋น๋กฏํ ๊ทธ ์ด๋ค ํจ์๋ ์ญ์ ํ ์ ์๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ ์ ๊ณตํ ์ฝ๋๋ฅผ ์์ฑํ ๋, ๊ทธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ํน์ ํจ์๋ฅผ ํธ์ถํ์ง ๋ชปํ๊ฒ ํ๋ ๊ฐ์ฅ ํํ ๋ฐฉ๋ฒ์ ๊ทธ๋ฅ ๊ทธ ํจ์๋ฅผ ์ ์ธํ์ง ์๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ปดํ์ผ๋ฌ๊ฐ ๋๋ก๋ ํจ์๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. C++ 98 ์์๋ private ์ผ๋ก ์ ์ธ ํ, ์ ์๋ฅผ ํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ๋ ํ๋ค. ์ค์ ๋ก ์ ๋ ฅ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 10 : ๋ฒ์ ์๋ enum ๋ณด๋ค ๋ฒ์ ์๋ enum ์ ์ ํธํ๋ผ ํต์ฌ : 1. C++98 ์คํ์ผ์ enum ์ ์ด์ ๋ ๋ฒ์ ์๋ enum ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. 2. ๋ฒ์ ์๋ enum ์ ์ด๊ฑฐ์๋ค์ ๊ทธ ์์์๋ง ๋ณด์ธ๋ค. ์ด ์ด๊ฑฐ์๋ค์ ์ค์ง ์บ์คํ ์ ํตํด์๋ง ๋ค๋ฅธ ํ์์ผ๋ก ๋ณํ๋๋ค. 3. ๋ฒ์ ์๋ enum ๊ณผ ๋ฒ์ ์๋ enum ๋ชจ๋ ๋ฐํ ํ์ ์ง์ ์ ์ง์ํ๋ค. ๋ฒ์ ์๋ enum ์ ๊ธฐ๋ณธ ๋ฐํ ํ์์ int ์ด๋ค. ๋ฒ์ ์๋ enum ์๋ ๊ธฐ๋ณธ ๋ฐํ ํ์์ด ์๋ค. 4. ๋ฒ์ ์๋ enum ์ ํญ์ ์ ๋ฐฉ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค. ๋ฒ์ ์๋ enu..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 9 : typedef ๋ณด๋ค ๋ณ์นญ ์ ์ธ์ ์ ํธํ๋ผ ํต์ฌ : 1. typedef ์ ํ ํ๋ฆฟํ๋ฅผ ์ง์ํ์ง ์์ง๋ง, using ์ ์ง์ํ๋ค. 2. ๋ณ์นญ ํ ํ๋ฆฟ์์๋ "::type" ์ ๋ฏธ์ด๋ฅผ ๋ถ์ผ ํ์๊ฐ ์๋ค. ํ ํ๋ฆฟ ์์์ typedef ์ ์ง์นญํ ๋์๋ "typename" ์ ๋์ฌ๋ฅผ ๋ถ์ฌ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. 3. C++14 ๋ C++11 ์ ๋ชจ๋ ํ์ ํน์ง ๋ณํ์ ๋ํ using ๋ค์ ์ ๊ณตํ๋ค. typedef ๊ณผ using (๋ณ์นญ ์ ์ธ, alias declaration) ์ด ํ๋ ์ผ์ ๋์ผํ์ง๋ง, using ์ด ๋ ์ง๊ด์ ์ด๋ค. // ํจ์ ํฌ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 8 : 0 ๊ณผ NULL ๋ณด๋ค nullptr ๋ฅผ ์ ํธํ๋ผ ํต์ฌ : 1. 0 ๊ณผ NULL ๋ณด๋ค nullptr ๋ฅผ ์ ํธํ๋ผ. 2. ์ ์ ํ์๊ณผ ํฌ์ธํฐ ํ์์ ๋ํ ์ค๋ฒ๋ก๋ฉ์ ํผํ๋ผ. ๋ฆฌํฐ๋ด 0์ int ์ด์ง ํฌ์ธํฐ๊ฐ ์๋๋ค. ํฌ์ธํฐ๋ง ์ฌ์ฉํ ์ ์๋ ์์น์ 0 ์ด ์์ผ๋ฉด C++ ์ ๋ง์ง๋ชปํด ์ด๋ฅผ null ํฌ์ธํฐ๋ก ํด์ํ์ง๋ง, ์ด๋ ์ตํ์ ์๋จ์ผ ๋ฟ์ด๋ค. // f ์ ์ธ ๊ฐ์ง ์ค๋ฒ๋ก๋ฉ void f(int); void f(bool); void f(void*); ... // f(void*) ๊ฐ ์๋ f(int) ํธ์ถ f(0); // ์ปดํ์ผ ๋์ง ..