Effective C++_4
131043 ์–‘ํ˜„์ฐฌ
NHN NEXT
ํ…œํ”Œ๋ฆฟ
โ€ขํŠœ๋ง ์™„์ „์„ฑ
โ€ขํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ
์™„๋ฒฝ์— ๊ฐ€๊นŒ์šด ์–ธ์–ด C++
์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹คํ˜•์„ฑ
์šฐ๋ฆฌ๋Š” SkinnedMesh์˜ ๊ตฌ์กฐ๋ฅผ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๊ณ  ์ด ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ์•ผ๋งŒ ํ•œ๋‹ค.
์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ๋ช…์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.
๊ฐ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๊ฐ€์ƒํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ์€ ๋Ÿฐํƒ€์ž„ ๋‹คํ˜•์„ฑ์— ์˜ํ•ด ์ด๋ฃจ์–ด ์ง„๋‹ค.
๋ฐ˜๋Œ€๋กœ
์•„๋ž˜์˜ ํ…œํ”Œ๋ฆฟ์ด ์ œ๋Œ€๋กœ ์ปดํŒŒ์ผ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Type T๋Š” SetHP(), State() ๋“ฑ์ด ์ง€์›๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ
obj๊ฐ€ ์ˆ˜๋ฐ˜๋˜๋Š”(operator==๋“ฑ๋“ฑ) ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ๋Š” ์ปดํŒŒ์ผ ๋„์ค‘ ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.
obj์— ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋А๋ƒ์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹คํ˜•์„ฑ์ด๋ผ ํ•œ๋‹ค.
์ด๋“ค์„ T๊ฐ€ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค๋ผ ํ•œ๋‹ค.
๋ง์ด ์–ด๋ ต๋‹ค ํ•˜์ง€๋งŒ ํ’€์–ด๋ณด๋ฉด ๋ณ„๊ฑฐ ์—†๋‹ค
โ€ข ์šฐ๋ฆฌ๊ฐ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋“ฏ ํ…œํ”Œ๋ฆฟ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜์—
๋งž๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šคํ™”๋ผ ํ•œ
๋‹ค.
โ€ข ์ด ๊ณผ์ •์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ˆ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํ™•์ธ๋œ๋‹ค. ๋”ฐ๋ผ
์„œ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹คํ˜•์„ฑ์ด๋ผ ๋ถ€๋ฅธ๋‹ค.
โ€ข ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ‘œํ˜„์‹์ด๋ผ ํ•œ๋‹ค.
Typename์˜ ๋‘ ์–ผ๊ตด
๋งˆ์น˜ C++์—์„œ struct์™€ class ์ฐจ์ด ๊ฐ™๋‹ค.
์™œ ๋‚˜๋ˆ ๋‚ฌ์„๊นŒ?
Struct/Class๋ง๊ณ 
Class/Typename
๋‘ ๊ฐ€์ง€ ์ด๋ฆ„
iter๋Š” C์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ์ด๋ฅผ ์˜์กด์ด๋ฆ„์ด๋ผ ํ•œ๋‹ค.
Value๋Š” C์˜ ํƒ€์ž…๊ณผ๋Š” ์ „ํ˜€ ์ƒ๊ด€์—†๋‹ค. ์ด๋ฅผ ๋น„์˜์กด ์ด๋ฆ„์ด๋ผ ํ•œ๋‹ค.
์œ„ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค.
์šฐ์—ฐํžˆ T::const_iterator๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ •์  ๋ณ€์ˆ˜๋ผ๋ฉด?
๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด ์•ˆ์ „ํ•ด์•ผ ํ•œ๋‹ค.
T::const_iterator๋Š” ์ค‘์ฒฉ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์ด๋ฅผ ์ค‘์ฒฉ์˜์กด์ด๋ฆ„์ด๋ผ ํ•œ๋‹ค.
ํƒ€์ž…์ด๋ผ๊ณ  ๋ช…์‹œํ•˜์ž
T::const_iterator๊ฐ€ ๋ณ€์ˆ˜์ด๋ฆ„ ๋”ฐ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ํƒ€์ž…์ž„์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ๋‹ค.
์ž˜ ์‚ฌ์šฉํ•˜์ž
๋ญโ€ฆ ํ†ต์ผ์„ฑ ์—†๋Š” ์ ์ด ์–ธ์–ด์˜ ํŠน์ง•์ด๋‹คโ€ฆ
ํ•˜๋‚˜๋งŒ ๋”
๋งŒ์•ฝ iterator๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
๋„ˆ๋ฌด ๊ธธ์–ด์„œ ๋ชป๋งˆ๋•…ํ•˜๋‹ค๋ฉด typedef ์”์‹œ๋‹ค.
ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋ณธ ํด๋ž˜์Šค ์•ˆ์˜ ์ด๋ฆ„์— ์ ‘๊ทผ
ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ๋ฉ”์‹œ์ง€ ํ†ต์‹ ์„ ์œ„ํ•ด ๋งŒ๋“  ๊ฐ์ฒด๋“ค
๋กœ๊ทธ๋Š” ์Šต๊ด€์ด๋‹ˆ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋„๋ก ํ•ฉ์‹œ๋‹ค.
MsgSender<client>๋ฅผ ์ƒ์†๋ฐ›์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  sendClear๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•Œ์ง€ ๋ชปํ•œ๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” client๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์—์„œ ์–ด๋””์„œ ํŒŒ์ƒ๋œ ๊ฒƒ์ธ์ง€ ์•Œ์ง€๋ฅผ ๋ชปํ•œ๋‹ค!
๋” ํŒŒ๊ณ ๋“ค๋ฉด
๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ๋•Œ๋Š” ๊ผญ ์•”ํ˜ธํ™”ํ•ด์„œ ๋ณด๋‚ธ๋‹ค๊ณ  ํ•˜์ž
ServerA์—๋งŒ ํ•„์š”ํ•œ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ MsgSender๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
์™„์ „ ํ…œํ”Œ๋ฆฟ ํŠน์ˆ˜ํ™”
์˜ค๋กœ์ง€ ServerAํƒ€์ž…์— ๋Œ€ํ•ด์„œ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.
๋งŒ์•ฝ ํ…œํ”Œ๋ฆฟLogMsgSender์— ServerA๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค๋ฉด MsgSender๋Š” SendClear๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค!
๋ฐฉ๋ฒ•์€ ๋งŽ์Šต๋‹ˆ๋‹ค.
sendClear๊ฐ€ ์ƒ์†๋  ๋•Œ ๋งŒ์„ ๊ฐ€์ •ํ•œ๋‹ค.
๋งŒ์•ฝ ServerA๊ฐ™์€ ํƒ€์ž…์ด client์— ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
This๋ฅผ ์‚ฌ์šฉ
Using์„ ์‚ฌ์šฉ
์ƒ์†๋ฐ›์Œ์„ ๋ช…์‹œ
๋งค๊ฐœ๋ณ€์ˆ˜์— ๋…๋ฆฝ์ ์ด๋ฉด ํ…œํ”Œ๋ฆฟ์—์„œ ๋ถ„๋ฆฌ์‹œํ‚ค์ž
inline๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ
โ€ข Template๋„ ๋ง‰ ์“ฐ๋ฉด ์˜คํžˆ๋ ค ์ฝ”๋“œ๋น„๋Œ€ํ™” ํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค.
โ€ข ๊ณตํ†ต์„ฑ ๋ฐ ๊ฐ€๋ณ€์„ฑ ๋ถ„์„์„ ํ•˜์ž.
โ€ข ๋ญ.. ์ด๋ฆ„๋งŒ ์–ด๋ ต์ง€ ์šฐ๋ฆฌ๊ฐ€ ๋Š˜ ํ•ด์˜ค๋˜ ์ง“์ด๋‹ค.
โ€ข ๋‹ค๋งŒโ€ฆ ํ…œํ”Œ๋ฆฟ์€ ์•”์‹œ์ ์ด๋‹ค.
โ€ข ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜๋กœ ๋ฌถ์€ ์ฝ”๋“œ์ค‘๋ณต ๋ฐฉ์ง€๋Š” ๋ช…์‹œ์ ์ด์ง€๋งŒ
โ€ข ํ…œํ”Œ๋ฆฟ์€ ์ฝ”๋“œ์ค‘๋ณต์„ ์–ด๋–ป๊ฒŒ ํ•ด์†Œํ•˜๋Š”์ง€ ์•”์‹œ์ ์ด๋‹ค
์•”์‹œ์ ?
๊ฐ๊ฐ์˜ invert์˜ ์‚ฌ๋ณธ์ด ์ธ์Šคํ„ด์Šคํ™” ๋œ๋‹ค.
๋‘˜์ด ๊ฐ™์€
๊ฐ€?์•„๋‹ˆ
๋‹ค!์˜คํžˆ๋ ค ์ฝ”๋“œ ๋น„๋Œ€ํ™”๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ๋‹ค.
์ผ๋‹จ, ํ•ด๊ฒฐ๋ฐฉ์•ˆ
์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์˜ invert๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด using์‚ฌ์šฉ
์˜ค๋กœ์ง€ ์‚ฌ๋ณธ์„ ํ”ผํ•  ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— protected๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
๋‹จ์ˆœํžˆ ๊ตฌํ˜„์„ ๋•๊ธฐ ์œ„ํ•œ ์šฉ๋„์ด๊ธฐ ๋•Œ๋ฌธ์— private์„ ์ด์šฉ
This๋Š” ์ด๋ฏธ ์œ„์—์„œ using์ด ์‚ฌ์šฉ๋˜์—ˆ์œผ๋‹ˆ ๋ถˆํ•„์š”ํ•˜๋‹ค
๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์กฐ๊ฑด์„ ๋„ฃ์–ด์ค€๋‹ค
์•„์ง ๋ฉ€์—ˆ๋‹ค! ๊ณ„์‚ฐ์„ ์œ„ํ•œ ํ–‰๋ ฌ ๋ฐ์ดํ„ฐ๊ฐ€ SquareMatrix์— ์žˆ์„
๊ฒฝ์šฐ SquareMatrixBase์˜ invert ๊ณ„์‚ฐ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ?
์ „๋‹ฌํ•  ๊ตฌ๋ฉ์„ ๋งŒ๋“ค
์ž.์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ SetDataPtrํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€œํ˜ธํ™˜๋˜๋Š” ๋ชจ๋“  ํƒ€์ž…โ€์€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ
์Šค๋งˆํŠธํฌ์ธํ„ฐ๊ฐ€ ์ข‹๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค
ํ•˜์ง€๋งŒ ์Šค๋งˆํŠธํฌ์ธํ„ฐ๊ฐ€ ํ‰๋‚ด๋‚ด์ง€ ๋ชปํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์—๊ฒŒ ์žˆ๋‹ค.
๋ฐ”๋กœ ์•”์‹œ์  ๋ณ€ํ™˜์ด๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์€๋ฐ..
ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์šฉ์„œํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํ…œํ”Œ๋ฆฟ์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค ์‚ฌ์ด๋Š” ์•„๋ฌด ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋งŒ๋“ค์ž
๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ
๋ชจ๋“  T์™€ Uํƒ€์ž…์— ๋Œ€ํ•˜์—ฌ SmartPtr<T>๊ฐ์ฒด๊ฐ€ SmartPtr<U>๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.
์ผ๋ฐ˜ ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋ผ๊ณ  ํ•œ๋‹ค.
ํ•˜์ง€๋งŒโ€ฆ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์˜์—ญ๋ณด๋‹ค ๋” ๋งŽ์€ ์˜์—ญ์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด ์ž์‹์—์„œ ๋ถ€๋ชจ, ์ž์‹์—์„œ ๋ถ€๋ชจ๊นŒ์ง€๋„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.
๊ทธ๋ƒฅ์€ ์•ˆ ๋œ๋‹ค
์Šค๋งˆํŠธํฌ์ธํ„ฐ๋Š” ๋ณต์‚ฌํ•  ๋•Œ ์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด์ ์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์„œ๋„ ์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค.
๊ฒฐ๊ตญ ํฌ์ธํ„ฐ์˜ ์•”์‹œ์  ๋ณ€ํ™˜์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค.
๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์˜ ํ™œ์šฉ
๊ฐ™์€ shared_ptr์—์„œ์˜ ์•”์‹œ์  ๋ณ€ํ™˜์€ ํ—ˆ์šฉ๋˜์ง€๋งŒ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๋ถ€ํ„ฐ์˜ ๋ณ€ํ™˜์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.
์—ฌ๊ธฐ๋งŒ explicit์ด ์—†๋‹ค
๋งˆ์ง€๋ง‰์œผ๋กœ, ์ผ๋ฐ˜ํ™” ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋งŒ๋“œ๋Š” ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋ฅผ ๋ง‰๋Š” ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋‹ค.
ํƒ€์ž…๋ณ€ํ™˜์ด ๋ฐ”๋žŒ์งํ•  ๊ฒฝ์šฐ ๋น„๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ ์•ˆ์— ์ •์˜ํ•ด ๋‘์ž
๋ฌธ์ œ์ธ์‹
ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์„ ์–ธ๋œ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.
ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์—ฐ์‚ฐํ•ด์ฃผ๋Š” operator*ํ•จ์ˆ˜๊ฐ€ ๋ฐ–์— ์„ ์–ธ๋˜์–ด์žˆ๋‹ค.
๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„๋ž˜์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
์ง€๊ธˆ์˜ ๊ฒฝ์šฐ operator*ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
operator*์˜ ํ…œํ”Œ๋ฆฟ T๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
oneHalf์˜ T๊ฐ€ intํ˜•์ž„์€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ 2์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ…œํ”Œ๋ฆฟ ์ธ์ž ์ถ”๋ก ๊ณผ์ •์—์„œ ์•”์‹œ์  ๋ณ€ํ™˜์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ…œํ”Œ๋ฆฟ ์ธ์ž ์ถ”๋ก ์„ ํ†ตํ•ด ์ธ์ž๋ฅผ ์ฐพ๋Š”๋‹ค.
์ธ์ž์ถ”๋ก ์˜ ์ˆ˜๊ณ ๋ฅผ ๋œ์ž
ํ…œํ”Œ๋ฆฟ ์ธ์ž์ถ”๋ก ์€ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
T์˜ ์ •๋ณด๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šคํ™” ๋˜๋Š” ์ˆœ๊ฐ„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๋ฌธ์ œ๋Š” ์ปดํŒŒ์ผ์€ ๋˜๋Š”๋ฐ ๋งํฌ๊ฐ€ ์•ˆ ๋œ๋‹คโ€ฆ.
์™ธ๋ถ€ ํ•จ์ˆ˜์ธ operator*ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ๋งŒ ํ–ˆ์ง€ ์ •์˜๊ฐ€ ์•ˆ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋น„๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด friend๋ฐ–์— ์—†๋‹ค.
์ตœ์ข…์ฝ”๋“œ
๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.
ํƒ€์ž…์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž
STL๊ตฌ์„ฑ
โ€ข ์ปจํ…Œ์ด๋„ˆ
โ€ข ๋ฐ˜๋ณต์ž
โ€ข ์•Œ๊ณ ๋ฆฌ์ฆ˜
โ€ข ์œ ํ‹ธ๋ฆฌํ‹ฐ
advance
๋ฐ˜๋ณต์ž๋ฅผ ์ง€์ •๋œ ๊ฑฐ๋ฆฌ๋งŒํผ ์ด๋™์‹œํ‚ค๊ณ  ์žˆ๋‹ค.
Iter += d๊ฐ™์€ ์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜๋‹ค.
์ž„์˜ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž๋งŒ ์œ„ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋ฐ˜๋ณต์ž์˜ ์ข…๋ฅ˜
โ€ข ์ž…๋ ฅ ๋ฐ˜๋ณต์ž(์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผํฌ์ธํ„ฐ ์—ฐ์ƒ, ํ•œ๋ฒˆ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Œ)
โ€ข ์ถœ๋ ฅ ๋ฐ˜๋ณต์ž(์œ„์—์„œ ์˜ค๋กœ์ง€ ์“ฐ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฐ”๋€œ)
โ€ข ์ˆœ๋ฐฉํ–ฅ ๋ฐ˜๋ณต์ž(์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ๊ณ  ์“ฐ๊ธฐ ๊ฐ€๋Šฅ)
โ€ข ์–‘๋ฐฉํ–ฅ ๋ฐ˜๋ณต์ž(์ˆœ๋ฐฉํ–ฅ์—์„œ ์–‘๋ฐฉํ–ฅ๋งŒ ์ถ”๊ฐ€)
โ€ข ์ž„์˜ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž(๋ฐ˜๋ณต์ž ์‚ฐ์ˆ ์—ฐ์‚ฐ ์ถ”๊ฐ€)
ํƒœ๊ทธ ๊ตฌ์กฐ์ฒด
๋ฐ˜๋ณต์ž๋“ค์˜ ๋ฒ”์ฃผ๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ์ฒด๋“ค
๋Œ์•„์™€์„œ
Advance๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ iter๊ฐ€ ์–ด๋А ์ข…๋ฅ˜์˜ ๋ฐ˜๋ณต์ž์ธ์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
์—ฌ๊ธฐ์„œ ํŠน์„ฑ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
ํŠน์„ฑ์ •๋ณด๋ž€ ์ปดํŒŒ์ผ ๋„์ค‘์— ์–ด๋–ค ์ฃผ์–ด์ง„ ํƒ€์ž…์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์นญํ•œ๋‹ค.
ํŠน์„ฑ์ •๋ณด
โ€ข ๋ฌธ๋ฒ•๊ตฌ์กฐ๋„ ์•„๋‹ˆ๋ฉฐ ํ‚ค์›Œ๋“œ๋„ ์•„๋‹ˆ๋‹ค.
โ€ข ๊ทธ์ € ๊ตฌํ˜„๊ธฐ๋ฒ•์ด๋ฉฐ ๊ด€๋ก€์ด๋‹ค.
โ€ข ํŠน์„ฑ์ •๋ณด๋Š” ๊ธฐ๋ณธ์ œ๊ณต ํƒ€์ž…๊ณผ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์—์„œ ๋ชจ๋‘ ๋Œ์•„๊ฐ€
์•ผ ํ•œ๋‹ค.
โ€ข ์–ด๋–ค ํƒ€์ž… ์•ˆ์—์„œ๋Š” ๊ตฌํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ ํŠน์„ฑ์ •
๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
๋ฐ˜๋ณต์ž์˜ ๊ฒฝ์šฐ
๋ฐ˜๋ณต์ž์šฉ ๊ตฌ์„ฑ์ •๋ณด๋Š” ํ‘œ์ค€์— ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.
Struct์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€๋‹ค.
โ€žํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šคโ€Ÿ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
๋ญโ€ฆ ์–ด์ฐจํ”ผ.. ๋‘˜์€ ๊ฐ™์œผ
๋‹ˆ.
๋‚ด๋ถ€๊ตฌ์กฐ
์œ„์ฒ˜๋Ÿผ _Iterํƒ€์ž…์˜ ๋‚ด๋ถ€ ์ •๋ณด๋“ค์„ typedef๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์œ„ ๊ตฌ์กฐ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€์ง€๋งŒ, ๋ฐ˜๋ณต์ž๊ฐ€ ํฌ์ธํ„ฐ์ผ ๊ฒฝ์šฐ ์ „ํ˜€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์ผ ๊ฒฝ์šฐ
์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” iterator์˜ ํƒœ๊ทธ ๊ตฌ์กฐ์ฒด๋ฅผ iterator_category๋กœ typedefํ•œ๋‹ค.
ํƒœ๊ทธ ๊ตฌ์กฐ์ฒด๋Š” iterator์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
ํฌ์ธํ„ฐ์ผ ๊ฒฝ์šฐ
ํฌ์ธํ„ฐ ๋ฒ„์ „์„ ๋”ฐ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.
์ง์ ‘ ํ—ค๋”ํŒŒ์ผ์— ๋“ค์–ด๊ฐ€๋ณด๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ๋ถ€๋ถ„ ํ…œํ”Œ๋ฆฟ ํŠน์ˆ˜ํ™”๋ผ๊ณ  ํ•œ๋‹ค.
๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ
๋ผ๊ณ  ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ... ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค.
Typeid๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํƒ€์ž…์„ ์ทจํ•˜๋Š” ์—ฐ์‚ฐ์ž๋‹ค.
if๋ฌธ์€ ์ปดํŒŒ์ผ์ด ๋‹ค๋˜๊ณ  ๋Ÿฐํƒ€์ž„ ๋„์ค‘ ํ‰๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ์ฝ”๋“œ๊ฐ€ ๋น„๋Œ€ํ•ด์ง„๋‹ค.
๋˜ ์ปดํŒŒ์ผ๋„ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ๊ทธ๊ฑด ๋‚˜์ค‘์— ์„ค๋ช…..
If๋ฌธ์„ ์ œ๊ฑฐํ•˜์ž
์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์˜ค๋ฒ„๋กœ๋”ฉ ๋ฒ„์ „์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ผ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ€์žฅ ์ƒํ™ฉ์— ์ž˜ ๋งž๋Š” ๋ฒ„์ „์— ์ ‘๊ทผํ•œ๋‹ค.
์˜ˆ์™ธ์ฒ˜๋ฆฌ
ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํ•˜์ง€ ์•Š๊ฒ ๋Š”๊ฐ€?
ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ
โ€ข ์ปดํŒŒ์ผ ๋„์ค‘์— ์‹คํ–‰๋˜๋Š” ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ
โ€ข ์ฆ‰ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจโ€ฆ.
โ€ข ์‹คํ–‰์ด ์™„๋ฃŒ๋œ ์‚ฐ์ถœ๋ฌผ์€ ๋‹ค์‹œ C++์ฝ”๋“œ๋กœ ๋“ค์–ด๊ฐ€ ์ปดํŒŒ์ผ ๋œ๋‹ค.
โ€ข ๋Ÿฐํƒ€์ž„ ์˜์—ญ์˜ ์—ฐ์‚ฐ์„ ์ปดํŒŒ์ผ์‹œ๊ฐ„์œผ๋กœ ํ•ฉ์ณ๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.
โ€ข ๊นŒ๋‹ค๋กญ๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ผ๋„ ํ•ด๋‚ธ๋‹ค.
๋˜ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ
์•„๊นŒ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋˜ advance ์ฝ”๋“œ
์ปดํŒŒ์ผ์„ ํ•ด๋ณด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ
๋‹ค.๋ฐ”๋กœ += ๋ถ€๋ถ„์ธ๋ฐ ์ด ๋ถ€๋ถ„์€ if๋ฌธ์— ์˜ํ•ด ์ •ํ•ด์ง„ ์กฐ๊ฑด์ผ ๋•Œ๋งŒ ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™œ ๋‚˜๋Š” ๊ฒƒ์ผ๊นŒ?
If๋ฌธ์€ ๋Ÿฐํƒ€์ž„ ๋„์ค‘์— ์‹คํ–‰๋œ๋‹ค. Template์€ ์ปดํŒŒ์ผ ๋„์ค‘ ์‹คํ–‰๋œ๋‹ค.
์ปดํŒŒ์ผ ๋„์ค‘์— iter๋ฅผ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— +=์˜ ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์žก์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
Letโ€Ÿs TMP
โ€ข ๋ฃจํ”„๊ฐ€ ์—†๋‹คโ€ฆ ํ—..
โ€ข ๋ฃจํ”„ํšจ๊ณผ๋ฅผ ๋‚ด๊ธฐ ์œ„ํ•ด์„œ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.
โ€ข ์ด ์žฌ๊ท€ํ•จ์ˆ˜์กฐ์ฐจ๋„ ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋‹ค.
โ€ข ์žฌ๊ท€์‹ ํƒฌํ”Œ๋ฆฟ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ์ด์šฉํ•œ๋‹ค.
โ€ข ๋‹คํ–‰์ด TMP์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋„ ๊ฝค ์žˆ๋‹ค.
ํ•˜์ง€ ์•Š๊ฒ ๋Š”๊ฐ€?
๋‚˜์—ด์ž ๋‘”๊ฐ‘์ˆ ์„ ์ด์šฉํ•ด value์— ๊ฐ’์„ ๋„ฃ๊ณ  ์žˆ๋‹ค.
ํƒˆ์ถœ ์กฐ๊ฑด์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.
์šฐ์™•ใ…‹ ๊ตฟใ…‹
๋‚ด ํž˜์„ ๋ณด์—ฌ์ฃผ์ง€
โ€ข ์น˜์ˆ˜๋‹จ์œ„์˜ ์ •ํ™•์„ฑ ํ™•์ธ
โ€ข ํ–‰๋ ฌ ์—ฐ์‚ฐ์˜ ์ตœ์ ํ™”
โ€ข ๋งž์ถค์‹ ๋””์ž์ธ ํŒจํ„ด ๊ตฌํ˜„์˜ ์ƒ์„ฑ
new๋ถ€ํ„ฐ ์•Œ์ž
new์˜ ๋’ท์ฒ˜๋ฆฌ ๋‹ด๋‹น
new์ฒ˜๋ฆฌ์ž๋ผ๊ณ  ํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌํ• ๋‹น ๋„์ค‘ ๋ฌธ์ œ๋ฐœ์ƒ์‹œ ์šฐ์„ ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.
์‚ฌ์šฉ์€ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค.
์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋‹ˆ ์•„๋ฌด ์ผ๋„ ์•ˆ ์ผ์–ด๋‚œ ์ ์ด ํ•จ์ •
new๋Š” ํ• ๋‹น ๋ฐ›์„ ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์—†์œผ๋ฉด ๋‚ด๋ถ€์ 
์œผ๋กœ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๊ณ„์† ๊ณต๊ฐ„์„ ์ฐพ๋Š”๋‹ค.
์ด๋•Œ ์ฒ˜๋ฆฌ์ž๋„ ๊ณ„์† ๋ฐ˜๋ณต ํ˜ธ์ถœ๋œ๋‹ค.
์ฒ˜๋ฆฌ์ž ํ•จ์ˆ˜์˜ ํ˜•ํƒœ
โ€ข ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํ™•๋ณด
โ€ข ๋‹ค๋ฅธ new ์ฒ˜๋ฆฌ์ž๋ฅผ ์„ค์น˜
โ€ข new ์ฒ˜๋ฆฌ์ž ์„ค์น˜๋ฅผ ์ œ๊ฑฐ(null์„ ์ง‘์–ด๋„ฃ๋Š”๋‹ค.)
โ€ข ์˜ˆ์™ธ๋ฅผ ๋˜์ง
โ€ข ๋ณต๊ท€ํ•˜์ง€ ์•Š์Œ(๊บผ๋ฒ„๋ฆผ)
์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด
MainCharacter์™€ ์—‘์ŠคํŠธ๋ผ๋Š” ๋น„์ค‘์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด
๋”ฐ๋กœ ์ œ๊ณต๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋‹ค. ๊ทธ๋ƒฅ ์ง์ ‘ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฐฉ์‹์˜ ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ๋„ ์žฌ์‚ฌ์šฉ ํ•˜๊ณ  ์‹ถ๋‹ค.
๊ทธ๋Ÿด ๊ฒฝ์šฐ ๋ฏน์Šค์ธ ์–‘์‹์„ ์‚ฌ์šฉํ•˜์ž.
์ฆ‰, ๋‹ค๋ฅธ ํŒŒ์ƒ ํด๋ž˜์Šค๋“ค์ด ํ•œ ๊ฐ€์ง€์˜ ํŠน์ • ๊ธฐ๋Šฅ๋งŒ์„ ๋ฌผ๋ ค๋ฐ›์•„ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ๋ณธํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ƒ๋˜๋Š” ์ž์‹์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋ฅผ
์‹ ๊ธฐํ•˜๊ฒŒ ๋ฐ˜๋ณต๋˜๋Š” ํ…œํ”Œ๋ฆฟ ํŒจํ„ด ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
new ๋ฐ delete๋ฅผ ์–ธ์ œ ๋ฐ”๊ฟ”์•ผ ํ• ๊นŒ
์™œ new์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์„๊นŒ
โ€ข ์ž˜๋ชป๋œ ํž™ ์‚ฌ์šฉ์„ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด
โ€ข ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด
โ€ข ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์‚ฌ์šฉ์— ๊ด€ํ•œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด
โ€ข ํ• ๋‹น ๋ฐ ํ•ด์ œ ์†๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด
โ€ข ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์˜ ๊ณต๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด
โ€ข ์ ๋‹นํžˆ ํƒ€ํ˜‘ํ•œ ๊ธฐ๋ณธ ํ• ๋‹น์ž์˜ ๋ฐ”์ดํŠธ ์ •๋ ฌ ๋™์ž‘์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด
โ€ข ์ž„์˜์˜ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ๊ตฐ๋ฐ๋กœ ๋‚˜๋ž€ํžˆ ๋ชจ์•„๋†“๊ธฐ ์œ„ํ•ด
โ€ข ๊ทธ๋•Œ๊ทธ๋•Œ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด
new๋ฐ delete๋ฅผ ์ž‘์„ฑ ํ•  ๋•Œ ๋”ฐ๋ผ์•ผ ํ•  ๊ธฐ์กด์˜ ๊ด€๋ก€๋ฅผ ์ž˜ ์•Œ์•„ ๋‘์ž
0๋ฐ”์ดํŠธ๋ฅผ ์š”๊ตฌํ•˜๋ฉด 1๋ฐ”์ดํŠธ๋ฅผ ํ• ๋‹นํ•œ๋‹คโ€ฆ
ํ• ๋‹น์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋ˆ๋‹ค.
๋Œ๋•Œ๋งˆ๋‹ค bad_alloc()์„ ๋‚ ๋ ค์ค€๋‹ค.
0์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ๋ƒฅ ๋๋‚ด๋ฒ„๋ฆฐ๋‹ค.
์œ„์น˜์ง€์ • new๋ผ๋ฉด ์œ„์น˜์ง€์ • delete๋„ ๊ฐ™์ด ์ค€๋น„ํ•˜์ž
์šฐ๋ฆฌ๋Š” ์ง์„ ๋งž์ถฐ์•ผ ํ•จ์„ ์•Œ๊ณ  ์žˆ๋‹ค.
operator new๋ฅผ ํ„ฐ์น˜ํ–ˆ์œผ๋ฉด operator delete๋„ ์ด์— ๋งž๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
์œ„ ํ˜•ํƒœ๋Š” ์ž˜๋ชป๋˜์—ˆ๋‹ค.
์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” new
new์— ์ถ”๊ฐ€๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ์œผ๋‹ˆ
delete๋„ ์ถ”๊ฐ€๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐœ๋…์ ์œผ๋กœ ์œ„์น˜์ง€์ • ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ง์ด ์—†์ด delete๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์–ด๋–ค delete๋„ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ‘œ์ค€ํ˜•์—์„œ ํ™•์žฅํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ๊ฐ‘์‹œ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ
์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฒฝ๊ณ ๋ฅผ ์ง€๋‚˜์น˜์ง€ ๋ง์ž!
TR1์„ ํฌํ•จํ•œ ํ‘œ์ค€๊ณผ ์นœํ•ด์ง€์ž!
๋ถ€์ŠคํŠธ๋ฅผ ๋Š˜ ๊ฐ€๊นŒ์ดํ•˜์ž!
๋ถ€์ŠคํŠธ๋Š” ์‹ฌ์‚ฌ๋ฅผ ๊ฑฐ์น˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ณ„๋ฐœ๋˜๋Š” ๋ชจ์ž„์ด๋‹ค.
์ž…์‚ฌํ•˜๊ณ  ์•ˆ์ •๋˜๋ฉด ๋‹ค์‹œ ์ด ์ฑ…์„ ๋ณด๊ณ  ์š”์•ฝํ•ฉ์‹œ๋‹ค.
Effective c++ 4
Effective c++ 4

