Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก2022/04 (31)

KoreanFoodie's Study

C++ ๊ธฐ์ดˆ ๊ฐœ๋… 13-2 : shared_ptr ์™€ weak_ptr

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! shared_ptr ์–ด๋–ค ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ํฌ์ธํ„ฐ์—์„œ ์ฐธ์กฐ๋ฅผ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํฌ์ธํ„ฐ์˜ ์ˆ˜๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋ถ€ํ„ฐ ํ•ด์ œํ•ด์ฃผ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ shared_ptr์ด๋‹ค. std::shared_ptr p1(new A()); std::shared_ptr p2(p1); // unique_ptr ์ผ ๊ฒฝ์šฐ ์†Œ์œ ๊ถŒ ๋ฌธ์ œ๋กœ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. std::unique_ptr p3(new A()); std::shared_ptr p4(p3); // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ, shared_ptr ๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๊ณ ..

Tutorials/C++ : Beginner 2022. 4. 19. 10:23
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 13-1 : RAII ํŒจํ„ด๊ณผ unique_ptr

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! Resource Acquisition Is Initialization - RAII ์ž์›์˜ ํš๋“์€ ์ดˆ๊ธฐํ™”๋‹ค. ์ด๋Š” ์ž์› ๊ด€๋ฆฌ๋ฅผ ์Šคํƒ์— ํ• ๋‹นํ•œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋”๋ผ๋„, ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์Šคํƒ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์€ ๋น ์ง์—†์ด ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค(stack unwinding). ๋งŒ์•ฝ ์ด ์†Œ๋ฉธ์ž๋“ค ์•ˆ์— ๋‹ค ์‚ฌ์šฉํ•œ ์ž์›์„ ํ•ด์ œํ•˜๋Š” ๋ฃจํ‹ด์„ ๋„ฃ์œผ๋ฉด ์–ด๋–จ๊นŒ? A* pa = new A(); ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ํฌ์ธํ„ฐ pa์˜ ๊ฒฝ์šฐ, ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ๋Œ€์‹ , pa๋ฅผ ์ผ๋ฐ˜์ ์ธ ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ, ํฌ์ธํ„ฐ..

Tutorials/C++ : Beginner 2022. 4. 19. 10:23
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 12-1 : ์šฐ์ธก๊ฐ’, ์ด๋™ ์ƒ์„ฑ์ž์™€ ์šฐ์ธก๊ฐ’ ๋ ˆํผ๋Ÿฐ์Šค

์ขŒ์ธก๊ฐ’๊ณผ ์šฐ์ธก๊ฐ’ C++์—์„œ, ๊ฐ’์€ ๋Œ€์ฒด๋กœ ์šฐ์ธก๊ฐ’๊ณผ ์ขŒ์ธก๊ฐ’์œผ๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค. (๋” ๊ตฌ์ฒด์ ์ธ ๋ถ„๋ฅ˜๋Š” ์ด๊ณณ์„ ์ฐธ์กฐ) ์ขŒ์ธก๊ฐ’์€ '์ด๋ฆ„'์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…€์„, ์šฐ์ธก๊ฐ’์€ '์ด๋ฆ„'์ด ์—†๋Š” ๋…€์„์ด๋‹ค. ์ด๋™ ์ƒ์„ฑ์ž์™€ ์šฐ์ธก๊ฐ’ ๋ ˆํผ๋Ÿฐ์Šค ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด ๋ณด์ž. ๋งŒ์•ฝ ํด๋ž˜์Šค๊ฐ€ String ๋ณ€์ˆ˜๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜ a๋ฅผ ์ด์šฉํ•ด b๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•  ๋•Œ String ๊ฐ’์„ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์ด๋‹ค. ์ƒˆ๋กœ์šด String์„ ๋‹ด์„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋Œ€์‹ , ํฌ์ธํ„ฐ๋ฅผ ์ „๋‹ฌํ•จ์œผ๋กœ์จ ํšจ์œจ์ ์œผ๋กœ ๊ฐ’์„ ์˜ฎ๊ธฐ๋ฉฐ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ์ด๋™ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋™ ์ƒ์„ฑ์ž๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์„ ๊ฐ€์ง„๋‹ค. ์šฐ์ธก๊ฐ’ ๋ ˆํผ๋Ÿฐ์Šค์˜ ๊ฒฝ์šฐ, typename && var ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ, ์ด๋•Œ &..

Tutorials/C++ : Beginner 2022. 4. 19. 10:22
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 11 : ์˜ˆ์™ธ์ฒ˜๋ฆฌ

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! throw ๋กœ ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž. // ์ƒ๋žต ... const T& at(size_t index) const { if (index >= size) { // ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค! throw std::out_of_range("vector ์˜ index ๊ฐ€ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜์˜€์Šต๋‹ˆ๋‹ค."); } return data[index]; } ์œ„์—์„œ๋Š” ๋ฒ”์œ„ ์ดˆ๊ณผ๋ฅผ ์•Œ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. C++ ๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ณ  ์‹ถ๋‹ค๋ฉด throw ๋กœ ์˜ˆ์™ธ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ์ฒด๋ฅผ ์จ์ฃผ๋ฉด ๋œ๋‹ค. C++ ํ‘œ์ค€์—๋Š” overflow_error, length_error, runtime_error ..

Tutorials/C++ : Beginner 2022. 4. 19. 10:18
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 10-4 : C++ ๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ๊ฒƒ (string๊ณผ string_view)

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! std::string std::string ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์‚ฌ์‹ค std::string ์€ basic_string์ด๋ผ๋Š” ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šคํ™” ๋ฒ„์ „์ด๋‹ค. basic_string definition ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค : template class basic_string; Traits ๋Š” ์ฃผ์–ด์ง„ CharT ๋ฌธ์ž๋“ค์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ๋“ค์„ ์ •์˜ํ•ด ๋†“์€ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ, Traits๋ฅผ ๋ฐ”๊พธ๋ฉด ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์กฐ์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค! ๋‹ค์‹œ ๋งํ•ด, basic_string ์— ์ •์˜๋œ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ๋“ค์€ ์‚ฌ์‹ค ์ „๋ถ€ Traits ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ๋“ค์„ ๊ฐ€์ง€๊ณ  ..

Tutorials/C++ : Beginner 2022. 4. 18. 17:07
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 10-3 : STL ์•Œ๊ณ ๋ฆฌ์ฆ˜ (STL algorithm)

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! STL algorithm STL algorithm ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” STL ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ํ•„์š”ํ•œ ํŽธ๋ฆฌํ•œ ๋ฉ”์†Œ๋“œ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. STL ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์€ ๋Œ€์ฒด๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ๋‹ค. template void do_something(Iter begin, Iter end); template void do_something(Iter begin, Iter end, Pred pred); ๋‘ ๋ฒˆ์งธ์˜ Pred ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ bool ์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด(Funtor) ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค. ์ •๋ ฌ (sort, stable_sort, partial_sort ์ •๋ ฌ์€ ..

Tutorials/C++ : Beginner 2022. 4. 18. 15:15