๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

C++

C++ ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ” ๊ฐ์ฒด ์ง€ํ–ฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๊ฐ์ฒด ์ง€ํ–ฅ์€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋“ค์˜ ๋ชจ์ž„์ธ ๊ฐ์ฒด ๋‹จ์œ„๋กœ ๋ณด๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ํŠน์ง•์œผ๋กœ๋Š” ์ถ”์ƒํ™”, ์บก์Аํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ถ”์ƒํ™”๋Š” ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ, ํ–‰๋™์„ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
์บก์Аํ™”๋Š” ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋ฉฐ ์ •๋ณด ์€๋‹‰์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒ์†์€ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ํ•˜๋‚˜์˜ ๊ฐœ๋…์œผ๋กœ ์ •๋ฆฝํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
๋‹คํ˜•์„ฑ์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๊ฐ์ž ๋ฐฉ์‹์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ํ•ด์‹œํ…Œ์ด๋ธ”๊ณผ STL map์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

(hash table = unordered_map)
ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ๊ฐ’์€ ํ‚ค์— ๋Œ€ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ๋ณด๊ด€๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐ’์„ ์ €์žฅํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฝ์ž… ๋ฐ ๊ฒ€์ƒ‰์€ ๋ถ„ํ• ์ƒํ™˜์ ์œผ๋กœ O(1) ์‹œ๊ฐ„์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ž ์žฌ์  ์ถฉ๋Œ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต์€ ์ถฉ๋Œ๋˜๋Š” ๊ฐ’์„ ์„œ๋กœ ์ฒด์ด๋‹ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ, ํŠน์ • ํ‚ค์— ๋Œ€์‘๋˜๋Š” ์ธ๋ฑ์Šค ์œ„์น˜์— ๋ชจ๋“  ๊ฐ’์„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๋ฌถ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Map์€ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“  red-black tree์— ํ‚ค์™€ ๊ฐ’ ์Œ์œผ๋กœ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ์œ ์ง€๋˜๋ฏ€๋กœ ์‚ฝ์ž…, ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„์€ O(logN)์œผ๋กœ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ delete ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด์ œํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋‚˜ ์ž˜๋ชป๋œ ์„ค๊ณ„๋กœ ์ธํ•˜์—ฌ ํ•ด์ œ๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์•ˆ์ „ํ•œ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ์ž…๋‹ˆ๋‹ค.

unique_ptr๋Š” ํ•˜๋‚˜์˜ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋งŒ์ด ํŠน์ • ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ์ฒด์— ์†Œ์œ ๊ถŒ ๊ฐœ๋…์„ ๋„์ž…ํ•œ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐ์ฒด์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ–๊ณ  ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์†Œ๋ฉธ์ž๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

shared_ptr๋Š” ํ•˜๋‚˜์˜ ํŠน์ • ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๊ฐ€ ์ด ๋ช‡๊ฐœ ์ธ์ง€๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฉด delete ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ž๋™์œผ๋กœ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋‹ค๋ฅด๋‹ค๋ฉด ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์ƒ์† ๊ด€๊ณ„์—์„œ ํด๋ž˜์Šค ๊ฐ„ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„๋งŒ ๊ฐ™๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋‹ฌ๋ผ์•ผ ํ•˜๋ฉฐ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ทธ ํƒ€์ž…๋“ค, ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ๊ฐ€์ƒํ•จ์ˆ˜์˜ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๊ฐ€์ƒํ•จ์ˆ˜๋Š” ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๊ฐ€ virtual๋กœ ์„ ์–ธ๋˜์žˆ์œผ๋ฉด, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ฐ€์ƒ ํ•จ์ˆ˜ ์ฃผ์†Œ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ณ ์œ ํ•œ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ํฌ์ธํ„ฐ๋Š” ๊ฐ€์ƒํ…Œ์ด๋ธ”์˜ ์‹œ์ž‘์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.
ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์ง€ ์•Š์œผ๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ฐ€์ƒ ํ•จ์ˆ˜ ์ฃผ์†Œ๋ฅผ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฐ€์ƒํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ๊ฐ€์ƒ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์–ด๋А ์ฃผ์†Œ์— ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” C++ ๋นŒ๋“œ ๊ณผ์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ, ์ „์ฒ˜๋ฆฌ, ์ปดํŒŒ์ผ, ์–ด์…ˆ๋ธ”, ๋งํฌ, ์‹คํ–‰ ์ˆœ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋จผ์ €, ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ์˜ #์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ ๊ตฌ๋ฌธ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ๊ณ ์ˆ˜์ค€์˜ ์–ธ์–ด๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ” ๋‹จ๊ณ„์—์„œ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ํŒŒ์ผ์„ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋กœ ๋งŒ๋“ค๊ณ  ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ํ•ฉ์น˜๊ณ , ๋งํฌ ๋‹จ๊ณ„์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•ด ์ฃผ๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ” ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ์˜ ์ฐจ์ด์ ๊ณผ ์“ฐ์ž„์ƒˆ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

