More effective C++
NHN NEXT ์žฅ๋ฌธ์ต
ํ•ญ๋ชฉ9: ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๋Š” ์†Œ๋ฉธ์ž๋กœ
auto_ptr
auto_ptr๋กœ try-catch ๋Œ€์ฒด
๋ฆฌ์†Œ์Šค๋ฅผ ์–ป์–ด๋‚ด๋Š” ์ƒ์„ฑ์ž์™€ ํ•ด์ œํ•˜๋Š” ์†Œ๋ฉธ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
๋ฆฌ์†Œ์Šค๋ฅผ ์–ป์–ด๋‚ด๋Š” ์ƒ์„ฑ์ž์™€ ํ•ด์ œํ•˜๋Š” ์†Œ๋ฉธ์ž
ํ•ญ๋ชฉ10: ์ƒ์„ฑ์ž์—์„œ ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜ ๋ฐฉ์ง€
โ€ข C++์—์„œ๋Š” ์ƒ์„ฑ ๋„์ค‘์— ์˜ˆ์™ธ๋ฅผ ์ผ์œผํ‚จ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋Š” ๋งˆ๋ฌด
๋ฆฌ ์ž‘์—…์„ ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค.
โ€ข ์ด๋Ÿฐ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ƒ์„ฑ์ž๋ฅผ ์„ค๊ณ„ํ•ด์•ผ
ํ•œ๋‹ค.
โ€ข try-catch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
try-catch๋ฅผ ์ด์šฉํ•œ ์ƒ์„ฑ์ž ์˜ˆ์™ธ์ฒ˜๋ฆฌ
try-catch๋ฅผ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ ๋ฐ–์œผ๋กœ
try-catch๋ฅผ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ ๋ฐ–์œผ๋กœ
auto_ptr๋กœ ๊ฐœ์„ 
ํ•ญ๋ชฉ11: ์†Œ๋ฉธ์ž์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ํƒˆ์ถœ๋ชปํ•˜๊ฒŒ
โ€ข ํด๋ž˜์Šค ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ๋Š”?
โ€ข ๊ฐ์ฒด๊ฐ€ ํ†ต์ƒ์ ์ธ ์กฐ๊ฑด์—์„œ ์†Œ๋ฉธ๋˜๋Š” ๊ฒƒ์ธ๋ฐ, ํ†ต์ƒ์ ์ธ ์กฐ๊ฑด์ด๋ž€
์ง€์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ ๊ฐ์ฒด๊ฐ€ ์œ ํšจ๋ฒ”์œ„(scope)๋ฅผ ๋ฒ—์–ด๋‚ฌ์„๋•Œ์™€ ๊ฐ
์ฒด๊ฐ€ ์ง์ ‘ ์‚ญ์ œ(delete)๋  ๋•Œ
โ€ข ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋งค์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๋Š” ๊ฒƒ์ธ๋ฐ, ์˜ˆ์™ธ ์ „ํŒŒ
(exception propagation) ๊ณผ์ •์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ์Šคํƒ ๋˜๊น€๊ฐ€๊ธฐ ์ง„
ํ–‰๋  ๋•Œ
โ€ข ์ฆ‰, ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ ์˜ˆ์™ธ์ผ์ˆ˜๋„ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.
C++ terminateํ•จ์ˆ˜
โ€ข ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์„ ๋์žฅ๋‚ธ๋‹ค.
โ€ข ์ง€์—ญ ๊ฐ์ฒด์กฐ์ฐจ๋„ ์†Œ๋ฉธ๋˜์ง€ ์•Š๋Š”๋‹ค.
โ€ข ์–ด๋–ค ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ๋™์•ˆ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์™ธ ๋•Œ
๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ ํ๋ฆ„์ด ์†Œ๋ฉธ์ž ํ•จ์ˆ˜๋ฅผ ๋– ๋‚˜๋ฉด, C++ terminate ํ•จ
์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.
โ€ข ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” ์†Œ๋ฉธ์ž๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ
์ƒ๋œ ์ƒํƒœ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
terminate ํ˜ธ์ถœ์˜ ์˜ˆ
logDestruction์—์˜ ์˜ˆ์™ธ๊ฐ€ Session ์†Œ๋ฉธ์ž๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ
logDestruction์—์˜ ์˜ˆ์™ธ๊ฐ€ Session ์†Œ๋ฉธ์ž๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ
์†Œ๋ฉธ์ž์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๊ฐ€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ์†Œ๋ฉธ์ž๋Š” ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค
ํ•ญ๋ชฉ12: ์˜ˆ์™ธ๋ฐœ์ƒ์˜ ํŠน์ด์ 
์˜ˆ์™ธ๋Š” ๊ฐ์ฒด์˜ ์‚ฌ๋ณธ์œผ๋กœ์„œ ๋ฐœ์ƒ
์˜ˆ์™ธ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋ฐฉ๋ฒ•
๊ฐ’์— ์˜ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
์•”์‹œ์  ๋ณ€ํ™˜
catch๋ฌธ์—์„œ๋Š” ์•”์‹œ์  ๋ณ€ํ™˜ ๋˜์ง€ ์•Š๋Š”๋‹ค
์˜ˆ์™ธ ํƒ€์ž…๊ณผ catch๋ฌธ์ด ๋ฐ›๋Š” ํƒ€์ž… ์ผ์น˜์‹œํ‚ค๋Š” ํƒ€์ž… ๋ณ€ํ™˜
โ€ข ์ƒ์† ๊ธฐ๋ฐ˜์˜ ๋ณ€ํ™˜
์ƒ์† ๊ธฐ๋ฐ˜์˜ ์˜ˆ์™ธ ๋ณ€ํ™˜
catch() ๋ฌธ์—์„œ ํ—ˆ์šฉ๋˜๋Š” ํƒ€์ž…๋ณ€ํ™˜
โ€ข ํƒ€์ž…์ด ์žˆ๋Š” ํฌ์ธํ„ฐ๋กœ๋ถ€ํ„ฐ ํƒ€์ž…์ด ์—†๋Š” ํฌ์ธํ„ฐ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ
โ€ข ์ฆ‰, const void* ํฌ์ธํ„ฐ๋ฅผ ๋ฐ›๋Š” catch ๋ฌธ์€ ์–ด๋–ค ํฌ์ธํ„ฐ ํƒ€์ž…์˜
์˜ˆ์™ธ์ด๋“ ์ง€ ์žก์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
โ€ข catch (const void*) โ€ฆ
๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ๊ณผ ์˜ˆ์™ธ ์ „ํŒŒ ์‚ฌ์ด ์ฐจ์ด์ 3
โ€ข catch ๋ฌธ์€ ๋“ฑ์žฅํ•œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‚ฌ์šฉ๋œ๋‹ค.
โ€ข ํŒŒ์ƒ ํด๋ž˜์Šค ํƒ€์ž…์„ ๋ฐ›๋Š” catch ๋ฌธ์ด ์ค€๋น„๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•ด๋„ ์ˆœ
์„œ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ ํด๋ž˜์Šค ํƒ€์ž…์„ ๋ฐ›๋Š” catch
๋ฌธ์ด ํŒŒ์ƒ ํด๋ž˜์Šค ํƒ€์ž…์˜ ์˜ˆ์™ธ๋ฅผ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
catch๋ฌธ์€ ํŒŒ์ƒํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ณธํด๋ž˜์Šค ์•ž์œผ๋กœ
ํ•ญ๋ชฉ13: ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋Š” ์ฐธ์กฐ์ž๋กœ
โ€ข catch ๋ฌธ์„ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹์„ ์„ค์ •ํ•ด
์•ผ ํ•œ๋‹ค.
โ€ข ํฌ์ธํ„ฐ, ๊ฐ’, ์ฐธ์กฐ์ž์— ์˜ํ•œ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
ํฌ์ธํ„ฐ๋กœ ์˜ˆ์™ธ ๊ฐ์ฒด ์ „๋‹ฌ
ํฌ์ธํ„ฐ์— ์˜ํ•œ ์˜ˆ์™ธ์ „๋‹ฌ
โ€ข ์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ํž™์— ํ• ๋‹น๋œ ์ฃผ์†Œ๋ผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํฌ
์ธํ„ฐ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค.
โ€ข ๊ทธ๋Ÿฐ๋ฐ ์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ํž™์— ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด?
โ€ข ์‚ฌ์šฉ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
โ€ข ์–ด๋–ค ์‚ฌ์šฉ์ž๋Š” ์ „์—ญ ๊ฐ์ฒด๋‚˜ ์ •์  ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๊ณ ,
์–ด๋–ค ์‚ฌ์šฉ์ž๋Š” ํž™์— ํ• ๋‹น๋œ ์˜ˆ์™ธ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.
โ€ข C++ ๊ธฐ๋ณธ ์ œ๊ณต ํ‘œ์ค€ ์˜ˆ์™ธ๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ชจ๋‘
๊ฐ์ฒด์ด๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์˜ˆ์™ธ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
๊ฐ’์— ์˜ํ•œ ์˜ˆ์™ธ๋ฐ›๊ธฐ(catch-by-value)
โ€ข ์˜ˆ์™ธ ์‚ญ์ œ ๊ณ ๋ฏผ์—์„œ ํ•ด๋ฐฉ
โ€ข C++ ํ‘œ์ค€ ์˜ˆ์™ธ์™€๋„ ์ž˜ ๋งž๋‹ค.
โ€ข ์ „๋‹ฌ๋˜๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” ๋Š˜ ๋‘ ๋ฒˆ์”ฉ ๋ณต์‚ฌ๋˜์–ด์•ผ ํ•œ๋‹ค.
โ€ข ์Šฌ๋ผ์ด์Šค ๋ฌธ์ œ(slicing problem): ๋ฐœ์ƒ ์‹œ์—๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๊ฐ
์ฒด์˜€๋‹ค๊ฐ€, ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ๋ฐ›๋Š” catch ๋ฌธ์— ๋“ค์–ด๊ฐ€๋ฉด ํŒŒ์ƒ ํด๋ž˜
์Šค ๋ถ€๋ถ„์— ์ถ”๊ฐ€๋˜์—ˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹น๋‘‘ ์ž˜๋ ค ๋‚˜๊ฐ€๋Š” ํ˜„์ƒ
slicing problem
์ฐธ์กฐ์ž์— ์˜ํ•œ ์˜ˆ์™ธ๋ฐ›๊ธฐ(catch-by-reference)
โ€ข ๊ฐ์ฒด ์‚ญ์ œ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š” ์—†๋‹ค.
โ€ข C++ ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์—๋„ ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค.
โ€ข ์Šฌ๋ผ์ด์Šค ๋ฌธ์ œ๋„ ์—†๊ณ  ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” ํ•œ ๋ฒˆ๋งŒ ๋ณต์‚ฌ๋œ๋‹ค.
ํ•ญ๋ชฉ14: ์˜ˆ์™ธ์ง€์ •์€ ๋ƒ‰์ฒ ํ•˜๊ฒŒ ์‚ฌ์šฉ
โ€ข ์˜ˆ์™ธ์ง€์ •(exception specification): ํ•จ์ˆ˜๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ฌ ์˜ˆ์™ธ๋ฅผ ๋ฏธ
๋ฆฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
์˜ˆ์™ธ์ง€์ • ๋ถˆ์ผ์น˜๋ฅผ ํ”ผํ•˜๋Š” ํ…œํ”Œ๋ฆฟ
์˜ˆ์™ธ ์ง€์ • ์•ˆ ๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์—๋Š” ์˜ˆ์™ธ ์ง€์ •์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.
์‹œ์Šคํ…œ์ด ์ผ์œผํ‚ค๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌ
โ€ข โ€œ์‹œ์Šคํ…œโ€์ด ์ผ์œผํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์˜ˆ์™ธ(C++ ํ‘œ์ค€ ์˜ˆ์™ธ)
โ€ข ์ด๋Ÿฐ ์˜ˆ์™ธ ์ค‘ ๊ฐ€์žฅ ํ”ํ•œ ๊ฒƒ์ด bad_alloc
โ€ข ์ด ์˜ˆ์™ธ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์‹คํŒจํ•œ operator new์™€ operator
new[]๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ˆ์™ธ๋ฅผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์˜ˆ์™ธ๋กœ ๋Œ€์ฒด
์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ˆ์™ธ๋ฅผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์˜ˆ์™ธ๋กœ ๋Œ€์ฒด
์˜ˆ์™ธ ์ง€์ •์˜ ๊ณ ๋ คํ•  ์ 
โ€ข ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋ ์ง€๋ฅผ ์•Œ๋ ค์ค€๋‹ค๋Š” ๋ฉด์—์„œ ๋ฌธ์„œํ™”์— ๋„์›€์ด
๋œ๋‹ค.
โ€ข C++๋Š” ์˜ˆ์™ธ ์ง€์ •์˜ ์œ„๋ฐฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„
์ผ ์‹œ ์ค‘๋‹จ์‹œํ‚จ๋‹ค.
โ€ข ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์˜ˆ์™ธ ์ง€์ •์— ๋Œ€ํ•ด ๋ถ€๋ถ„์ ์ธ ์ผ์น˜์„ฑ ์ ๊ฒ€๋งŒ ์ˆ˜ํ–‰ํ•˜
๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์˜ˆ์™ธ ์ง€์ •์˜ ์ผ์น˜์„ฑ์„ ์–ด๊ธฐ๊ธฐ ์‰ฝ๋‹ค.
ํ•ญ๋ชฉ15: ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋น„์šฉ์„ ์ œ๋Œ€๋กœ ์•Œ์ž
โ€ข ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ „ํ˜€ ์“ฐ์ง€ ์•Š์•˜์„ ๋•Œ์— ๋น„์šฉ์€
โ€ข ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ๊ณผ์ •์„ ์™„๋ฃŒํ–ˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฐ์— ๋‚ด๋ถ€์ ์œผ
๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค.
โ€ข ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋œ๋‹ค.
โ€ข ๊ฒฐ๋ก ์ ์œผ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ๋ฐฐ์ œํ•˜๊ณ  ์ปดํŒŒ์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์€
์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋„๋ก ์ปดํŒŒ์ผํ•œ ๊ฒƒ์— ๋น„ํ•ด ์†๋„๋„ ๋น ๋ฅด๊ณ  ํฌ
๊ธฐ๋„ ์ž‘๋‹ค.
try ๋ธ”๋ก์œผ๋กœ ์ƒ๊ธฐ๋Š” ๋น„์šฉ
โ€ข try ๋ธ”๋ก์ด ์†Œ์Šค์— ๋“ค์–ด๊ฐ€๊ธฐ๋งŒ ํ•˜๋ฉด, ์ฆ‰ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค๊ณ  ์ž‘
์ •ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ์ง€๋ถˆํ•ด์•ผํ•  ๋น„์šฉ์ด๋‹ค.
โ€ข ์˜ˆ์™ธ ์ง€์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ๋„ try ๋ธ”๋ก๊ณผ ๋น„์Šทํ•œ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ
๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์˜ˆ์™ธ ์ง€์ •์— ๋“ค์–ด๊ฐ€๋Š” try ๋ธ”๋ก๊ณผ ๋น„์Šทํ•˜๋‹ค.
โ€ข ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์†Œ๋ชจ๋˜๋Š”
๋น„์šฉ์€ ํฐ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋˜์ง€ ๋ชปํ•œ๋‹ค.
โ€ข ์šฐ์„  ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์˜ˆ์™ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋„๋ก ์ปดํŒŒ์ผํ•œ๋‹ค.
ํ•ญ๋ชฉ16: 80-20 ๋ฒ•์น™
โ€ข ํ”„๋กœ๊ทธ๋žจ ๋ฆฌ์†Œ์Šค์˜ 80%๋Š” ์ „์ฒด ์‹คํ–‰ ์ฝ”๋“œ์˜ ์•ฝ 20%๋งŒ์ด ์‚ฌ์šฉ
ํ•œ๋‹ค.
โ€ข ์‹คํ–‰์‹œ๊ฐ„์˜ 80%๋Š” ์‹คํ–‰ ์ฝ”๋“œ์˜ ์•ฝ 20%๋งŒ ์†Œ๋ชจํ•œ๋‹ค.
โ€ข ๋ฉ”๋ชจ๋ฆฌ์˜ 80%๋Š” ์‹คํ–‰ ์ฝ”๋“œ์˜ ์•ฝ 20%๋งŒ์ด ์‚ฌ์šฉํ•œ๋‹ค.
โ€ข ๋””์Šคํฌ ์ ‘๊ทผ ํšŒ์ˆ˜์˜ 80%๋Š” ์‹คํ–‰์ฝ”๋“œ์˜ 20%๊ฐ€ ์ ‘๊ทผํ•œ ํšŒ์ˆ˜๋‹ค.
โ€ข ํ”„๋กœ๊ทธ๋žจ ์œ ์ง€๋ณด์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ์ˆ˜๊ณ ์˜ 80%๋Š” ์‹คํ–‰ ์ฝ”๋“œ์˜ 20%
์— ์ง‘์ค‘๋œ๋‹ค.
โ€ข ์•„๋ฌด ๊ณณ์ด๋‚˜ ๊ณจ๋ผ์žก๊ณ  ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๊ณ  ์• ์“ฐ์ง€ ๋งˆ๋ผ.
ํ”„๋กœ๊ทธ๋žจ ํ”„๋กœํŒŒ์ผ๋Ÿฌ
โ€ข program profiler
โ€ข ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” 20%๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
โ€ข ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€์‹ฌ์„ ๋‘๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ง์ ‘ ์ธก์ •ํ•ด์ฃผ๋Š” ๋„๊ตฌ๊ฐ€
ํ•„์š”ํ•˜๋‹ค.
โ€ข ์ˆ˜ํ–‰ ์„ฑ๋Šฅ ๋ฌธ์ œ์— ๋Œ€์ฒ˜ํ•˜๋Š” ์ตœ์„ ์˜ ๊ธธ์€ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ
์‚ฌ์šฉํ•ด์„œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
ํ•ญ๋ชฉ17: ์ง€์—ฐ ํ‰๊ฐ€(lazy evaluation)
โ€ข ์ง€์—ฐ(to be lazy): ์–ด๋–ค ์ผ์„ ํ•˜๊ธด ํ•˜๋˜ ๊ทธ ์ผ์„ ํ•˜๋Š” ์ฝ”๋“œ์˜ ์‹ค
ํ–‰์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•
โ€ข ์ง€์—ฐ ํ‰๊ฐ€: ์ง€์—ฐ ํ‰๊ฐ€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  C++ ํด๋ž˜์Šค๋Š” ์–ด๋–ค ์ฒ˜
๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ์ง„์งœ๋กœ ํ•„์š”ํ•ด์งˆ ๋•Œ๊ฐ€์ง€ ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ ๋ฏธ๋ฃฌ๋‹ค. ์–ด๋–ค ์ปดํ“จ
ํŒ… ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ ๊ทธ ์ž‘์—… ๊ฒฐ๊ณผ๊ฐ€ ์ง„์งœ๋กœ ์š”๊ตฌ๋˜
๊ธฐ ์ „์—๋Š” ๊ทธ๊ฒƒ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ฐธ์กฐ ์นด์šดํŒ…(reference counting)
๋ฐ์ดํ„ฐ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ
์ง€์—ฐ ๋ฐฉ์‹์˜ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ(lazy fetching)
lazy fetching
mutable
โ€ข const ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” โ€˜๋ณดํ†ต์˜โ€™ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†
๋‹ค.
โ€ข mutable๋กœ ์„ ์–ธํ•˜๋ฉด โ€œ์ด ๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ค ๋ฉค๋ฒ„ ํ•จ์ˆ˜์—์„œ๋„ ์ˆ˜์ •
์ด ๊ฐ€๋Šฅํ•จโ€œ์ด๋ž€ ๋œป์ด๋‹ค.
โ€ข const ๋ฉค๋ฒ„๋„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ง€์—ฐ ๋ฐฉ์‹์˜ ํ‘œํ˜„์‹ ํ‰๊ฐ€(lazy expression evaluation)
์ˆ˜์น˜ ๊ณ„์‚ฐ์— ์žˆ์–ด์„œ ์ง€์—ฐ ํ‰๊ฐ€
โ€ข ๋‘ ๊ฐ’ ์‚ฌ์ด์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.
โ€ข ๊ฐ’๊ณผ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋„ ํ•„์š”ํ•˜๋‹ค.
โ€ข ๋Œ€์ž…, ๋ณต์‚ฌ, ๋ง์…ˆ ๊ฐ™์€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•œ ์˜ค๋ฒ„๋กœ๋”ฉ๋„ ํ•„์š”ํ•˜๋‹ค.
โ€ข ์ด๋Ÿฐ ์ˆ˜๊ณ ๋กœ์›€์ด ๋”ฐ๋ฅด์ง€๋งŒ ์ƒ๋‹น๋Ÿ‰์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„/๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ
์•ฝ์„ ํ•ด์ค€๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
ํ•ญ๋ชฉ18: ์˜ˆ์ƒ๋˜๋Š” ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์ค€๋น„
โ€ข ๊ณผ๋„ ์„ ํ–‰ ํ‰๊ฐ€(over-eager evaluation)
โ€ข ํ˜„์žฌ ์š”๊ตฌ๋œ ๊ฒƒ ์ด์™ธ์— ๋” ๋งŽ์€ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ํ•ด๋‘ ์œผ๋กœ์จ ์†Œํ”„ํŠธ
์›จ์–ด์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
๊ณผ๋„ ์„ ํ–‰ ํ‰๊ฐ€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
์ด๋ฏธ ๊ณ„์‚ฐ์ด ๋๋‚ฌ๊ณ  ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๊ฒƒ ๊ฐ™์€ ๊ฐ’์„ ์บ์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
โ€ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์งˆ์˜ ๋ฐ˜๋ณตํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ€ํ•˜๊ฐ€ ์ƒ
๊ธด๋‹ค.
โ€ข ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „์— ๋ฝ‘์•„ ๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•ด๋‘๋Š” ํ•จ์ˆ˜
๋ฅผ ๋งŒ๋“ ๋‹ค.
โ€ข ์ด๋ฏธ ํƒ์ƒ‰ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ ์บ์‹œ๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ
์˜ค๋„๋ก ๋งŒ๋“ ๋‹ค.
์บ์‹ฑํ•˜๋Š” ํ•จ์ˆ˜
๋ฏธ๋ฆฌ๊ฐ€์ ธ์˜ค๊ธฐ(prefetching)
โ€ข ๋””์Šคํฌ ์ปจํ† ๋กค๋Ÿฌ๋Š” ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ, ํ”„๋กœ๊ทธ๋žจ ์ชฝ
์—์„œ ์•„์ฃผ ์ ์€ ์–‘๋งŒ ์š”๊ตฌํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ธ”๋ก ํ•˜๋‚˜ ํ˜น์€ ์„น
ํ„ฐ ํ•˜๋‚˜๋ฅผ ์™•์ฐฝ ์ฝ๋Š”๋‹ค.
โ€ข ์กฐ๊ธˆ์”ฉ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ํ•œ ๋ฒˆ์— ๋งŽ์ด ์ฝ๋Š” ์ชฝ์ด ๋” ๋น ๋ฅด๋‹ค.
โ€ข locality of reference
prefetching์ด ์œ ์šฉํ•œ ๊ฒฝ์šฐ
prefetching์œผ๋กœ ๊ตฌํ˜„
prefetching์˜ ์žฅ์ 
๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„์€ ํ•จ๊ป˜ ์ ˆ์•ฝํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
โ€ข ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํ•„์—ฐ์ ์œผ๋กœ ๋†’์•„์ง„๋‹ค.
โ€ข ๊ณ„์‚ฐ๊ฐ’์„ ์žฌ์ƒ์„ฑํ•˜๋Š”๋ฐ์—๋Š” ์‹œ๊ฐ„์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค.
โ€ข prefetching ๋ฐฉ๋ฒ•์„ ์“ฐ๋ ค๋ฉด ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜จ ๋ช…๋ น์–ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €
์žฅํ•ด ๋‘˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
โ€ข ํ•˜์ง€๋งŒ ์ €์žฅํ•ด ๋†“์€ ๋ฐ์ดํ„ฐ๋‚˜ ๋ช…๋ น์–ด๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ
์‹œ๊ฐ„์€ ์ค„์–ด๋“ ๋‹ค.
โ€ข ๊ฒฐ๊ตญ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.
ํ•ญ๋ชฉ19: ์ž„์‹œ ๊ฐ์ฒด์˜ ์›๋ฅ˜๋ฅผ ํŒŒ์•…
์ด๋ฆ„ ์—†๋Š” ์ž„์‹œ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ์ƒํ™ฉ
โ€ข ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์„ฑ์‚ฌ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ ์šฉ๋  ๋•Œ
โ€ข ํ•จ์ˆ˜๊ฐ€ ๊ฐ์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜(return by value)ํ•  ๋•Œ
ํ•จ์ˆ˜ ํ˜ธ์ถœ ์„ฑ์‚ฌ๋ฅผ ์œ„ํ•œ ์ž„์‹œ ๊ฐ์ฒด
์ž„์‹œ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•
โ€ข ์ž„์‹œ ๊ฐ์ฒด๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์„ฑ์‚ฌ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์†Œ๋ฉธ๋˜๋Š” ์ผ
์€ ํŽธ๋ฆฌํ•˜๊ธด ํ•˜์ง€๋งŒ ๋ถˆํ•„์š”ํ•œ ๋‚ญ๋น„์ด๋‹ค.
โ€ข ์ด๋ฅผ ๋ง‰๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€์ด๋‹ค.
โ€ข ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์„ค๊ณ„ํ•ด์„œ ์ด๋Ÿฐ ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ
โ€ข ํƒ€์ž…๋ณ€ํ™˜์ด ๋ถˆํ•„์š”ํ•˜๋„๋ก ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ
์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋•Œ
โ€ข ๊ฐ์ฒด๊ฐ€ ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋  ๋•Œ ํ˜น์€ ์ƒ์ˆ˜ ๊ฐ์ฒด ์ฐธ์กฐ์ž(reference-to-
const)ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋  ๋•Œ
โ€ข ๋น„์ƒ์ˆ˜ ๊ฐ์ฒด ์ฐธ์กฐ์ž(reference-to-non-const) ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜
๋กœ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋  ๋•Œ์—๋Š” ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
๋น„์ƒ์ˆ˜ ๊ฐ์ฒด ์ฐธ์กฐ์ž์— ๋Œ€ํ•ด์„œ ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
๊ฐ์ฒด๋ฅผ returnํ•  ๋•Œ ์ž„์‹œ ๊ฐ์ฒด ์ƒ์„ฑ
ํ•ญ๋ชฉ20: ๋ฐ˜ํ™˜๊ฐ’ ์ตœ์ ํ™”
์ƒ์„ฑ์ž ์ธ์ž ๋ฐ˜ํ™˜
inline์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ์ตœ์†Œํ™”
ํ•ญ๋ชฉ21: ์˜ค๋ฒ„๋กœ๋”ฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์„ ๋ง‰๊ธฐ
์˜ค๋ฒ„๋กœ๋“œ๋กœ ๋ถˆํ•„์š”ํ•œ ์ž„์‹œ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์ง€
ํ•ญ๋ชฉ22: op ๋Œ€์‹ ์— op= ์‚ฌ์šฉ
์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์„ ์œ„ํ•œ op+=
๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€ ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž
โ€ข ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋Š” ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ํšจ์œจ์ 
์ด๋‹ค. ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋Š” ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž„
์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์†Œ๋ฉธํ•˜๋Š” ๋น„์šฉ์ด ์†Œ๋ชจ๋˜์ง€๋งŒ, ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ
์‚ฐ์ž๋Š” ์™ผ์ชฝ์ธ์ž์—๋‹ค๊ฐ€ ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์—ฐ์‚ฐ์ž
์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๋‹ด์„ ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋†“์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€ ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž
โ€ข ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€ ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋ฅผ ๋™์‹œ์— ์ œ๊ณตํ•จ์œผ๋กœ์จ
ํด๋ž˜์Šค ์‚ฌ์šฉ์ž์—๊ฒŒ ํšจ์œจ๊ณผ ํŽธ๋ฆฌ์„ฑ ์‚ฌ์ด์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ
ํšŒ๋ฅผ ์ค€๋‹ค.
๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€ ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž
๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€ ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž
ํ•ญ๋ชฉ23: ์ • ์•ˆ๋˜๋ฉด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
โ€ข ์ด์ƒ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž‘๊ณ , ๋น ๋ฅด๊ณ , ๊ฐ•๋ ฅํ•˜๊ณ , ์œ ์—ฐํ•˜๊ณ , ํ™•์žฅ
๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ์ง๊ด€์ ์ด๊ณ , ์–ด๋””๋“  ์“ธ ์ˆ˜ ์žˆ๊ณ , ํ”Œ๋žซํผ ์ง€์›๋„ ์ข‹
์•„์•ผ ํ•˜๊ณ , ์‚ฌ์šฉ์ƒ์˜ ์ œ์•ฝ์— ๋Œ€ํ•ด ์ž์œ ๋กญ๊ณ , ๋ฒ„๊ทธ๋„ ์—†์–ด์•ผ ํ•œ๋‹ค.
โ€ข ํ•˜์ง€๋งŒ ์ด๋Š” ์ด์ƒ์ผ ๋ฟ์ด๋‹ค.
โ€ข ์†๋„, ๋ฒ”์šฉ์„ฑ, ๊ฒฌ๊ณ ์„ฑ ๋“ฑ ์ค‘์—์„œ ๋ฌด์—‡์„ ์šฐ์„ ์ˆœ์œ„๋กœ ํ•  ๊ฒƒ์ธ์ง€
์„ ํƒํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
โ€ข ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ต์ฒดํ•ด๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„
์ด๋ค„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
ํ•ญ๋ชฉ24: ๊ฐ€์ƒํ•จ์ˆ˜, ๋‹ค์ค‘ ์ƒ์† ๋“ฑ๋“ฑ ๋น„์šฉ ํŒŒ์•…
โ€ข virtual function
โ€ข virtual table(vtbl): ๋ณดํ†ต ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๋ฐฐ์—ด(์–ด๋–ค ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐฐ
์—ด ๋Œ€์‹ ์— linked list๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค). ์ด ํ…Œ์ด๋ธ”์€ ๊ฐ€์ƒ ํ•จ
์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๊ฑฐ๋‚˜ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์— ๋ฌด์กฐ๊ฑด ์ƒ๊ธฐ๊ณ , vtbl์˜ ๊ฐ
์š”์†Œ๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๊ฐ€์ƒ ํ•จ์ˆ˜ ์ฝ”๋“œ์˜ ์‹œ์ž‘์ฃผ์†Œ์ด
๋‹ค.
๊ฐ€์ƒํ•จ์ˆ˜์™€ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”
๊ฐ€์ƒํ•จ์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ๋น„์šฉ
โ€ข ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์„ ๋‹ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
โ€ข ์–ด๋–ค ํด๋ž˜์Šค์— ๋Œ€ํ•ด ๋งŒ๋“ค์–ด์ง€๋Š” vtbl์˜ ํฌ๊ธฐ๋Š” ๊ทธ ํด๋ž˜์Šค์— ์„ 
์–ธ๋œ ๊ฐ€์ƒํ•จ์ˆ˜(๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ๊นŒ์ง€ ํ•ฉํ•ด์„œ)์˜ ์ˆ˜
์— ๋น„๋ก€ํ•œ๋‹ค.
โ€ข ํ•œ ํด๋ž˜์Šค์˜ vtbl์€ ํ”„๋กœ๊ทธ๋žจ ์ด๋ฏธ์ง€ ์•ˆ์— ๋”ฑ ํ•˜๋‚˜๋งŒ ์žˆ์–ด์•ผ ํ•˜
๋Š”๋ฐ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” vtbl์„ ์–ด๋””์— ๋‘˜ ๊ฒƒ์ธ๊ฐ€?
๊ฐ€์ƒ ํ…Œ์ด๋ธ” ํฌ์ธํ„ฐ
โ€ข vptr
โ€ข ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•œ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์—๋Š” ๊ทธ ํด๋ž˜
์Šค์˜ ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๊ฐ€ ํ•˜๋‚˜ ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค.
โ€ข vptr๋Š” ๋†“์ด๋Š” ๊ฐ์ฒด ๋‚ด์˜ ์œ„์น˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค.
โ€ข vptr์€ ๊ฐ€์ƒ ํ•จ์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ๋‘ ๋ฒˆ์งธ ๋น„์šฉ์ด๋‹ค.
โ€ข ๊ฐ์ฒด๊ฐ€ ๋ณ„๋กœ ํฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ vptr์˜ ๋น„์šฉ์€ ๋งŒ๋งŒ์น˜ ์•Š๋‹ค.
์ˆ˜ํ–‰ ์„ฑ๋Šฅ์„ ์ €ํ•˜ํ•˜๋Š” ๊ฐ€์ƒ ํ•จ์ˆ˜ ๋น„์šฉ
โ€ข ์ธ๋ผ์ธ(inline): ์ปดํŒŒ์ผ ๋„์ค‘์—, ํ˜ธ์ถœ ์œ„์น˜์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์˜ ๋ชธ
์ฒด๋ฅผ ๋ผ์–ด ๋„ฃ๋Š”๋‹ค.
โ€ข ๊ฐ€์ƒ(virtual): ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๋Ÿฐํƒ€์ž„๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค ๊ฒฐ์ •ํ•œ๋‹ค.
โ€ข ๊ฐ€์ƒ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ์ธ๋ผ์ธ ํšจ๊ณผ๋ฅผ ํฌ๊ธฐํ•ด์•ผ ํ•œ๋‹ค.
๋”์ฐํ•œ ๋‹ค์ค‘ ์ƒ์† ๋งˆ๋ฆ„๋ชจ๊ผด
๊ฐ€์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฌ์ธํ„ฐ๊ฐ€ ์ถ”๊ฐ€
๊ฐ€์ƒ ํ…Œ์ด๋ธ” ํฌ์ธํ„ฐ๋ฅผ ์ถ”๊ฐ€
๋Ÿฐํ‹ฐ์ž„ ํƒ€์ž… ์‹๋ณ„(RTTI)
โ€ข runtime type identification
โ€ข ์‹คํ–‰ ์ค‘์— ๊ฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ
โ€ข ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋‘˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
โ€ข C++์— ์˜ํ•˜๋ฉด ๊ฐ์ฒด์˜ ๋™์  ํƒ€์ž…์„ ์ •ํ™•ํžˆ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด
๊ทธ ํƒ€์ž…์— ๊ฐ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
โ€ข ์ด๋Š” ๊ฐ€์ƒ ํ•จ์ˆ˜ ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
RTTI๊ฐ€ ๋ฐ˜์˜๋œ vtbl
๊ฐ€์ƒ ํ•จ์ˆ˜, ๋‹ค์ค‘ ์ƒ์†, ๊ฐ€์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค, RTTI ๋น„์šฉ