Effective c++ 4

  • 1.
  • 2.
  • 3.
  • 4.
    ์šฐ๋ฆฌ๋Š” SkinnedMesh์˜ ๊ตฌ์กฐ๋ฅผ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๊ณ  ์ด ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ์•ผ๋งŒ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ๋ช…์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๊ฐ€์ƒํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ์€ ๋Ÿฐํƒ€์ž„ ๋‹คํ˜•์„ฑ์— ์˜ํ•ด ์ด๋ฃจ์–ด ์ง„๋‹ค.
  • 5.
    ๋ฐ˜๋Œ€๋กœ ์•„๋ž˜์˜ ํ…œํ”Œ๋ฆฟ์ด ์ œ๋Œ€๋กœ์ปดํŒŒ์ผ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Type T๋Š” SetHP(), State() ๋“ฑ์ด ์ง€์›๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ obj๊ฐ€ ์ˆ˜๋ฐ˜๋˜๋Š”(operator==๋“ฑ๋“ฑ) ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ๋Š” ์ปดํŒŒ์ผ ๋„์ค‘ ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. obj์— ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋А๋ƒ์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹คํ˜•์„ฑ์ด๋ผ ํ•œ๋‹ค. ์ด๋“ค์„ T๊ฐ€ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค๋ผ ํ•œ๋‹ค.
  • 6.
    ๋ง์ด ์–ด๋ ต๋‹ค ํ•˜์ง€๋งŒํ’€์–ด๋ณด๋ฉด ๋ณ„๊ฑฐ ์—†๋‹ค โ€ข ์šฐ๋ฆฌ๊ฐ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋“ฏ ํ…œํ”Œ๋ฆฟ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋งž๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šคํ™”๋ผ ํ•œ ๋‹ค. โ€ข ์ด ๊ณผ์ •์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ˆ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํ™•์ธ๋œ๋‹ค. ๋”ฐ๋ผ ์„œ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹คํ˜•์„ฑ์ด๋ผ ๋ถ€๋ฅธ๋‹ค. โ€ข ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ‘œํ˜„์‹์ด๋ผ ํ•œ๋‹ค.
  • 7.
  • 9.
    ๋งˆ์น˜ C++์—์„œ struct์™€class ์ฐจ์ด ๊ฐ™๋‹ค. ์™œ ๋‚˜๋ˆ ๋‚ฌ์„๊นŒ? Struct/Class๋ง๊ณ  Class/Typename
  • 10.
    ๋‘ ๊ฐ€์ง€ ์ด๋ฆ„ iter๋Š”C์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ์ด๋ฅผ ์˜์กด์ด๋ฆ„์ด๋ผ ํ•œ๋‹ค. Value๋Š” C์˜ ํƒ€์ž…๊ณผ๋Š” ์ „ํ˜€ ์ƒ๊ด€์—†๋‹ค. ์ด๋ฅผ ๋น„์˜์กด ์ด๋ฆ„์ด๋ผ ํ•œ๋‹ค. ์œ„ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. ์šฐ์—ฐํžˆ T::const_iterator๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ •์  ๋ณ€์ˆ˜๋ผ๋ฉด? ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด ์•ˆ์ „ํ•ด์•ผ ํ•œ๋‹ค. T::const_iterator๋Š” ์ค‘์ฒฉ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์ด๋ฅผ ์ค‘์ฒฉ์˜์กด์ด๋ฆ„์ด๋ผ ํ•œ๋‹ค.
  • 11.
    ํƒ€์ž…์ด๋ผ๊ณ  ๋ช…์‹œํ•˜์ž T::const_iterator๊ฐ€ ๋ณ€์ˆ˜์ด๋ฆ„๋”ฐ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ํƒ€์ž…์ž„์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ๋‹ค.
  • 12.
    ์ž˜ ์‚ฌ์šฉํ•˜์ž ๋ญโ€ฆ ํ†ต์ผ์„ฑ์—†๋Š” ์ ์ด ์–ธ์–ด์˜ ํŠน์ง•์ด๋‹คโ€ฆ
  • 13.
    ํ•˜๋‚˜๋งŒ ๋” ๋งŒ์•ฝ iterator๋ฅผ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ๋ชป๋งˆ๋•…ํ•˜๋‹ค๋ฉด typedef ์”์‹œ๋‹ค.
  • 14.
    ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋ณธํด๋ž˜์Šค ์•ˆ์˜ ์ด๋ฆ„์— ์ ‘๊ทผ
  • 15.
    ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ๋ฉ”์‹œ์ง€ํ†ต์‹ ์„ ์œ„ํ•ด ๋งŒ๋“  ๊ฐ์ฒด๋“ค
  • 16.
    ๋กœ๊ทธ๋Š” ์Šต๊ด€์ด๋‹ˆ ๋กœ๊ทธ๋ฅผ๋‚จ๊ธฐ๋„๋ก ํ•ฉ์‹œ๋‹ค. MsgSender<client>๋ฅผ ์ƒ์†๋ฐ›์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  sendClear๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•Œ์ง€ ๋ชปํ•œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” client๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์—์„œ ์–ด๋””์„œ ํŒŒ์ƒ๋œ ๊ฒƒ์ธ์ง€ ์•Œ์ง€๋ฅผ ๋ชปํ•œ๋‹ค!
  • 17.
    ๋” ํŒŒ๊ณ ๋“ค๋ฉด ๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ๋•Œ๋Š” ๊ผญ ์•”ํ˜ธํ™”ํ•ด์„œ ๋ณด๋‚ธ๋‹ค๊ณ  ํ•˜์ž ServerA์—๋งŒ ํ•„์š”ํ•œ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ MsgSender๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์™„์ „ ํ…œํ”Œ๋ฆฟ ํŠน์ˆ˜ํ™” ์˜ค๋กœ์ง€ ServerAํƒ€์ž…์— ๋Œ€ํ•ด์„œ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค. ๋งŒ์•ฝ ํ…œํ”Œ๋ฆฟLogMsgSender์— ServerA๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค๋ฉด MsgSender๋Š” SendClear๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค!
  • 18.
    ๋ฐฉ๋ฒ•์€ ๋งŽ์Šต๋‹ˆ๋‹ค. sendClear๊ฐ€ ์ƒ์†๋ ๋•Œ ๋งŒ์„ ๊ฐ€์ •ํ•œ๋‹ค. ๋งŒ์•ฝ ServerA๊ฐ™์€ ํƒ€์ž…์ด client์— ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. This๋ฅผ ์‚ฌ์šฉ Using์„ ์‚ฌ์šฉ ์ƒ์†๋ฐ›์Œ์„ ๋ช…์‹œ
  • 19.
  • 20.
    inline๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ โ€ข Template๋„๋ง‰ ์“ฐ๋ฉด ์˜คํžˆ๋ ค ์ฝ”๋“œ๋น„๋Œ€ํ™” ํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค. โ€ข ๊ณตํ†ต์„ฑ ๋ฐ ๊ฐ€๋ณ€์„ฑ ๋ถ„์„์„ ํ•˜์ž. โ€ข ๋ญ.. ์ด๋ฆ„๋งŒ ์–ด๋ ต์ง€ ์šฐ๋ฆฌ๊ฐ€ ๋Š˜ ํ•ด์˜ค๋˜ ์ง“์ด๋‹ค. โ€ข ๋‹ค๋งŒโ€ฆ ํ…œํ”Œ๋ฆฟ์€ ์•”์‹œ์ ์ด๋‹ค. โ€ข ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜๋กœ ๋ฌถ์€ ์ฝ”๋“œ์ค‘๋ณต ๋ฐฉ์ง€๋Š” ๋ช…์‹œ์ ์ด์ง€๋งŒ โ€ข ํ…œํ”Œ๋ฆฟ์€ ์ฝ”๋“œ์ค‘๋ณต์„ ์–ด๋–ป๊ฒŒ ํ•ด์†Œํ•˜๋Š”์ง€ ์•”์‹œ์ ์ด๋‹ค
  • 21.
    ์•”์‹œ์ ? ๊ฐ๊ฐ์˜ invert์˜ ์‚ฌ๋ณธ์ด์ธ์Šคํ„ด์Šคํ™” ๋œ๋‹ค. ๋‘˜์ด ๊ฐ™์€ ๊ฐ€?์•„๋‹ˆ ๋‹ค!์˜คํžˆ๋ ค ์ฝ”๋“œ ๋น„๋Œ€ํ™”๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ๋‹ค.
  • 22.
    ์ผ๋‹จ, ํ•ด๊ฒฐ๋ฐฉ์•ˆ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์˜invert๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด using์‚ฌ์šฉ ์˜ค๋กœ์ง€ ์‚ฌ๋ณธ์„ ํ”ผํ•  ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— protected๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ๋‹จ์ˆœํžˆ ๊ตฌํ˜„์„ ๋•๊ธฐ ์œ„ํ•œ ์šฉ๋„์ด๊ธฐ ๋•Œ๋ฌธ์— private์„ ์ด์šฉ This๋Š” ์ด๋ฏธ ์œ„์—์„œ using์ด ์‚ฌ์šฉ๋˜์—ˆ์œผ๋‹ˆ ๋ถˆํ•„์š”ํ•˜๋‹ค ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์กฐ๊ฑด์„ ๋„ฃ์–ด์ค€๋‹ค ์•„์ง ๋ฉ€์—ˆ๋‹ค! ๊ณ„์‚ฐ์„ ์œ„ํ•œ ํ–‰๋ ฌ ๋ฐ์ดํ„ฐ๊ฐ€ SquareMatrix์— ์žˆ์„ ๊ฒฝ์šฐ SquareMatrixBase์˜ invert ๊ณ„์‚ฐ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ?
  • 23.
    ์ „๋‹ฌํ•  ๊ตฌ๋ฉ์„ ๋งŒ๋“ค ์ž.์ƒ์„ฑ์ž๋ฅผํ†ตํ•ด ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ SetDataPtrํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 24.
    โ€œํ˜ธํ™˜๋˜๋Š” ๋ชจ๋“  ํƒ€์ž…โ€์€๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ
  • 25.
    ์Šค๋งˆํŠธํฌ์ธํ„ฐ๊ฐ€ ์ข‹๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค ํ•˜์ง€๋งŒ์Šค๋งˆํŠธํฌ์ธํ„ฐ๊ฐ€ ํ‰๋‚ด๋‚ด์ง€ ๋ชปํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์—๊ฒŒ ์žˆ๋‹ค. ๋ฐ”๋กœ ์•”์‹œ์  ๋ณ€ํ™˜์ด๋‹ค.
  • 26.
    ์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์€๋ฐ.. ํ•˜์ง€๋งŒ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์šฉ์„œํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ…œํ”Œ๋ฆฟ์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค ์‚ฌ์ด๋Š” ์•„๋ฌด ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค.
  • 27.
    ๊ทธ๋Ÿฌ๋ฉด ๋งŒ๋“ค์ž ๋ฉค๋ฒ„ ํ•จ์ˆ˜ํ…œํ”Œ๋ฆฟ ๋ชจ๋“  T์™€ Uํƒ€์ž…์— ๋Œ€ํ•˜์—ฌ SmartPtr<T>๊ฐ์ฒด๊ฐ€ SmartPtr<U>๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜ ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋ผ๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒโ€ฆ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์˜์—ญ๋ณด๋‹ค ๋” ๋งŽ์€ ์˜์—ญ์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ž์‹์—์„œ ๋ถ€๋ชจ, ์ž์‹์—์„œ ๋ถ€๋ชจ๊นŒ์ง€๋„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.
  • 28.
    ๊ทธ๋ƒฅ์€ ์•ˆ ๋œ๋‹ค ์Šค๋งˆํŠธํฌ์ธํ„ฐ๋Š”๋ณต์‚ฌํ•  ๋•Œ ์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด์ ์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์„œ๋„ ์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ตญ ํฌ์ธํ„ฐ์˜ ์•”์‹œ์  ๋ณ€ํ™˜์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค.
  • 29.
    ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์˜ํ™œ์šฉ ๊ฐ™์€ shared_ptr์—์„œ์˜ ์•”์‹œ์  ๋ณ€ํ™˜์€ ํ—ˆ์šฉ๋˜์ง€๋งŒ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๋ถ€ํ„ฐ์˜ ๋ณ€ํ™˜์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ๋งŒ explicit์ด ์—†๋‹ค ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ผ๋ฐ˜ํ™” ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋งŒ๋“œ๋Š” ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋ฅผ ๋ง‰๋Š” ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • 30.
    ํƒ€์ž…๋ณ€ํ™˜์ด ๋ฐ”๋žŒ์งํ•  ๊ฒฝ์šฐ๋น„๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ ์•ˆ์— ์ •์˜ํ•ด ๋‘์ž
  • 31.
    ๋ฌธ์ œ์ธ์‹ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์„ ์–ธ๋œ ํด๋ž˜์Šค๊ฐ€์žˆ๋‹ค. ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์—ฐ์‚ฐํ•ด์ฃผ๋Š” operator*ํ•จ์ˆ˜๊ฐ€ ๋ฐ–์— ์„ ์–ธ๋˜์–ด์žˆ๋‹ค.
  • 32.
    ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ๊ฐ™์ง€๋งŒ ์•„๋ž˜์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ์ง€๊ธˆ์˜ ๊ฒฝ์šฐ operator*ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. operator*์˜ ํ…œํ”Œ๋ฆฟ T๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. oneHalf์˜ T๊ฐ€ intํ˜•์ž„์€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ 2์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€? ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ…œํ”Œ๋ฆฟ ์ธ์ž ์ถ”๋ก ๊ณผ์ •์—์„œ ์•”์‹œ์  ๋ณ€ํ™˜์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ…œํ”Œ๋ฆฟ ์ธ์ž ์ถ”๋ก ์„ ํ†ตํ•ด ์ธ์ž๋ฅผ ์ฐพ๋Š”๋‹ค.
  • 33.
    ์ธ์ž์ถ”๋ก ์˜ ์ˆ˜๊ณ ๋ฅผ ๋œ์ž ํ…œํ”Œ๋ฆฟ์ธ์ž์ถ”๋ก ์€ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. T์˜ ์ •๋ณด๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šคํ™” ๋˜๋Š” ์ˆœ๊ฐ„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ปดํŒŒ์ผ์€ ๋˜๋Š”๋ฐ ๋งํฌ๊ฐ€ ์•ˆ ๋œ๋‹คโ€ฆ. ์™ธ๋ถ€ ํ•จ์ˆ˜์ธ operator*ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ๋งŒ ํ–ˆ์ง€ ์ •์˜๊ฐ€ ์•ˆ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋น„๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด friend๋ฐ–์— ์—†๋‹ค.
  • 34.
  • 35.
    ํƒ€์ž…์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ํ•„์š”ํ•˜๋‹ค๋ฉด ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž
  • 36.
    STL๊ตฌ์„ฑ โ€ข ์ปจํ…Œ์ด๋„ˆ โ€ข ๋ฐ˜๋ณต์ž โ€ข์•Œ๊ณ ๋ฆฌ์ฆ˜ โ€ข ์œ ํ‹ธ๋ฆฌํ‹ฐ
  • 37.
    advance ๋ฐ˜๋ณต์ž๋ฅผ ์ง€์ •๋œ ๊ฑฐ๋ฆฌ๋งŒํผ์ด๋™์‹œํ‚ค๊ณ  ์žˆ๋‹ค. Iter += d๊ฐ™์€ ์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜๋‹ค. ์ž„์˜ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž๋งŒ ์œ„ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 38.
    ๋ฐ˜๋ณต์ž์˜ ์ข…๋ฅ˜ โ€ข ์ž…๋ ฅ๋ฐ˜๋ณต์ž(์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผํฌ์ธํ„ฐ ์—ฐ์ƒ, ํ•œ๋ฒˆ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Œ) โ€ข ์ถœ๋ ฅ ๋ฐ˜๋ณต์ž(์œ„์—์„œ ์˜ค๋กœ์ง€ ์“ฐ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฐ”๋€œ) โ€ข ์ˆœ๋ฐฉํ–ฅ ๋ฐ˜๋ณต์ž(์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ๊ณ  ์“ฐ๊ธฐ ๊ฐ€๋Šฅ) โ€ข ์–‘๋ฐฉํ–ฅ ๋ฐ˜๋ณต์ž(์ˆœ๋ฐฉํ–ฅ์—์„œ ์–‘๋ฐฉํ–ฅ๋งŒ ์ถ”๊ฐ€) โ€ข ์ž„์˜ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž(๋ฐ˜๋ณต์ž ์‚ฐ์ˆ ์—ฐ์‚ฐ ์ถ”๊ฐ€)
  • 39.
    ํƒœ๊ทธ ๊ตฌ์กฐ์ฒด ๋ฐ˜๋ณต์ž๋“ค์˜ ๋ฒ”์ฃผ๋ฅผ์‹๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ์ฒด๋“ค
  • 40.
    ๋Œ์•„์™€์„œ Advance๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œiter๊ฐ€ ์–ด๋А ์ข…๋ฅ˜์˜ ๋ฐ˜๋ณต์ž์ธ์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŠน์„ฑ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํŠน์„ฑ์ •๋ณด๋ž€ ์ปดํŒŒ์ผ ๋„์ค‘์— ์–ด๋–ค ์ฃผ์–ด์ง„ ํƒ€์ž…์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์นญํ•œ๋‹ค.
  • 41.
    ํŠน์„ฑ์ •๋ณด โ€ข ๋ฌธ๋ฒ•๊ตฌ์กฐ๋„ ์•„๋‹ˆ๋ฉฐํ‚ค์›Œ๋“œ๋„ ์•„๋‹ˆ๋‹ค. โ€ข ๊ทธ์ € ๊ตฌํ˜„๊ธฐ๋ฒ•์ด๋ฉฐ ๊ด€๋ก€์ด๋‹ค. โ€ข ํŠน์„ฑ์ •๋ณด๋Š” ๊ธฐ๋ณธ์ œ๊ณต ํƒ€์ž…๊ณผ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์—์„œ ๋ชจ๋‘ ๋Œ์•„๊ฐ€ ์•ผ ํ•œ๋‹ค. โ€ข ์–ด๋–ค ํƒ€์ž… ์•ˆ์—์„œ๋Š” ๊ตฌํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ ํŠน์„ฑ์ • ๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • 42.
    ๋ฐ˜๋ณต์ž์˜ ๊ฒฝ์šฐ ๋ฐ˜๋ณต์ž์šฉ ๊ตฌ์„ฑ์ •๋ณด๋Š”ํ‘œ์ค€์— ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค. Struct์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€๋‹ค. โ€žํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šคโ€Ÿ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋ญโ€ฆ ์–ด์ฐจํ”ผ.. ๋‘˜์€ ๊ฐ™์œผ ๋‹ˆ.
  • 43.
    ๋‚ด๋ถ€๊ตฌ์กฐ ์œ„์ฒ˜๋Ÿผ _Iterํƒ€์ž…์˜ ๋‚ด๋ถ€์ •๋ณด๋“ค์„ typedef๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์œ„ ๊ตฌ์กฐ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€์ง€๋งŒ, ๋ฐ˜๋ณต์ž๊ฐ€ ํฌ์ธํ„ฐ์ผ ๊ฒฝ์šฐ ์ „ํ˜€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • 44.
    ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์ผ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” iterator์˜ ํƒœ๊ทธ ๊ตฌ์กฐ์ฒด๋ฅผ iterator_category๋กœ typedefํ•œ๋‹ค. ํƒœ๊ทธ ๊ตฌ์กฐ์ฒด๋Š” iterator์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
  • 45.
    ํฌ์ธํ„ฐ์ผ ๊ฒฝ์šฐ ํฌ์ธํ„ฐ ๋ฒ„์ „์„๋”ฐ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์ง์ ‘ ํ—ค๋”ํŒŒ์ผ์— ๋“ค์–ด๊ฐ€๋ณด๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ๋ถ€๋ถ„ ํ…œํ”Œ๋ฆฟ ํŠน์ˆ˜ํ™”๋ผ๊ณ  ํ•œ๋‹ค.
  • 46.
    ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ๋ผ๊ณ  ํ•˜๋ฉด๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ... ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. Typeid๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํƒ€์ž…์„ ์ทจํ•˜๋Š” ์—ฐ์‚ฐ์ž๋‹ค. if๋ฌธ์€ ์ปดํŒŒ์ผ์ด ๋‹ค๋˜๊ณ  ๋Ÿฐํƒ€์ž„ ๋„์ค‘ ํ‰๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ์ฝ”๋“œ๊ฐ€ ๋น„๋Œ€ํ•ด์ง„๋‹ค. ๋˜ ์ปดํŒŒ์ผ๋„ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ๊ทธ๊ฑด ๋‚˜์ค‘์— ์„ค๋ช…..
  • 47.
    If๋ฌธ์„ ์ œ๊ฑฐํ•˜์ž ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋ฒ„๋กœ๋”ฉ ๋ฒ„์ „์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ผ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ€์žฅ ์ƒํ™ฉ์— ์ž˜ ๋งž๋Š” ๋ฒ„์ „์— ์ ‘๊ทผํ•œ๋‹ค. ์˜ˆ์™ธ์ฒ˜๋ฆฌ
  • 48.
  • 49.
    ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ โ€ข ์ปดํŒŒ์ผ๋„์ค‘์— ์‹คํ–‰๋˜๋Š” ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ โ€ข ์ฆ‰ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจโ€ฆ. โ€ข ์‹คํ–‰์ด ์™„๋ฃŒ๋œ ์‚ฐ์ถœ๋ฌผ์€ ๋‹ค์‹œ C++์ฝ”๋“œ๋กœ ๋“ค์–ด๊ฐ€ ์ปดํŒŒ์ผ ๋œ๋‹ค. โ€ข ๋Ÿฐํƒ€์ž„ ์˜์—ญ์˜ ์—ฐ์‚ฐ์„ ์ปดํŒŒ์ผ์‹œ๊ฐ„์œผ๋กœ ํ•ฉ์ณ๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค. โ€ข ๊นŒ๋‹ค๋กญ๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ผ๋„ ํ•ด๋‚ธ๋‹ค.
  • 50.
    ๋˜ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ์•„๊นŒ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋˜ advance ์ฝ”๋“œ ์ปดํŒŒ์ผ์„ ํ•ด๋ณด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ ๋‹ค.๋ฐ”๋กœ += ๋ถ€๋ถ„์ธ๋ฐ ์ด ๋ถ€๋ถ„์€ if๋ฌธ์— ์˜ํ•ด ์ •ํ•ด์ง„ ์กฐ๊ฑด์ผ ๋•Œ๋งŒ ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™œ ๋‚˜๋Š” ๊ฒƒ์ผ๊นŒ? If๋ฌธ์€ ๋Ÿฐํƒ€์ž„ ๋„์ค‘์— ์‹คํ–‰๋œ๋‹ค. Template์€ ์ปดํŒŒ์ผ ๋„์ค‘ ์‹คํ–‰๋œ๋‹ค. ์ปดํŒŒ์ผ ๋„์ค‘์— iter๋ฅผ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— +=์˜ ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์žก์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
  • 51.
    Letโ€Ÿs TMP โ€ข ๋ฃจํ”„๊ฐ€์—†๋‹คโ€ฆ ํ—.. โ€ข ๋ฃจํ”„ํšจ๊ณผ๋ฅผ ๋‚ด๊ธฐ ์œ„ํ•ด์„œ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค. โ€ข ์ด ์žฌ๊ท€ํ•จ์ˆ˜์กฐ์ฐจ๋„ ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋‹ค. โ€ข ์žฌ๊ท€์‹ ํƒฌํ”Œ๋ฆฟ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ์ด์šฉํ•œ๋‹ค. โ€ข ๋‹คํ–‰์ด TMP์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋„ ๊ฝค ์žˆ๋‹ค.
  • 52.
    ํ•˜์ง€ ์•Š๊ฒ ๋Š”๊ฐ€? ๋‚˜์—ด์ž ๋‘”๊ฐ‘์ˆ ์„์ด์šฉํ•ด value์— ๊ฐ’์„ ๋„ฃ๊ณ  ์žˆ๋‹ค. ํƒˆ์ถœ ์กฐ๊ฑด์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค. ์šฐ์™•ใ…‹ ๊ตฟใ…‹
  • 53.
    ๋‚ด ํž˜์„ ๋ณด์—ฌ์ฃผ์ง€ โ€ข์น˜์ˆ˜๋‹จ์œ„์˜ ์ •ํ™•์„ฑ ํ™•์ธ โ€ข ํ–‰๋ ฌ ์—ฐ์‚ฐ์˜ ์ตœ์ ํ™” โ€ข ๋งž์ถค์‹ ๋””์ž์ธ ํŒจํ„ด ๊ตฌํ˜„์˜ ์ƒ์„ฑ
  • 54.
  • 55.
    new์˜ ๋’ท์ฒ˜๋ฆฌ ๋‹ด๋‹น new์ฒ˜๋ฆฌ์ž๋ผ๊ณ ํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌํ• ๋‹น ๋„์ค‘ ๋ฌธ์ œ๋ฐœ์ƒ์‹œ ์šฐ์„ ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค. ์‚ฌ์šฉ์€ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค. ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋‹ˆ ์•„๋ฌด ์ผ๋„ ์•ˆ ์ผ์–ด๋‚œ ์ ์ด ํ•จ์ • new๋Š” ํ• ๋‹น ๋ฐ›์„ ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์—†์œผ๋ฉด ๋‚ด๋ถ€์  ์œผ๋กœ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๊ณ„์† ๊ณต๊ฐ„์„ ์ฐพ๋Š”๋‹ค. ์ด๋•Œ ์ฒ˜๋ฆฌ์ž๋„ ๊ณ„์† ๋ฐ˜๋ณต ํ˜ธ์ถœ๋œ๋‹ค.
  • 56.
    ์ฒ˜๋ฆฌ์ž ํ•จ์ˆ˜์˜ ํ˜•ํƒœ โ€ข์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํ™•๋ณด โ€ข ๋‹ค๋ฅธ new ์ฒ˜๋ฆฌ์ž๋ฅผ ์„ค์น˜ โ€ข new ์ฒ˜๋ฆฌ์ž ์„ค์น˜๋ฅผ ์ œ๊ฑฐ(null์„ ์ง‘์–ด๋„ฃ๋Š”๋‹ค.) โ€ข ์˜ˆ์™ธ๋ฅผ ๋˜์ง โ€ข ๋ณต๊ท€ํ•˜์ง€ ์•Š์Œ(๊บผ๋ฒ„๋ฆผ)
  • 57.
    ์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด MainCharacter์™€์—‘์ŠคํŠธ๋ผ๋Š” ๋น„์ค‘์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋”ฐ๋กœ ์ œ๊ณต๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋‹ค. ๊ทธ๋ƒฅ ์ง์ ‘ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.
  • 58.
    ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์˜ ์—๋Ÿฌ์ฒ˜๋ฆฌ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ๋„ ์žฌ์‚ฌ์šฉ ํ•˜๊ณ  ์‹ถ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ ๋ฏน์Šค์ธ ์–‘์‹์„ ์‚ฌ์šฉํ•˜์ž. ์ฆ‰, ๋‹ค๋ฅธ ํŒŒ์ƒ ํด๋ž˜์Šค๋“ค์ด ํ•œ ๊ฐ€์ง€์˜ ํŠน์ • ๊ธฐ๋Šฅ๋งŒ์„ ๋ฌผ๋ ค๋ฐ›์•„ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ๋ณธํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.
  • 59.
    ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ƒ๋˜๋Š”์ž์‹์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์‹ ๊ธฐํ•˜๊ฒŒ ๋ฐ˜๋ณต๋˜๋Š” ํ…œํ”Œ๋ฆฟ ํŒจํ„ด ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
  • 60.
    new ๋ฐ delete๋ฅผ์–ธ์ œ ๋ฐ”๊ฟ”์•ผ ํ• ๊นŒ
  • 61.
    ์™œ new์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ”๊พธ๊ณ ์‹ถ์„๊นŒ โ€ข ์ž˜๋ชป๋œ ํž™ ์‚ฌ์šฉ์„ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด โ€ข ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด โ€ข ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์‚ฌ์šฉ์— ๊ด€ํ•œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด โ€ข ํ• ๋‹น ๋ฐ ํ•ด์ œ ์†๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด โ€ข ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์˜ ๊ณต๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด โ€ข ์ ๋‹นํžˆ ํƒ€ํ˜‘ํ•œ ๊ธฐ๋ณธ ํ• ๋‹น์ž์˜ ๋ฐ”์ดํŠธ ์ •๋ ฌ ๋™์ž‘์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด โ€ข ์ž„์˜์˜ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ๊ตฐ๋ฐ๋กœ ๋‚˜๋ž€ํžˆ ๋ชจ์•„๋†“๊ธฐ ์œ„ํ•ด โ€ข ๊ทธ๋•Œ๊ทธ๋•Œ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด
  • 62.
    new๋ฐ delete๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋”ฐ๋ผ์•ผ ํ•  ๊ธฐ์กด์˜ ๊ด€๋ก€๋ฅผ ์ž˜ ์•Œ์•„ ๋‘์ž
  • 63.
    0๋ฐ”์ดํŠธ๋ฅผ ์š”๊ตฌํ•˜๋ฉด 1๋ฐ”์ดํŠธ๋ฅผํ• ๋‹นํ•œ๋‹คโ€ฆ ํ• ๋‹น์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋ˆ๋‹ค. ๋Œ๋•Œ๋งˆ๋‹ค bad_alloc()์„ ๋‚ ๋ ค์ค€๋‹ค.
  • 64.
    0์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ๋ƒฅ๋๋‚ด๋ฒ„๋ฆฐ๋‹ค.
  • 65.
    ์œ„์น˜์ง€์ • new๋ผ๋ฉด ์œ„์น˜์ง€์ •delete๋„ ๊ฐ™์ด ์ค€๋น„ํ•˜์ž
  • 66.
    ์šฐ๋ฆฌ๋Š” ์ง์„ ๋งž์ถฐ์•ผํ•จ์„ ์•Œ๊ณ  ์žˆ๋‹ค. operator new๋ฅผ ํ„ฐ์น˜ํ–ˆ์œผ๋ฉด operator delete๋„ ์ด์— ๋งž๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์œ„ ํ˜•ํƒœ๋Š” ์ž˜๋ชป๋˜์—ˆ๋‹ค.
  • 67.
    ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š”new new์— ์ถ”๊ฐ€๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ์œผ๋‹ˆ delete๋„ ์ถ”๊ฐ€๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐœ๋…์ ์œผ๋กœ ์œ„์น˜์ง€์ • ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง์ด ์—†์ด delete๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์–ด๋–ค delete๋„ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 68.
  • 69.
  • 70.
    ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฒฝ๊ณ ๋ฅผ ์ง€๋‚˜์น˜์ง€๋ง์ž! TR1์„ ํฌํ•จํ•œ ํ‘œ์ค€๊ณผ ์นœํ•ด์ง€์ž! ๋ถ€์ŠคํŠธ๋ฅผ ๋Š˜ ๊ฐ€๊นŒ์ดํ•˜์ž! ๋ถ€์ŠคํŠธ๋Š” ์‹ฌ์‚ฌ๋ฅผ ๊ฑฐ์น˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ณ„๋ฐœ๋˜๋Š” ๋ชจ์ž„์ด๋‹ค.
  • 71.
    ์ž…์‚ฌํ•˜๊ณ  ์•ˆ์ •๋˜๋ฉด ๋‹ค์‹œ์ด ์ฑ…์„ ๋ณด๊ณ  ์š”์•ฝํ•ฉ์‹œ๋‹ค.