์–•์€ ๋ณต์‚ฌ๋Š” ํ•œ ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊นŠ์€ ๋ณต์‚ฌ๋Š” ๊ทธ ์™ธ์— ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ์ฐจ์ด๋ฅผ ๋งํ•ด์ฃผ์„ธ์š”.

๋ฐฐ์—ด์€ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ํ•จ๊ป˜ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋งŒํผ ์—ฐ์†์ ์ธ ๊ณต๊ฐ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋Š” ์ž์‹ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ๊ฐ–์ง€ ์•Š๊ณ  ์ €์žฅํ•  ๊ณต๊ฐ„์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฒˆ์ง€๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์€ ๋‘˜๋‹ค ๋ณ€์ˆ˜ ์ž์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฒˆ์ง€๋ฅผ ๋œปํ•˜์ง€๋งŒ, ๋ฐฐ์—ด์€ ํฌ์ธํ„ฐ ์ƒ์ˆ˜์—ฌ์„œ ๋‹ค๋ฅธ ๋ฒˆ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†๊ณ , ํฌ์ธํ„ฐ๋Š” ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ๋Œ€์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” ์ฆ๊ฐ ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฐฐ์—ด์€ ์ƒ์ˆ˜์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ” ์ •์  ๋ฐ”์ธ๋”ฉ๊ณผ ๋™์  ๋ฐ”์ธ๋”ฉ?

๋ฐ”์ธ๋”ฉ์€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์ •์  ๋ฐ”์ธ๋”ฉ์€ ์ปดํŒŒ์ผ ์‹œ์ ์— ์ผ์–ด๋‚˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณผ์ •์—์„œ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์œ ์ง€๋˜๋Š” ๋ฐ”์ธ๋”ฉ์ด๋ฉฐ, ์ปดํŒŒ์ผ ์‹œ ๊ฒฐ์ •๋˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์—๋Ÿฌ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ ์œผ๋กœ๋Š” ์ปดํŒŒ์ผ ์ดํ›„ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋™์  ๋ฐ”์ธ๋”ฉ์€ ๋Ÿฐํƒ€์ž„ ์ค‘ ๊ฒฐ์ •๋˜๋ฉฐ ์‹คํ–‰ ๊ณผ์ •์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ”์ธ๋”ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์ฐพ์•„ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋Ÿฐํƒ€์ž„ ์ค‘ ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๋€” ์ˆ˜ ์žˆ์–ด ์ ์‘์„ฑ์ด ๋†’์ง€๋งŒ, ํƒ€์ž… ์ฒดํฌ๋กœ ์ˆ˜ํ–‰ ์†๋„ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋™์  ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์–ด๋–ค ํฌ์ธํ„ฐ์— ์˜ํ•ด ์ ‘๊ทผ๋˜์—ˆ๋Š”์ง€ ์ƒ๊ด€์—†์ด ์ฐธ์กฐ๋œ ์ธ์Šคํ„ด์Šค์˜ ์‹ค์ œ ํด๋ž˜์Šค์— ๋”ฐ๋ผ ์žฌ์ •์˜ ๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๐Ÿ” rvalue, lvalue์˜ ์ฐจ์ด๋Š”?

lvalue๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ๋ช…, const ๋ณ€์ˆ˜, ๋ฐฐ์—ด ์š”์†Œ, lvalue๋ฅผ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ๋“ฑ์˜ ํ‘œํ˜„์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. rvalue ํ‘œํ˜„์‹์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ” static cast, dynamic cast ์ฐจ์ด