Mec++ chapter3,4

  • 1.
    More effective C++ NHNNEXT ์žฅ๋ฌธ์ต
  • 2.
  • 3.
  • 4.
  • 5.
    ๋ฆฌ์†Œ์Šค๋ฅผ ์–ป์–ด๋‚ด๋Š” ์ƒ์„ฑ์ž์™€ํ•ด์ œํ•˜๋Š” ์†Œ๋ฉธ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • 6.
  • 7.
    ํ•ญ๋ชฉ10: ์ƒ์„ฑ์ž์—์„œ ๋ฆฌ์†Œ์Šค๋ˆ„์ˆ˜ ๋ฐฉ์ง€ โ€ข C++์—์„œ๋Š” ์ƒ์„ฑ ๋„์ค‘์— ์˜ˆ์™ธ๋ฅผ ์ผ์œผํ‚จ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋Š” ๋งˆ๋ฌด ๋ฆฌ ์ž‘์—…์„ ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. โ€ข ์ด๋Ÿฐ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ƒ์„ฑ์ž๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. โ€ข try-catch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • 8.
  • 9.
    try-catch๋ฅผ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™”๋ฆฌ์ŠคํŠธ ๋ฐ–์œผ๋กœ
  • 10.
    try-catch๋ฅผ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™”๋ฆฌ์ŠคํŠธ ๋ฐ–์œผ๋กœ
  • 11.
  • 12.
    ํ•ญ๋ชฉ11: ์†Œ๋ฉธ์ž์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ํƒˆ์ถœ๋ชปํ•˜๊ฒŒ โ€ข ํด๋ž˜์Šค ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ๋Š”? โ€ข ๊ฐ์ฒด๊ฐ€ ํ†ต์ƒ์ ์ธ ์กฐ๊ฑด์—์„œ ์†Œ๋ฉธ๋˜๋Š” ๊ฒƒ์ธ๋ฐ, ํ†ต์ƒ์ ์ธ ์กฐ๊ฑด์ด๋ž€ ์ง€์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ ๊ฐ์ฒด๊ฐ€ ์œ ํšจ๋ฒ”์œ„(scope)๋ฅผ ๋ฒ—์–ด๋‚ฌ์„๋•Œ์™€ ๊ฐ ์ฒด๊ฐ€ ์ง์ ‘ ์‚ญ์ œ(delete)๋  ๋•Œ โ€ข ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋งค์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๋Š” ๊ฒƒ์ธ๋ฐ, ์˜ˆ์™ธ ์ „ํŒŒ (exception propagation) ๊ณผ์ •์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ์Šคํƒ ๋˜๊น€๊ฐ€๊ธฐ ์ง„ ํ–‰๋  ๋•Œ โ€ข ์ฆ‰, ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ ์˜ˆ์™ธ์ผ์ˆ˜๋„ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.
  • 13.
    C++ terminateํ•จ์ˆ˜ โ€ข ํ”„๋กœ๊ทธ๋žจ์˜์‹คํ–‰์„ ๋์žฅ๋‚ธ๋‹ค. โ€ข ์ง€์—ญ ๊ฐ์ฒด์กฐ์ฐจ๋„ ์†Œ๋ฉธ๋˜์ง€ ์•Š๋Š”๋‹ค. โ€ข ์–ด๋–ค ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ๋™์•ˆ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์™ธ ๋•Œ ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ ํ๋ฆ„์ด ์†Œ๋ฉธ์ž ํ•จ์ˆ˜๋ฅผ ๋– ๋‚˜๋ฉด, C++ terminate ํ•จ ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค. โ€ข ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” ์†Œ๋ฉธ์ž๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ ์ƒ๋œ ์ƒํƒœ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
  • 14.
  • 15.
    logDestruction์—์˜ ์˜ˆ์™ธ๊ฐ€ Session์†Œ๋ฉธ์ž๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ
  • 16.
    logDestruction์—์˜ ์˜ˆ์™ธ๊ฐ€ Session์†Œ๋ฉธ์ž๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ
  • 17.
    ์†Œ๋ฉธ์ž์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๊ฐ€์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ์†Œ๋ฉธ์ž๋Š” ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
    ์˜ˆ์™ธ ํƒ€์ž…๊ณผ catch๋ฌธ์ด๋ฐ›๋Š” ํƒ€์ž… ์ผ์น˜์‹œํ‚ค๋Š” ํƒ€์ž… ๋ณ€ํ™˜ โ€ข ์ƒ์† ๊ธฐ๋ฐ˜์˜ ๋ณ€ํ™˜
  • 25.
  • 26.
    catch() ๋ฌธ์—์„œ ํ—ˆ์šฉ๋˜๋Š”ํƒ€์ž…๋ณ€ํ™˜ โ€ข ํƒ€์ž…์ด ์žˆ๋Š” ํฌ์ธํ„ฐ๋กœ๋ถ€ํ„ฐ ํƒ€์ž…์ด ์—†๋Š” ํฌ์ธํ„ฐ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ โ€ข ์ฆ‰, const void* ํฌ์ธํ„ฐ๋ฅผ ๋ฐ›๋Š” catch ๋ฌธ์€ ์–ด๋–ค ํฌ์ธํ„ฐ ํƒ€์ž…์˜ ์˜ˆ์™ธ์ด๋“ ์ง€ ์žก์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. โ€ข catch (const void*) โ€ฆ
  • 27.
    ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ๊ณผ ์˜ˆ์™ธ์ „ํŒŒ ์‚ฌ์ด ์ฐจ์ด์ 3 โ€ข catch ๋ฌธ์€ ๋“ฑ์žฅํ•œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‚ฌ์šฉ๋œ๋‹ค. โ€ข ํŒŒ์ƒ ํด๋ž˜์Šค ํƒ€์ž…์„ ๋ฐ›๋Š” catch ๋ฌธ์ด ์ค€๋น„๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•ด๋„ ์ˆœ ์„œ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ ํด๋ž˜์Šค ํƒ€์ž…์„ ๋ฐ›๋Š” catch ๋ฌธ์ด ํŒŒ์ƒ ํด๋ž˜์Šค ํƒ€์ž…์˜ ์˜ˆ์™ธ๋ฅผ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • 28.
  • 29.
    ํ•ญ๋ชฉ13: ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋Š”์ฐธ์กฐ์ž๋กœ โ€ข catch ๋ฌธ์„ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹์„ ์„ค์ •ํ•ด ์•ผ ํ•œ๋‹ค. โ€ข ํฌ์ธํ„ฐ, ๊ฐ’, ์ฐธ์กฐ์ž์— ์˜ํ•œ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 30.
  • 31.
    ํฌ์ธํ„ฐ์— ์˜ํ•œ ์˜ˆ์™ธ์ „๋‹ฌ โ€ข์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ํž™์— ํ• ๋‹น๋œ ์ฃผ์†Œ๋ผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํฌ ์ธํ„ฐ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค. โ€ข ๊ทธ๋Ÿฐ๋ฐ ์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ํž™์— ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด? โ€ข ์‚ฌ์šฉ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. โ€ข ์–ด๋–ค ์‚ฌ์šฉ์ž๋Š” ์ „์—ญ ๊ฐ์ฒด๋‚˜ ์ •์  ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๊ณ , ์–ด๋–ค ์‚ฌ์šฉ์ž๋Š” ํž™์— ํ• ๋‹น๋œ ์˜ˆ์™ธ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค. โ€ข C++ ๊ธฐ๋ณธ ์ œ๊ณต ํ‘œ์ค€ ์˜ˆ์™ธ๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ชจ๋‘ ๊ฐ์ฒด์ด๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์˜ˆ์™ธ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • 32.
    ๊ฐ’์— ์˜ํ•œ ์˜ˆ์™ธ๋ฐ›๊ธฐ(catch-by-value) โ€ข์˜ˆ์™ธ ์‚ญ์ œ ๊ณ ๋ฏผ์—์„œ ํ•ด๋ฐฉ โ€ข C++ ํ‘œ์ค€ ์˜ˆ์™ธ์™€๋„ ์ž˜ ๋งž๋‹ค. โ€ข ์ „๋‹ฌ๋˜๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” ๋Š˜ ๋‘ ๋ฒˆ์”ฉ ๋ณต์‚ฌ๋˜์–ด์•ผ ํ•œ๋‹ค. โ€ข ์Šฌ๋ผ์ด์Šค ๋ฌธ์ œ(slicing problem): ๋ฐœ์ƒ ์‹œ์—๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๊ฐ ์ฒด์˜€๋‹ค๊ฐ€, ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ๋ฐ›๋Š” catch ๋ฌธ์— ๋“ค์–ด๊ฐ€๋ฉด ํŒŒ์ƒ ํด๋ž˜ ์Šค ๋ถ€๋ถ„์— ์ถ”๊ฐ€๋˜์—ˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹น๋‘‘ ์ž˜๋ ค ๋‚˜๊ฐ€๋Š” ํ˜„์ƒ
  • 33.
  • 34.
    ์ฐธ์กฐ์ž์— ์˜ํ•œ ์˜ˆ์™ธ๋ฐ›๊ธฐ(catch-by-reference) โ€ข๊ฐ์ฒด ์‚ญ์ œ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š” ์—†๋‹ค. โ€ข C++ ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์—๋„ ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค. โ€ข ์Šฌ๋ผ์ด์Šค ๋ฌธ์ œ๋„ ์—†๊ณ  ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” ํ•œ ๋ฒˆ๋งŒ ๋ณต์‚ฌ๋œ๋‹ค.
  • 35.
    ํ•ญ๋ชฉ14: ์˜ˆ์™ธ์ง€์ •์€ ๋ƒ‰์ฒ ํ•˜๊ฒŒ์‚ฌ์šฉ โ€ข ์˜ˆ์™ธ์ง€์ •(exception specification): ํ•จ์ˆ˜๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ฌ ์˜ˆ์™ธ๋ฅผ ๋ฏธ ๋ฆฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
  • 36.
  • 37.
    ์˜ˆ์™ธ ์ง€์ • ์•ˆ๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์—๋Š” ์˜ˆ์™ธ ์ง€์ •์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.
  • 38.
    ์‹œ์Šคํ…œ์ด ์ผ์œผํ‚ค๋Š” ์˜ˆ์™ธ๋ฅผ์ฒ˜๋ฆฌ โ€ข โ€œ์‹œ์Šคํ…œโ€์ด ์ผ์œผํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์˜ˆ์™ธ(C++ ํ‘œ์ค€ ์˜ˆ์™ธ) โ€ข ์ด๋Ÿฐ ์˜ˆ์™ธ ์ค‘ ๊ฐ€์žฅ ํ”ํ•œ ๊ฒƒ์ด bad_alloc โ€ข ์ด ์˜ˆ์™ธ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์‹คํŒจํ•œ operator new์™€ operator new[]๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • 39.
    ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ˆ์™ธ๋ฅผ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์˜ˆ์™ธ๋กœ ๋Œ€์ฒด
  • 40.
    ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ˆ์™ธ๋ฅผ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์˜ˆ์™ธ๋กœ ๋Œ€์ฒด
  • 41.
    ์˜ˆ์™ธ ์ง€์ •์˜ ๊ณ ๋ คํ• ์  โ€ข ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋ ์ง€๋ฅผ ์•Œ๋ ค์ค€๋‹ค๋Š” ๋ฉด์—์„œ ๋ฌธ์„œํ™”์— ๋„์›€์ด ๋œ๋‹ค. โ€ข C++๋Š” ์˜ˆ์™ธ ์ง€์ •์˜ ์œ„๋ฐฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ผ ์‹œ ์ค‘๋‹จ์‹œํ‚จ๋‹ค. โ€ข ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์˜ˆ์™ธ ์ง€์ •์— ๋Œ€ํ•ด ๋ถ€๋ถ„์ ์ธ ์ผ์น˜์„ฑ ์ ๊ฒ€๋งŒ ์ˆ˜ํ–‰ํ•˜ ๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์˜ˆ์™ธ ์ง€์ •์˜ ์ผ์น˜์„ฑ์„ ์–ด๊ธฐ๊ธฐ ์‰ฝ๋‹ค.
  • 42.
    ํ•ญ๋ชฉ15: ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋น„์šฉ์„์ œ๋Œ€๋กœ ์•Œ์ž โ€ข ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ „ํ˜€ ์“ฐ์ง€ ์•Š์•˜์„ ๋•Œ์— ๋น„์šฉ์€ โ€ข ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ๊ณผ์ •์„ ์™„๋ฃŒํ–ˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฐ์— ๋‚ด๋ถ€์ ์œผ ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค. โ€ข ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋œ๋‹ค. โ€ข ๊ฒฐ๋ก ์ ์œผ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ๋ฐฐ์ œํ•˜๊ณ  ์ปดํŒŒ์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋„๋ก ์ปดํŒŒ์ผํ•œ ๊ฒƒ์— ๋น„ํ•ด ์†๋„๋„ ๋น ๋ฅด๊ณ  ํฌ ๊ธฐ๋„ ์ž‘๋‹ค.
  • 43.
    try ๋ธ”๋ก์œผ๋กœ ์ƒ๊ธฐ๋Š”๋น„์šฉ โ€ข try ๋ธ”๋ก์ด ์†Œ์Šค์— ๋“ค์–ด๊ฐ€๊ธฐ๋งŒ ํ•˜๋ฉด, ์ฆ‰ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค๊ณ  ์ž‘ ์ •ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ์ง€๋ถˆํ•ด์•ผํ•  ๋น„์šฉ์ด๋‹ค. โ€ข ์˜ˆ์™ธ ์ง€์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ๋„ try ๋ธ”๋ก๊ณผ ๋น„์Šทํ•œ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์˜ˆ์™ธ ์ง€์ •์— ๋“ค์–ด๊ฐ€๋Š” try ๋ธ”๋ก๊ณผ ๋น„์Šทํ•˜๋‹ค. โ€ข ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์†Œ๋ชจ๋˜๋Š” ๋น„์šฉ์€ ํฐ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋˜์ง€ ๋ชปํ•œ๋‹ค. โ€ข ์šฐ์„  ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์˜ˆ์™ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋„๋ก ์ปดํŒŒ์ผํ•œ๋‹ค.
  • 44.
    ํ•ญ๋ชฉ16: 80-20 ๋ฒ•์น™ โ€ขํ”„๋กœ๊ทธ๋žจ ๋ฆฌ์†Œ์Šค์˜ 80%๋Š” ์ „์ฒด ์‹คํ–‰ ์ฝ”๋“œ์˜ ์•ฝ 20%๋งŒ์ด ์‚ฌ์šฉ ํ•œ๋‹ค. โ€ข ์‹คํ–‰์‹œ๊ฐ„์˜ 80%๋Š” ์‹คํ–‰ ์ฝ”๋“œ์˜ ์•ฝ 20%๋งŒ ์†Œ๋ชจํ•œ๋‹ค. โ€ข ๋ฉ”๋ชจ๋ฆฌ์˜ 80%๋Š” ์‹คํ–‰ ์ฝ”๋“œ์˜ ์•ฝ 20%๋งŒ์ด ์‚ฌ์šฉํ•œ๋‹ค. โ€ข ๋””์Šคํฌ ์ ‘๊ทผ ํšŒ์ˆ˜์˜ 80%๋Š” ์‹คํ–‰์ฝ”๋“œ์˜ 20%๊ฐ€ ์ ‘๊ทผํ•œ ํšŒ์ˆ˜๋‹ค. โ€ข ํ”„๋กœ๊ทธ๋žจ ์œ ์ง€๋ณด์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ์ˆ˜๊ณ ์˜ 80%๋Š” ์‹คํ–‰ ์ฝ”๋“œ์˜ 20% ์— ์ง‘์ค‘๋œ๋‹ค. โ€ข ์•„๋ฌด ๊ณณ์ด๋‚˜ ๊ณจ๋ผ์žก๊ณ  ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๊ณ  ์• ์“ฐ์ง€ ๋งˆ๋ผ.
  • 45.
    ํ”„๋กœ๊ทธ๋žจ ํ”„๋กœํŒŒ์ผ๋Ÿฌ โ€ข programprofiler โ€ข ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” 20%๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. โ€ข ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€์‹ฌ์„ ๋‘๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ง์ ‘ ์ธก์ •ํ•ด์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. โ€ข ์ˆ˜ํ–‰ ์„ฑ๋Šฅ ๋ฌธ์ œ์— ๋Œ€์ฒ˜ํ•˜๋Š” ์ตœ์„ ์˜ ๊ธธ์€ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • 46.
    ํ•ญ๋ชฉ17: ์ง€์—ฐ ํ‰๊ฐ€(lazyevaluation) โ€ข ์ง€์—ฐ(to be lazy): ์–ด๋–ค ์ผ์„ ํ•˜๊ธด ํ•˜๋˜ ๊ทธ ์ผ์„ ํ•˜๋Š” ์ฝ”๋“œ์˜ ์‹ค ํ–‰์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ• โ€ข ์ง€์—ฐ ํ‰๊ฐ€: ์ง€์—ฐ ํ‰๊ฐ€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  C++ ํด๋ž˜์Šค๋Š” ์–ด๋–ค ์ฒ˜ ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ์ง„์งœ๋กœ ํ•„์š”ํ•ด์งˆ ๋•Œ๊ฐ€์ง€ ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ ๋ฏธ๋ฃฌ๋‹ค. ์–ด๋–ค ์ปดํ“จ ํŒ… ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ ๊ทธ ์ž‘์—… ๊ฒฐ๊ณผ๊ฐ€ ์ง„์งœ๋กœ ์š”๊ตฌ๋˜ ๊ธฐ ์ „์—๋Š” ๊ทธ๊ฒƒ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • 47.
  • 48.
  • 49.
    ์ง€์—ฐ ๋ฐฉ์‹์˜ ๋ฐ์ดํ„ฐ๊ฐ€์ ธ์˜ค๊ธฐ(lazy fetching)
  • 50.
  • 51.
    mutable โ€ข const ๋ฉค๋ฒ„ํ•จ์ˆ˜๋Š” โ€˜๋ณดํ†ต์˜โ€™ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—† ๋‹ค. โ€ข mutable๋กœ ์„ ์–ธํ•˜๋ฉด โ€œ์ด ๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ค ๋ฉค๋ฒ„ ํ•จ์ˆ˜์—์„œ๋„ ์ˆ˜์ • ์ด ๊ฐ€๋Šฅํ•จโ€œ์ด๋ž€ ๋œป์ด๋‹ค. โ€ข const ๋ฉค๋ฒ„๋„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 52.
    ์ง€์—ฐ ๋ฐฉ์‹์˜ ํ‘œํ˜„์‹ํ‰๊ฐ€(lazy expression evaluation)
  • 53.
    ์ˆ˜์น˜ ๊ณ„์‚ฐ์— ์žˆ์–ด์„œ์ง€์—ฐ ํ‰๊ฐ€ โ€ข ๋‘ ๊ฐ’ ์‚ฌ์ด์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. โ€ข ๊ฐ’๊ณผ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋„ ํ•„์š”ํ•˜๋‹ค. โ€ข ๋Œ€์ž…, ๋ณต์‚ฌ, ๋ง์…ˆ ๊ฐ™์€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•œ ์˜ค๋ฒ„๋กœ๋”ฉ๋„ ํ•„์š”ํ•˜๋‹ค. โ€ข ์ด๋Ÿฐ ์ˆ˜๊ณ ๋กœ์›€์ด ๋”ฐ๋ฅด์ง€๋งŒ ์ƒ๋‹น๋Ÿ‰์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„/๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ ์•ฝ์„ ํ•ด์ค€๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • 54.
    ํ•ญ๋ชฉ18: ์˜ˆ์ƒ๋˜๋Š” ๊ณ„์‚ฐ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์ค€๋น„ โ€ข ๊ณผ๋„ ์„ ํ–‰ ํ‰๊ฐ€(over-eager evaluation) โ€ข ํ˜„์žฌ ์š”๊ตฌ๋œ ๊ฒƒ ์ด์™ธ์— ๋” ๋งŽ์€ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ํ•ด๋‘ ์œผ๋กœ์จ ์†Œํ”„ํŠธ ์›จ์–ด์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
  • 55.
    ๊ณผ๋„ ์„ ํ–‰ ํ‰๊ฐ€๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • 56.
    ์ด๋ฏธ ๊ณ„์‚ฐ์ด ๋๋‚ฌ๊ณ ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๊ฒƒ ๊ฐ™์€ ๊ฐ’์„ ์บ์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ• โ€ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์งˆ์˜ ๋ฐ˜๋ณตํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ€ํ•˜๊ฐ€ ์ƒ ๊ธด๋‹ค. โ€ข ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „์— ๋ฝ‘์•„ ๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•ด๋‘๋Š” ํ•จ์ˆ˜ ๋ฅผ ๋งŒ๋“ ๋‹ค. โ€ข ์ด๋ฏธ ํƒ์ƒ‰ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ ์บ์‹œ๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ ์˜ค๋„๋ก ๋งŒ๋“ ๋‹ค.
  • 57.
  • 58.
    ๋ฏธ๋ฆฌ๊ฐ€์ ธ์˜ค๊ธฐ(prefetching) โ€ข ๋””์Šคํฌ ์ปจํ† ๋กค๋Ÿฌ๋Š”๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ, ํ”„๋กœ๊ทธ๋žจ ์ชฝ ์—์„œ ์•„์ฃผ ์ ์€ ์–‘๋งŒ ์š”๊ตฌํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ธ”๋ก ํ•˜๋‚˜ ํ˜น์€ ์„น ํ„ฐ ํ•˜๋‚˜๋ฅผ ์™•์ฐฝ ์ฝ๋Š”๋‹ค. โ€ข ์กฐ๊ธˆ์”ฉ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ํ•œ ๋ฒˆ์— ๋งŽ์ด ์ฝ๋Š” ์ชฝ์ด ๋” ๋น ๋ฅด๋‹ค. โ€ข locality of reference
  • 59.
  • 60.
  • 61.
  • 62.
    ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„์€ ํ•จ๊ป˜์ ˆ์•ฝํ•˜๊ธฐ ํž˜๋“ค๋‹ค. โ€ข ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํ•„์—ฐ์ ์œผ๋กœ ๋†’์•„์ง„๋‹ค. โ€ข ๊ณ„์‚ฐ๊ฐ’์„ ์žฌ์ƒ์„ฑํ•˜๋Š”๋ฐ์—๋Š” ์‹œ๊ฐ„์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค. โ€ข prefetching ๋ฐฉ๋ฒ•์„ ์“ฐ๋ ค๋ฉด ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜จ ๋ช…๋ น์–ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ € ์žฅํ•ด ๋‘˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. โ€ข ํ•˜์ง€๋งŒ ์ €์žฅํ•ด ๋†“์€ ๋ฐ์ดํ„ฐ๋‚˜ ๋ช…๋ น์–ด๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์€ ์ค„์–ด๋“ ๋‹ค. โ€ข ๊ฒฐ๊ตญ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.
  • 63.
    ํ•ญ๋ชฉ19: ์ž„์‹œ ๊ฐ์ฒด์˜์›๋ฅ˜๋ฅผ ํŒŒ์•…
  • 64.
    ์ด๋ฆ„ ์—†๋Š” ์ž„์‹œ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ์ƒํ™ฉ โ€ข ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์„ฑ์‚ฌ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ ์šฉ๋  ๋•Œ โ€ข ํ•จ์ˆ˜๊ฐ€ ๊ฐ์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜(return by value)ํ•  ๋•Œ
  • 65.
    ํ•จ์ˆ˜ ํ˜ธ์ถœ ์„ฑ์‚ฌ๋ฅผ์œ„ํ•œ ์ž„์‹œ ๊ฐ์ฒด
  • 66.
    ์ž„์‹œ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐฉ๋ฒ• โ€ข ์ž„์‹œ ๊ฐ์ฒด๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์„ฑ์‚ฌ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์†Œ๋ฉธ๋˜๋Š” ์ผ ์€ ํŽธ๋ฆฌํ•˜๊ธด ํ•˜์ง€๋งŒ ๋ถˆํ•„์š”ํ•œ ๋‚ญ๋น„์ด๋‹ค. โ€ข ์ด๋ฅผ ๋ง‰๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€์ด๋‹ค. โ€ข ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์„ค๊ณ„ํ•ด์„œ ์ด๋Ÿฐ ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ โ€ข ํƒ€์ž…๋ณ€ํ™˜์ด ๋ถˆํ•„์š”ํ•˜๋„๋ก ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ
  • 67.
    ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง€๋Š”๋•Œ โ€ข ๊ฐ์ฒด๊ฐ€ ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋  ๋•Œ ํ˜น์€ ์ƒ์ˆ˜ ๊ฐ์ฒด ์ฐธ์กฐ์ž(reference-to- const)ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋  ๋•Œ โ€ข ๋น„์ƒ์ˆ˜ ๊ฐ์ฒด ์ฐธ์กฐ์ž(reference-to-non-const) ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋กœ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋  ๋•Œ์—๋Š” ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • 68.
    ๋น„์ƒ์ˆ˜ ๊ฐ์ฒด ์ฐธ์กฐ์ž์—๋Œ€ํ•ด์„œ ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • 69.
    ๊ฐ์ฒด๋ฅผ returnํ•  ๋•Œ์ž„์‹œ ๊ฐ์ฒด ์ƒ์„ฑ
  • 70.
  • 71.
  • 72.
  • 73.
    ํ•ญ๋ชฉ21: ์˜ค๋ฒ„๋กœ๋”ฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ์•”์‹œ์  ํƒ€์ž…๋ณ€ํ™˜์„ ๋ง‰๊ธฐ
  • 74.
  • 75.
  • 76.
  • 77.
    ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž โ€ข ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋Š” ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ํšจ์œจ์  ์ด๋‹ค. ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋Š” ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž„ ์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์†Œ๋ฉธํ•˜๋Š” ๋น„์šฉ์ด ์†Œ๋ชจ๋˜์ง€๋งŒ, ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ ์‚ฐ์ž๋Š” ์™ผ์ชฝ์ธ์ž์—๋‹ค๊ฐ€ ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์—ฐ์‚ฐ์ž ์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๋‹ด์„ ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋†“์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • 78.
    ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž โ€ข ๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€ ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž๋ฅผ ๋™์‹œ์— ์ œ๊ณตํ•จ์œผ๋กœ์จ ํด๋ž˜์Šค ์‚ฌ์šฉ์ž์—๊ฒŒ ํšจ์œจ๊ณผ ํŽธ๋ฆฌ์„ฑ ์‚ฌ์ด์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ ํšŒ๋ฅผ ์ค€๋‹ค.
  • 79.
    ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž
  • 80.
    ๋‹จ๋… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž์™€๋Œ€์ž… ํ˜•ํƒœ ์—ฐ์‚ฐ์ž
  • 81.
    ํ•ญ๋ชฉ23: ์ • ์•ˆ๋˜๋ฉด๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ โ€ข ์ด์ƒ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž‘๊ณ , ๋น ๋ฅด๊ณ , ๊ฐ•๋ ฅํ•˜๊ณ , ์œ ์—ฐํ•˜๊ณ , ํ™•์žฅ ๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ์ง๊ด€์ ์ด๊ณ , ์–ด๋””๋“  ์“ธ ์ˆ˜ ์žˆ๊ณ , ํ”Œ๋žซํผ ์ง€์›๋„ ์ข‹ ์•„์•ผ ํ•˜๊ณ , ์‚ฌ์šฉ์ƒ์˜ ์ œ์•ฝ์— ๋Œ€ํ•ด ์ž์œ ๋กญ๊ณ , ๋ฒ„๊ทธ๋„ ์—†์–ด์•ผ ํ•œ๋‹ค. โ€ข ํ•˜์ง€๋งŒ ์ด๋Š” ์ด์ƒ์ผ ๋ฟ์ด๋‹ค. โ€ข ์†๋„, ๋ฒ”์šฉ์„ฑ, ๊ฒฌ๊ณ ์„ฑ ๋“ฑ ์ค‘์—์„œ ๋ฌด์—‡์„ ์šฐ์„ ์ˆœ์œ„๋กœ ํ•  ๊ฒƒ์ธ์ง€ ์„ ํƒํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. โ€ข ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ต์ฒดํ•ด๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ด๋ค„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • 82.
    ํ•ญ๋ชฉ24: ๊ฐ€์ƒํ•จ์ˆ˜, ๋‹ค์ค‘์ƒ์† ๋“ฑ๋“ฑ ๋น„์šฉ ํŒŒ์•… โ€ข virtual function โ€ข virtual table(vtbl): ๋ณดํ†ต ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๋ฐฐ์—ด(์–ด๋–ค ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐฐ ์—ด ๋Œ€์‹ ์— linked list๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค). ์ด ํ…Œ์ด๋ธ”์€ ๊ฐ€์ƒ ํ•จ ์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๊ฑฐ๋‚˜ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์— ๋ฌด์กฐ๊ฑด ์ƒ๊ธฐ๊ณ , vtbl์˜ ๊ฐ ์š”์†Œ๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๊ฐ€์ƒ ํ•จ์ˆ˜ ์ฝ”๋“œ์˜ ์‹œ์ž‘์ฃผ์†Œ์ด ๋‹ค.
  • 83.
  • 85.
    ๊ฐ€์ƒํ•จ์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ๋น„์šฉ โ€ข๊ฐ€์ƒ ํ…Œ์ด๋ธ”์„ ๋‹ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. โ€ข ์–ด๋–ค ํด๋ž˜์Šค์— ๋Œ€ํ•ด ๋งŒ๋“ค์–ด์ง€๋Š” vtbl์˜ ํฌ๊ธฐ๋Š” ๊ทธ ํด๋ž˜์Šค์— ์„  ์–ธ๋œ ๊ฐ€์ƒํ•จ์ˆ˜(๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ๊นŒ์ง€ ํ•ฉํ•ด์„œ)์˜ ์ˆ˜ ์— ๋น„๋ก€ํ•œ๋‹ค. โ€ข ํ•œ ํด๋ž˜์Šค์˜ vtbl์€ ํ”„๋กœ๊ทธ๋žจ ์ด๋ฏธ์ง€ ์•ˆ์— ๋”ฑ ํ•˜๋‚˜๋งŒ ์žˆ์–ด์•ผ ํ•˜ ๋Š”๋ฐ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” vtbl์„ ์–ด๋””์— ๋‘˜ ๊ฒƒ์ธ๊ฐ€?
  • 86.
    ๊ฐ€์ƒ ํ…Œ์ด๋ธ” ํฌ์ธํ„ฐ โ€ขvptr โ€ข ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•œ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์—๋Š” ๊ทธ ํด๋ž˜ ์Šค์˜ ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๊ฐ€ ํ•˜๋‚˜ ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค. โ€ข vptr๋Š” ๋†“์ด๋Š” ๊ฐ์ฒด ๋‚ด์˜ ์œ„์น˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค. โ€ข vptr์€ ๊ฐ€์ƒ ํ•จ์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ๋‘ ๋ฒˆ์งธ ๋น„์šฉ์ด๋‹ค. โ€ข ๊ฐ์ฒด๊ฐ€ ๋ณ„๋กœ ํฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ vptr์˜ ๋น„์šฉ์€ ๋งŒ๋งŒ์น˜ ์•Š๋‹ค.
  • 87.
    ์ˆ˜ํ–‰ ์„ฑ๋Šฅ์„ ์ €ํ•˜ํ•˜๋Š”๊ฐ€์ƒ ํ•จ์ˆ˜ ๋น„์šฉ โ€ข ์ธ๋ผ์ธ(inline): ์ปดํŒŒ์ผ ๋„์ค‘์—, ํ˜ธ์ถœ ์œ„์น˜์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์˜ ๋ชธ ์ฒด๋ฅผ ๋ผ์–ด ๋„ฃ๋Š”๋‹ค. โ€ข ๊ฐ€์ƒ(virtual): ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๋Ÿฐํƒ€์ž„๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค ๊ฒฐ์ •ํ•œ๋‹ค. โ€ข ๊ฐ€์ƒ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ์ธ๋ผ์ธ ํšจ๊ณผ๋ฅผ ํฌ๊ธฐํ•ด์•ผ ํ•œ๋‹ค.
  • 88.
  • 89.
    ๊ฐ€์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ์‚ฌ์šฉํ•˜๋ฉด ํฌ์ธํ„ฐ๊ฐ€ ์ถ”๊ฐ€
  • 90.
  • 91.
    ๋Ÿฐํ‹ฐ์ž„ ํƒ€์ž… ์‹๋ณ„(RTTI) โ€ขruntime type identification โ€ข ์‹คํ–‰ ์ค‘์— ๊ฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ โ€ข ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋‘˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. โ€ข C++์— ์˜ํ•˜๋ฉด ๊ฐ์ฒด์˜ ๋™์  ํƒ€์ž…์„ ์ •ํ™•ํžˆ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ๊ทธ ํƒ€์ž…์— ๊ฐ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. โ€ข ์ด๋Š” ๊ฐ€์ƒ ํ•จ์ˆ˜ ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • 92.
  • 93.
    ๊ฐ€์ƒ ํ•จ์ˆ˜, ๋‹ค์ค‘์ƒ์†, ๊ฐ€์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค, RTTI ๋น„์šฉ