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

๐Ÿ—ฃ๏ธ ์‹ ์ž… ์ธํ„ฐ๋ทฐ

(23)
์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘ C++ : ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ (๐Ÿ†šGC) ๐Ÿ“ŒRAII ํŒจํ„ด ์ด๋ž€? RAII (Resource Acquisition Is Initialization)๋Š” C++์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์œผ๋กœ, ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์ž์› ๊ด€๋ฆฌ๋ฅผ ๊ด€๋ จ์ง“๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ์ž์›์˜ ํ• ๋‹น๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ฒฐ๋ถ€์‹œํ‚ค๊ณ , ์ž์›์˜ ํ•ด์ œ๋ฅผ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. RAII๋Š” C++์˜ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ์™€ ๊ฐ™์€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋“ค ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ new์™€ delete๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ณต์žก์„ฑ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค. ๐Ÿ“Œ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ž€? #include ํ—ค๋”๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. C++ ํ”„๋กœ๊ทธ๋žจ์—์„œ new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, delete๋กœ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค. C++์€ ๋ฉ”..
C++ ๊ฐœ๋ฐœ์ž ๋ฉด์ ‘ ์ฒดํฌ๋ฆฌ์ŠคํŠธ C++์˜ ์ค‘๊ธ‰ ์ˆ˜์ค€์— ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์„ ๋•Œ, ๋ฉด์ ‘๊ด€์€ ์—ฌ๋Ÿฌ๋ถ„์ด ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ•์„ ๋„˜์–ด์„œ C++์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค์„ ์–ด๋А ์ •๋„ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋‚˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ์ด๋Ÿฌํ•œ ์ง€์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ๊ธฐ๋Œ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ๊ทผ๊ฑฐ๋ฅผ ์ œ์‹œํ•ด๋“œ๋ฆด๊ฒŒ์š”. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์— ๋Œ€ํ•œ ์ดํ•ด: ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์˜ ์‚ฌ์šฉ, ์ƒ์†, ๋‹คํ˜•์„ฑ, ์บก์Аํ™” ๋“ฑ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ๊ฐœ๋…์— ์ต์ˆ™ํ•˜๊ณ , ์ด๋ฅผ ํ”„๋กœ์ ํŠธ์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ–ˆ๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๊ฒฝํ—˜: STL(Standard Template Library)์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋“ค(์˜ˆ: ๋ฒกํ„ฐ, ๋งต, ์„ธํŠธ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ)์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”..
์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ : ๋™๊ธฐ ๋น„๋™๊ธฐ ๋ธ”๋ก ๋…ผ๋ธ”๋ก ๊ผฌ๊ผฌ๋ฌด ๐Ÿฎ ๐Ÿฑ ๋™๊ธฐ ๋น„๋™๊ธฐ ๋ธ”๋กœํ‚น ๋…ผ๋ธ”๋กœํ‚น์ด ๋ฌด์—‡์ธ๊ฐ€์š”? ๋™๊ธฐ/๋น„๋™๊ธฐ = ํ˜ธ์ถœ๋‹นํ•œ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ๋ฅผ ๋ˆ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋А๋ƒ ๋ธ”๋กœํ‚น/๋„Œ๋ธ”๋กœํ‚น = ์ œ์–ด๊ถŒ์ด ๋ˆ„๊ตฌ์—๊ฒŒ ๋Œ์•„๊ฐ€๋А๋ƒ ๋™๊ธฐ (Synchronous) ๋Š” ์ž‘์—…์˜ ์ˆœ์ฐจ์ ์ธ ์ง„ํ–‰์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ ํŠธ๋žœ์žญ์…˜์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•œ ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ค์Œ ํŠธ๋žœ์žญ์…˜์€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํƒ„์ƒ ๋ฐฐ๊ฒฝ: ์ดˆ๊ธฐ ์ปดํ“จํŒ… ์‹œ์Šคํ…œ์—์„œ๋Š” ์ž‘์—…๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด์•ผ ๋‹ค์Œ ์ž‘์—…์ด ์‹œ์ž‘๋  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ (Asynchronous) ๋Š” ์ž‘์—…์˜ ์™„๋ฃŒ์— ๋Œ€ํ•œ ์ฝœ๋ฐฑ์ด๋‚˜ ์ด๋ฒคํŠธ๊ฐ™์€ ์•Œ๋ฆผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ž‘..
์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘ : C++ ์ •๋ ฌ ์ด์ •๋ฆฌ (๋ฒ„๋ธ”, ์‚ฝ์ž…, ์„ ํƒ, ํ€ต, ํž™, ๋ณ‘ํ•ฉ) ํ™”์ดํŠธ๋ณด๋“œ๋‚˜ ์ข…์ด๋‚˜ ๋น„์ฅฌ์–ผ ์ŠคํŠœ๋””์˜ค์— ์ž‘์„ฑํ•˜๋ฉด์„œ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๋ธ”, ์‚ฝ์ž…, ์„ ํƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋‘ ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•ด์„œ๋Š” ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋‚˜ ์ž‘์€ ๋ฐ์ดํ„ฐ์…‹์—๋Š” ์—ฌ์ „ํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ๋ถ€๋ถ„์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ ์„ ๋•Œ๋Š” ์‚ฝ์ž… ์ •๋ ฌ์ด ๋‹ค๋ฅธ ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ O(NlogN) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ, ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ์™€ ์บ์‹œ ํšจ์œจ ๋ฌธ์ œ๋กœ ์ธํ•ด ํ‰๊ท ์ ์ธ ์„ฑ๋Šฅ์ด ํ€ต ์ •๋ ฌ๋ณด๋‹ค ๋А๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ์ •๋ ฌ๊ณผ ํ€ต ์ •๋ ฌ์€ ๋‘˜ ๋‹ค ํšจ์œจ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์ง€๋งŒ, ์ž‘๋™ ๋ฐฉ์‹์— ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ ์›๋ฆฌ: ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ ..