๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TrJy8/btrPycRYM4g/jzAktlor1oJ27CdZ7J9Fuk/img.jpg)
์ด๋์ฐ๋์ '์ด๋์ฐ์ ๊ฒ์์ํ' ์ฑ ์ ๋ณด๋ฉฐ ์ข์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์๋ค๋ฉด, ์ฑ ์ ๊ตฌ๋งคํด ์ง์ ์ฝ์ด๋ณด์๊ธฐ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํ๋ ฌ์ ์ด์ฉํ ํ์ ๋ณํ ํ๋ ฌ์ ์ด์ฉํด ์ด๋ค ๋ฌผ์ฒด๋ฅผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90 ๋ ํ์ ์ํค๋ ํ๋ ฌ์ ๊ตฌํ๋ค๊ณ ์๊ฐํด ๋ณด์. ์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด, ๋ ๋ฒกํฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ณํ๋๋ค. ํ์ค๊ธฐ์ ๋ฒกํฐ e1 : (1, 0) -> (0, 1) ํ์ค๊ธฐ์ ๋ฒกํฐ e2 : (0, 1) -> (-1, 0) ๋ฐ๋ผ์ ๋ฐ์๊ณ๋ก 90 ๋ ํ์ ๋ณํ์ ์ํํ๋ ํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์ด ์ค๊ณํ ์ ์๋ค. ์๊ณ๋ฐฉํฅ์ผ๋ก 90 ๋ ํ์ ์ ํ๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค : ์ฌ์ค 90 ๋ ํ์ ์ ๊ฒฝ์ฐ๋ ํ๋ ฌ์ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ๋จํ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์๋ค. - ์๊ณ ๋ฐฉํฅ์ผ๋ก 90 ๋ ํ์ : (x, y) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YlDqW/btrPx0KYycY/9RKxR3cw1jUat8sE5CIk41/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 55 : Booๅญๆ่ฆช! ๋ถ์คํธ๋ฅผ ๋ ์ฌ๋ฌ๋ถ ๊ฐ๊น์ด์ ํต์ฌ : 1. ๋ถ์คํธ๋ C++ ํ์คํ์ ์์ด ์ํฅ๋ ฅ ์๋ ์คํ ์์ค C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ ๋ชจ์์ด๋ค. 2. ๋ถ์คํธ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ดํด๋ณด์ ๋ถ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๊ฒฉํ ์ฌ์ฌ๋ฅผ ํตํด ๋์ ํ์ง์ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ค. ์์๋ ์ ๋ง ๋ค์ํ๋ฐ, ์น์ฌ์ดํธ๋ฅผ ๋ค์ด๊ฐ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ๊ฒฝํด ๋ณด์!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bt8RW3/btrPzkBuzTe/Ttuzs4QHB5FCQ6ig5v8aQk/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 54 : TR1 ์ ํฌํจํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ฑ์์์ ํธ์ํ ์น๊ตฌ๊ฐ ๋์ ํต์ฌ : 1. ์ต์ด์ ์์ ๋ C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฃผ์ ๊ตฌ์ฑ์์๋ STL, iostream, ๋ก์ผ์ผ ๋ฑ์ด๋ค. 2. TR1 ์ด ๋์ ๋๋ฉด์ ์ถ๊ฐ๋ ๊ฒ์ ์ค๋งํธ ํฌ์ธํฐ, ์ผ๋ฐํ ํจ์, ํด์ ๊ธฐ๋ฐ ์ปจํ ์ด๋, ์ ๊ท ํํ์ ๋ฑ๋ฑ์ด๋ค 3. TR1 ์์ฒด๋ ๋จ์ํ ๋ช ์ธ์์ด๋ฉฐ, TR1 ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ช ์ธ๋ฅผ ๊ตฌํํ ์ฝ๋๋ฅผ ๊ตฌํด์ผ ํ๋ค. ๋ํ์ ์ธ ์๋ฃ์ฒ ์ค ํ ๊ตฐ๋ฐ๊ฐ ๋ฐ๋ก ๋ถ์คํธ์ด๋ค. ์ฌ์ค ํด๋น ์ฑ ์ ํ์ฌ ์์ (2022๋ ) ์ผ๋ก๋ถํฐ 7๋ ์ ์ ๋์จ ๊ฐ์ ํ์ด๋ฏ๋ก, ์ฑ ์์ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2wqw3/btrPzMqY99w/WO0SOsiSiKBd8PewEju3X0/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 53 : ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ ์ง๋์น์ง ๋ง์ ํต์ฌ : 1. ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ ์ฝ๊ฒ ์ง๋์น์ง ๋ง์. ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ด์ง ์๋ ์ฝ๋๋ฅผ ์ง์. 2. ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ์ ๋๋ฌด ๊ธฐ๋์ง๋ ๋ง์! ์ปดํ์ผ๋ฌ๋ง๋ค ๊ฒฝ๊ณ ๋ฉ์์ง๋ ๋ฌ๋ผ์ง ์ ์๋ค! ๋ค์ ์์๋ฅผ ๋ณด์. class B { public: virtual void f() const; }; class D: public B { public: // f ๋ ์ฌ์ ์ธ๋ ๊ฒ์ด ์๋๋ผ, ์์ ๊ฐ๋ฆฌ๊ณ ์์ virtual void f(); }; ์ปดํ์ผ๋ฌ๋ ์ ๊ฒฝ์ฐ, "warning: D::f() hides virtual B:..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/co645r/btrPx0qCHn9/IzSdvHN9xRKqrzJJ4zGL20/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 52 : ์์น์ง์ new ๋ฅผ ์์ฑํ๋ค๋ฉด ์์น์ง์ delete ๋ ๊ฐ์ด ์ค๋นํ์ ํต์ฌ : 1. operator new ํจ์์ ์์น์ง์ (placement) ๋ฒ์ ์ ๋ง๋ค ๋๋, ์ด ํจ์์ ์ง์ ์ด๋ฃจ๋ ์์น์ง์ ๋ฒ์ ์ operator delete ํจ์๋ ๊ผญ ๋ง๋ค์. ์ด ์ผ์ ๋นผ๋จน์ผ๋ฉด, ์ฐพ์๋ด๊ธฐ๋ ํ๋ค๊ณ ์๊ฒผ๋ค๊ฐ ์ ์๊ฒผ๋ค ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ถ ํ์์ ๊ฒฝํํ๊ฒ ๋๋ค. 2. new ๋ฐ delete ์ ์์น์ง์ ๋ฒ์ ์ ์ ์ธํ ๋๋, ์๋ํ ๋ฐ๋ ์๋๋ฐ ์ด๋ค์ ํ์ค ๋ฒ์ ์ด ๊ฐ๋ ค์ง๋ ์ผ์ด ์๊ธฐ์ง ์๋๋ก ์ฃผ์ํ์. ์๋ ์ฝ๋๋ฅผ ๋ณด์. Widget *pW =..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cSHS3T/btrPAqnGTpP/8FweeE2ATvm4RTTEIT5twK/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 51 : new ๋ฐ delete ๋ฅผ ์์ฑํ ๋ ๋ฐ๋ผ์ผ ํ ๊ธฐ์กด์ ๊ด๋ก๋ฅผ ์ ์์ ๋์ ํต์ฌ : 1. ๊ด๋ก์ ์ผ๋ก, operator new ํจ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ๋ณตํด์ ์๋ํ๋ ๋ฌดํ ๋ฃจํ๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์๊ตฌ๋ฅผ ๋ง์กฑ์ํฌ ์ ์์ ๋ new ์ฒ๋ฆฌ์๋ฅผ ํธ์ถํด์ผ ํ๋ฉฐ, 0๋ฐ์ดํธ์ ๋ํ ๋์ฑ ๋ ์์ด์ผ ํ๋ค. ํด๋์ค ์ ์ฉ ๋ฒ์ ์ ์์ ์ด ํ ๋นํ๊ธฐ๋ก ์์ ๋ ํฌ๊ธฐ๋ณด๋ค ๋ ํฐ(ํ๋ฆฐ) ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ํ ์๊ตฌ๋ ์ฒ๋ฆฌํด์ผ ํ๋ค. 2. operator delete ํจ์๋ ๋ ํฌ์ธํฐ๊ฐ ๋ค์ด์์ ๋ ์๋ฌด ์ผ๋ ํ์ง ์์์ผ ํ๋ค. ํด๋์ค ์ ์ฉ ๋ฒ์ ์ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/XwKUB/btrPx1iJK2A/pvGXiyKkuT1dUr3Wreky61/img.jpg)
์ด๋์ฐ๋์ '์ด๋์ฐ์ ๊ฒ์์ํ' ์ฑ ์ ๋ณด๋ฉฐ ์ข์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์๋ค๋ฉด, ์ฑ ์ ๊ตฌ๋งคํด ์ง์ ์ฝ์ด๋ณด์๊ธฐ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค! ๊ทน์ขํ๊ณ ์ฐ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์นด๋ฅดํธ ์ขํ๊ณ๋ฅผ ๋ง์ด ์ด์ฉํ๋๋ฐ, ์ฌ์ค ํ์ ์ ํ ๋๋ง๋ค x ์ y ์ ๋ณํ๋ฅผ ๋งค๋ฒ ๊ณ์ฐํ๋ ๊ฒ์ ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ผ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, ์์ ์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ r ๊ณผ θ ์ ๋ ์์๋ก ๊ตฌ์ฑ๋ ๊ทน์ขํ๊ณ(Polar coordinate system) ์ ์ฌ์ฉํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก arctan ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋ฒกํฐ์ ๊ฐ๋๋ฅผ ์ป์ด๋ผ ์ ์๋๋ฐ(tanθ = y/x ์ด๋ฏ๋ก, θ = arctan(y/x) ์ด ๋จ), arctan ํจ์๋ ์น์ญ์ด -180๋์์ 180๋๊น์ง ๋ฐ์ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, x ์ y ๊ฐ์ ๋ฐ๋ก ์ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/J0uGw/btrPy90m1Rq/RgdebmtLAguKuTcDPjaOrk/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 50 : new ๋ฐ delete ๋ฅผ ์ธ์ ๋ฐ๊ฟ์ผ ์ข์ ์๋ฆฌ๋ฅผ ๋ค์์ง๋ฅผ ํ์ ํด ๋์ ํต์ฌ : ๊ฐ๋ฐ์๊ฐ ์ค์ค๋ก ์ฌ์ฉ์ ์ ์ new ๋ฐ delete ๋ฅผ ์์ฑํ๋ ๋ฐ๋ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๊ฐ ์๋ค. ์ฌ๊ธฐ์๋ ์ํ ์ฑ๋ฅ ํฅ์, ํ ์ฌ์ฉ ์์ ์๋ฌ ๋๋ฒ๊น , ํ ์ฌ์ฉ ์ ๋ณด ์์ง ๋ฑ์ ๋ชฉ์ ์ด ํฌํจ๋๋ค. operator new ์ operator delete ๋ฅผ ๋ฐ๊พธ๋ ๊ฐ์ฅ ํํ ์ธ ๊ฐ์ง ์ด์ ๋ฅผ ํ ๋ฒ ๋ณด์. ์๋ชป๋ ํ ์ฌ์ฉ์ ํ์งํ๊ธฐ ์ํด : ๋ฐ์ดํฐ ์ค๋ฒ๋ฐ(overrun) ๋ฐ ์ธ๋๋ฐ(underrun) ์ ํ์งํ๊ธฐ ์ํด ํ์ง์ฉ ๋ฐ์ดํธ๋ฅผ ์ถ๊ฐ๋ก ํ ๋นํ ์ ์๋ค..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HIlN4/btrPw0jkSxK/jKNxqAW9dpg5kRr2MMffuk/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 49 : new ์ฒ๋ฆฌ์์ ๋์ ์๋ฆฌ๋ฅผ ์ ๋๋ก ์ดํดํ์ ํต์ฌ : 1. set_new_handler ํจ์๋ฅผ ์ฐ๋ฉด ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ฒญ์ด ๋ง์กฑ๋์ง ๋ชปํ์ ๋ ํธ์ถ๋๋ ํจ์๋ฅผ ์ง์ ํ ์ ์๋ค. 2. ์์ธ๋ถ๊ฐ(nothrow) new ๋ ์ํฅ๋ ฅ์ด ์ ํ๋์ด ์๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ฒด์๋ง ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ดํ์ ํธ์ถ๋๋ ์์ฑ์์์๋ ์ผ๋ง๋ ์ง ์์ธ๋ฅผ ๋์ง ์ ์๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ ๋๋ก ๋์ง ๋ชปํ์ ๋, operator new ๋ ์์ธ๋ฅผ ๋์ง๊ธฐ ์ ์ฌ์ฉ์ ์ชฝ์์ ์ง์ ํ ์ ์๋ ์๋ฌ ์ฒ๋ฆฌ ํจ์๋ฅผ ์ฐ์ ์ ์ผ๋ก ํธ์ถํ๋ค. ์ด ํจ์๋ฅผ new ์ฒ๋ฆฌ์(new-ha..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lHVWW/btrPx04rZr0/KAtFKqPFcSZOv55oTM7V30/img.jpg)
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 48 : ํ ํ๋ฆฟ ๋ฉํํ๋ก๊ทธ๋๋ฐ, ํ์ง ์๊ฒ ๋๊ฐ? ํต์ฌ : 1. ํ ํ๋ฆฟ ๋ฉํํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์กด ์์ ์ ๋ฐํ์์์ ์ปดํ์ผ ํ์์ผ๋ก ์ ํํ๋ ํจ๊ณผ๋ฅผ ๋ธ๋ค. ๋ฐ๋ผ์ TMP ๋ฅผ ์ฐ๋ฉด ์ ํ ์๋ฌ ํ์ง์ ๋์ ๋ฐํ์ ํจ์จ์ ์์ ๊ฑฐ๋จธ์ฅ ์ ์๋ค. 2. TMP ๋ ์ ์ฑ ์ ํ์ ์กฐํฉ์ ๊ธฐ๋ฐํ์ฌ ์ฌ์ฉ์ ์ ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ธ ์ ์๊ณ , ํน์ ํ์ ์ ๋ํด ๋ถ์ ์ ํ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋ง๋ ๋ฐ๋ ์ธ ์ ์๋ค. ํ ํ๋ฆฟ ๋ฉํํ๋ก๊ทธ๋๋ฐ(template metaprogramming: TMP) ๋ ์ปดํ์ผ ๋์ค์ ์คํ๋๋ ํ ํ๋ฆฟ ๊ธฐ๋ฐ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ์ผ์..