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

์ „์ฒด ๊ธ€116

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.
[๋””์ž์ธํŒจํ„ด] ์ปดํฌ์ง€ํŠธ(Composite) ํŒจํ„ด ์ปดํฌ์ง€ํŠธ ํŒจํ„ด(Composite Pattern)*์ปดํฌ์ง€ํŠธ ํŒจํ„ด(Composite Pattern)**์€ ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐ์ฒด๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๋ถ€๋ถ„-์ „์ฒด ๊ณ„์ธต์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹จ์ผ ๊ฐ์ฒด์™€ ๋ณตํ•ฉ ๊ฐ์ฒด๋ฅผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐœ๋ณ„ ๊ฐ์ฒด(Leaf)์™€ ๋ณตํ•ฉ ๊ฐ์ฒด(Composite)๋ฅผ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.1. ์ปดํฌ์ง€ํŠธ ํŒจํ„ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ตฌ์„ฑ ์š”์†Œ:Component: ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” Leaf์™€ Composite์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.Leaf: ํŠธ๋ฆฌ์˜ ๋ง๋‹จ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•˜๋ฉฐ, ๋” ์ด์ƒ ์ž์‹์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. Component ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.Compos.. 2024. 8. 25.
[๋””์ž์ธํŒจํ„ด] ์ „๋žต(Strategy) ํŒจํ„ด ์ „๋žต(Strategy) ํŒจํ„ด์ „๋žต ํŒจํ„ด(Strategy Pattern)์€ ๊ฐ์ฒด์˜ ํ–‰๋™ ๋ฐฉ์‹์„ ์บก์Šํ™”ํ•˜์—ฌ ๋™์ ์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๊ฐ์ฒด์˜ ํ–‰์œ„(behavior)๋ฅผ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋Ÿฐํƒ€์ž„์— ๊ทธ ํ–‰๋™์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.1. ์ „๋žต ํŒจํ„ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ตฌ์„ฑ ์š”์†Œ:Context: ํŠน์ • ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” Strategy ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Strategy: ์ „๋žต์˜ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํŠน์ • ์ž‘์—…(ํ–‰๋™)์— ๋Œ€ํ•ด ๊ณตํ†ต๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.Concrete Strategy: Strategy ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” .. 2024. 8. 24.
[๋””์ž์ธํŒจํ„ด] ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด (Decorator Pattern)๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐ์ฒด์— ๋™์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๊ธฐ์กด์˜ ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด์— ์ถ”๊ฐ€์ ์ธ ์ฑ…์ž„์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ์ƒ์† ๋Œ€์‹  ์กฐํ•ฉ(composition)์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜๋ฉฐ, ์ด๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(Open-Closed Principle)์„ ์ค€์ˆ˜ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค.1. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ตฌ์„ฑ ์š”์†Œ:์ปดํฌ๋„ŒํŠธ(Component): ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๋“ค์ด ์ด๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.์ฝ˜ํฌ๋ฆฌํŠธ ์ปดํฌ๋„ŒํŠธ(Concrete Component): ์‹ค์ œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ.. 2024. 8. 23.
[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.