์ •์  ์บ์ŠคํŠธ๋Š” ํ˜• ๋ณ€ํ™˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋Ÿฐํƒ€์ž„์— ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ ์‹œ ์ •์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋™์  ์บ์ŠคํŠธ๋Š” ๋Ÿฐํƒ€์ž„์— ์ƒ์† ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๊ฐ€๋กœ์ง€๋ฅด๊ฑฐ๋‚˜ ๋‹ค์šด์บ์ŠคํŒ…ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํด๋ž˜์Šค ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค ํƒ€์ž…์„ ์ž์‹ ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๊ณ  nullptr์ด๊ฑฐ๋‚˜ ์˜ˆ์™ธ๋ฅผ ๋ณด๊ณ  ์‹คํŒจ๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋™์  ์บ์ŠคํŠธ๋Š” ๋‹คํ˜•์„ฑ์„ ๋„์ง€ ์•Š๋Š” ๊ฐ์ฒด๊ฐ„ ๋ณ€ํ™˜์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ •์  ์บ์ŠคํŠธ๋Š” ์ •์ ์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•ด๋„ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ด๋ฏธ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ๊ณ  ์žˆ์„ ๊ฒฝ์šฐ์ด๋ฉฐ, ๋™์  ์บ์ŠคํŠธ๋Š” ๋™์ ์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ์‹œ๋„ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๊ฒƒ์˜ ํƒ€์ž…์„ ๋ฐ˜๋“œ์‹œ ์•Œ์•„๋ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํƒ€์ž…์— ๋Œ€ํ•ด ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ •์  ๋ณ€ํ™˜์„ ์จ ๋น„์šฉ์„ ์ ˆ์•ฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿ” class์™€ struct์˜ ์ฐจ์ด?

ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ ํ•œ์ •์ž๋กœ private์ด๋ฉฐ, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์™ธ์—๋„ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒ์†์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด์—, ๊ตฌ์กฐ์ฒด๋Š” ๋ณ€์ˆ˜๋“ค์˜ ๋ชจ์ž„๋“ค๋กœ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ณ  ๊ธฐ๋ณธ ํ•œ์ •์ž๋Š” public์ž…๋‹ˆ๋‹ค.

๐Ÿ” ํŒŒ์ด์ฌ๊ณผ C++์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํŒŒ์ด์ฌ๊ณผ C++ ๋ชจ๋‘ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด ์ž…๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋กœ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•œ์ค„ ํ•œ์ค„์”ฉ ์ฝ์–ด ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ ์–ธ์–ด๋ณด๋‹ค ์†๋„๊ฐ€ ๋А๋ฆฝ๋‹ˆ๋‹ค. C++์€ ์ปดํŒŒ์ผ๋Ÿฌ ์–ธ์–ด์ด๋ฉฐ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ›„ ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

๐Ÿ” dynamic linking, static linking์˜ ์ฐจ์ด๋Š”?

linking์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ ์—ฐ๊ฒฐํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
static linking์€ ์‹คํ–‰ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ™์ด ํฌํ•จ์‹œ์ผœ์„œ exe ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ A๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ ๊ฐ๊ฐ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ A์˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ณ€๊ฒฝ์ด ์ƒ๊ธฐ๋ฉด ๋ณ€๊ฒฝ ์ ์šฉ์„ ์œ„ํ•ด ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์—ฌ ๋งํ‚น์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ์‹คํ–‰ ๋ชจ๋“ˆ์— ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๋™์  ๋งํ‚น ๋ฐฉ์‹๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
dynamic linking์€ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ค ๋•Œ, ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ์ฃผ์†Œ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰ ํŒŒ์ผ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋  ๋•Œ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฃผ์†Œ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ A๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค ํ•ด๋„, A์˜ ์ฃผ์†Œ ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์•„๋‚„ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งค๋ฒˆ ์ฃผ์†Œ๋กœ ๊ฐ€์•ผํ•˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ •์  ๋งํ‚น๋ณด๋‹ค ๋А๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ A๋ฅผ ๋™์  ๋งํ‚น ๋ฐฉ์‹์œผ๋กœ ํ•  ๋•Œ, A๊ฐ€ ์ œ๊ฑฐ๋  ๊ฒฝ์šฐ ๋” ์ด์ƒ ์ฐธ์กฐํ•  ํ•จ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 
์ถœ์ฒ˜

https://velog.io/@mardi2020/C-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC

 

C++ ๋ฉด์ ‘ ์งˆ๋ฌธ ์ •๋ฆฌ

 

velog.io