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

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด65

ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ชจ๋“  ๊ฒƒ(Template Meta Programming) ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Template Metaprogramming)ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Template Metaprogramming)์€ C++์˜ ๊ฐ•๋ ฅํ•œ ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์€ C++์˜ ํ…œํ”Œ๋ฆฟ์„ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—์„œ ๋” ๋‚˜์•„๊ฐ€, ๋ณต์žกํ•œ ๊ณ„์‚ฐ์ด๋‚˜ ์กฐ๊ฑด ์ฒ˜๋ฆฌ๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•˜์—ฌ, ์‹คํ–‰ ์‹œ์ ์˜ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.1. ๊ธฐ๋ณธ ๊ฐœ๋…ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ์˜ ์‹คํ–‰ ์‹œ์ (runtime) ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋  ๋•Œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•˜์—ฌ, ์‹คํ–‰ ์‹œ์ ์—์„œ๋Š” ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋งŒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก .. 2024. 8. 28.
Structured Bindings์˜ ๋ชจ๋“  ๊ฒƒ Structured Bindings๋Š” C++17์—์„œ ๋„์ž…๋œ ๊ธฐ๋Šฅ์œผ๋กœ, ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(์˜ˆ: std::tuple, std::pair, ๋ฐฐ์—ด, ๊ตฌ์กฐ์ฒด ๋“ฑ)์—์„œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋™์‹œ์— ์ถ”์ถœํ•˜๊ณ , ๊ฐ๊ฐ์„ ๋ณ„๋„์˜ ๋ณ€์ˆ˜์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ํŠœํ”Œ์ด๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ์กฐ์ฒด์—์„œ ์œ ์šฉํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ํŽธ์˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.1. ๊ธฐ๋ณธ ๊ฐœ๋…Structured Bindings๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—์„œ ๊ฐ ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ๋ถ„ํ•ดํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” auto ํ‚ค์›Œ๋“œ์™€ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•:auto [var1, var2, var3] = someTuple;์—ฌ๊ธฐ์„œ someTuple์€ ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๊ณ , [var1, var2, var3]๋Š” .. 2024. 8. 27.
if-init์˜ ๋ชจ๋“  ๊ฒƒ(if๋ฌธ ๋‚ด์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ, ์ดˆ๊ธฐํ™”) if-init ๋ฌธ๋ฒ•C++17์—์„œ ๋„์ž…๋œ if-init ๋ฌธ๋ฒ•์€ if ์กฐ๊ฑด๋ฌธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„(์œ ํšจ ๋ฒ”์œ„)๋ฅผ if ๋ฌธ ๋‚ด๋ถ€๋กœ ์ œํ•œํ•˜์—ฌ ๋” ์•ˆ์ „ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.1. ๊ธฐ๋ณธ ๊ฐœ๋…๊ธฐ์กด์˜ if ์กฐ๊ฑด๋ฌธ์—์„œ๋Š” ์กฐ๊ฑด๋ฌธ ์™ธ๋ถ€์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ ํ›„, ์ด ๋ณ€์ˆ˜๋ฅผ if ์กฐ๊ฑด์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ C++17๋ถ€ํ„ฐ๋Š” if ๋ฌธ ์•ˆ์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๊ธฐ์กด ๋ฐฉ์‹ (C++17 ์ด์ „):int x = getValue();if (x > 0) { std::cout if-init ์‚ฌ์šฉ ๋ฐฉ์‹ (C++17):if (int x = getValue(); x > 0) { std:.. 2024. 8. 26.
[C++] std::optional์˜ ๋ชจ๋“  ๊ฒƒ std::optional์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ์‹ค๋ฌด ์˜ˆ์ œstd::optional์€ C++17์—์„œ ๋„์ž…๋œ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์œผ๋กœ, ๊ฐ’์ด "์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ๋Š”" ์ƒํ™ฉ์„ ์•ˆ์ „ํ•˜๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „์— nullptr, NULL, ํ˜น์€ ํŠน๋ณ„ํ•œ ๊ฐ’(์˜ˆ: -1)์„ ์‚ฌ์šฉํ•˜์—ฌ "๊ฐ’ ์—†์Œ"์„ ํ‘œํ˜„ํ•˜๋˜ ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ๋” ์•ˆ์ „ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.1. std::optional์˜ ๊ธฐ๋ณธ ๊ฐœ๋…std::optional์€ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค์ด๋ฉฐ, ์–ด๋–ค ํƒ€์ž… T์— ๋Œ€ํ•ด std::optional๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํƒ€์ž…์€ T ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐ’์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” std::nullopt ์ƒํƒœ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”:std::optional maybeInt;std::o.. 2024. 8. 22.
[c++] constexpr์˜ ๋ชจ๋“  ๊ฒƒ constexpr๋Š” C++11์—์„œ ๋„์ž…๋œ ํ‚ค์›Œ๋“œ๋กœ, ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ์ƒ์ˆ˜ ํ‘œํ˜„์‹์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด ํ‚ค์›Œ๋“œ๋Š” ์ฃผ๋กœ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ‰๊ฐ€ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. C++17 ์ดํ›„๋กœ๋Š” ์‚ฌ์šฉ ๋ฒ”์œ„๊ฐ€ ๋”์šฑ ํ™•์žฅ๋˜์–ด ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณต์žกํ•œ ์—ฐ์‚ฐ๊ณผ ์กฐ๊ฑด๋ฌธ์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํ‘œํ˜„์‹๋„ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.constexpr์˜ ํŠน์ง• ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•1. constexpr ๋ณ€์ˆ˜constexpr ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ๊ฐ’์ด ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋˜๋„๋ก ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.constexpr int myValue = 10; // ์ปดํŒŒ์ผ ํƒ€์ž„์— myValue๋Š” 10์œผ๋กœ ๊ณ ์ •๋จ2. constexpr ํ•จ์ˆ˜constexpr ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ˜ธ์ถœ.. 2024. 8. 21.
Asyncio - ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฃผ์š” ๊ฐœ๋…ํŒŒ์ด์ฌ์˜ asyncio ๋ชจ๋“ˆ์€ ๋น„๋™๊ธฐ I/O, ์ด๋ฒคํŠธ ๋ฃจํ”„, coroutines ๋ฐ ํƒœ์Šคํฌ(task) ๊ด€๋ฆฌ ๋“ฑ์„ ํ†ตํ•ด ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. asyncio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ๋ฐ ์›น ์†Œ์ผ“, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํŒŒ์ผ I/O ๋“ฑ์˜ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋ฒคํŠธ ๋ฃจํ”„ (Event Loop):์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝ”๋ฃจํ‹ด๊ณผ ์ฝœ๋ฐฑ์„ ๊ด€๋ฆฌํ•˜๊ณ , I/O ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.asyncio.run() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ฝ”๋ฃจํ‹ด (Coroutine):async def๋กœ ์ •์˜๋œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ฝ”๋ฃจํ‹ด์ด๋‚˜ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.ํƒœ์Šคํฌ (Task):์ฝ”๋ฃจํ‹ด์„ ์ด๋ฒคํŠธ ๋ฃจํ”„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์œ„๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค... 2024. 6. 23.