์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(Singleton Pattern)
ยท
๐Ÿ“ Computer Science/โœ Design Pattern
์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(Singleton Pattern) ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋ฉฐ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ด๋””์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ด๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๋ฉด ์ž์›์„ ๋‚ญ๋น„ํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•œ๋‹ค. ๊ตฌํ˜„ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ์ž์— private ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ์ง€์ •ํ•˜๊ณ  ์œ ์ผํ•œ ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. #include using namespace std; // ๋‹ค์ด๋‚˜๋ฏน ์‹ฑ๊ธ€ํ†ค(Dynamic Singleton) // ๊ฒŒ์œผ๋ฅธ ์ดˆ๊ธฐํ™”: ์‹ฑ๊ธ€ํ†ค์„ ์‹ค์ œ๋กœ ํ•„์š”๋กœ ํ• ๋•Œ๊นŒ์ง€ ์ดˆ๊ธฐํ™”๋ฅผ ๋ฏธ๋ฃฌ๋‹ค. class DynamicSingleton { private: DynamicSingleton() {} static Dynam..
๋””์ž์ธ ํŒจํ„ด(Design Pattern)
ยท
๐Ÿ“ Computer Science/โœ Design Pattern
๋””์ž์ธ ํŒจํ„ด(Design Pattern) ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ํŠน์ • ๋งฅ๋ฝ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ๋“ค์ด ๋˜ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์žฌ์‚ฌ์šฉํ•  ํ•  ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค. ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ์ด๋‚˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋‹ค์–‘ํ•œ ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ๋“ค์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋„ ์„œ๋กœ ๊ฐ„์— ๊ณตํ†ต๋˜๋Š” ์„ค๊ณ„ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ด๊ฒฐ์ฑ… ์‚ฌ์ด์—๋„ ๊ณตํ†ต์ ์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์‚ฌ์ ์„ ํŒจํ„ด์ด๋ผ ํ•œ๋‹ค. ํŒจํ„ด์€ ๊ณตํ†ต์˜ ์–ธ์–ด๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉฐ ํŒ€์› ์‚ฌ์ด์˜ ์˜์‚ฌ์†Œํ†ต์„ ์›ํ™œํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. GoF ๋””์ž์ธ ํŒจํ„ด 23๊ฐ€์ง€์˜ ๋””์ž์ธ ํŒจํ„ด์„ ์ •๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ์˜ ๋””์ž์ธ ํŒจํ„ด์„ ์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„ 3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ–ˆ๋‹ค. ์ƒ์„ฑ ํŒจํ„ด: ๊ฐ์ฒด ์ƒ์„ฑ์— ๊ด€๋ จ๋œ ํŒจํ„ด์œผ๋กœ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์กฐํ•ฉ์„ ์บก์Аํ™”ํ•ด ํŠน์ • ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ์— ..
[C++] ์–•์€ ๋ณต์‚ฌ(Shallow Copy)์™€ ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)
ยท
๐Ÿ“ Language/โœ C & C++
๊ธฐ์กด ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ๊ฐ’ ํ˜•์‹์ด๋ƒ ์ฐธ์กฐ ํ˜•์‹์ด๋ƒ์— ๋”ฐ๋ผ ๋ณต์‚ฌ๊ฐ€ ๋‚˜๋ˆ„์–ด์ง„๋‹ค. ์–•์€ ๋ณต์‚ฌ(Shallow Copy) ํ•œ ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณต์‚ฌํ•˜๋Š”๋ฐ ๊ฐ์ฒด๊ฐ€ ํฌ์ธํ„ฐ ํƒ€์ž…์˜ ๋ฉค๋ฒ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ์ฃผ์†Œ ๊ฐ’๋งŒ ๋ณต์‚ฌ๋œ๋‹ค. ์ด๋•Œ, ์›๋ณธ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ํฌ์ธํ„ฐ๋Š” ์ด๋ฏธ ์‚ญ์ œํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ•๊ธ€๋ง ํฌ์ธํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ์กฐ ํƒ€์ž… ๊ฐ์ฒด๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์–•์€ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy) ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋„ ๋ณต์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜์—ฌ ๋ณต์‚ฌํ•œ ๊ฐ์ฒด์™€ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€๋œ๋‹ค. ๊ฐ’ ํ˜•์‹ ๊ฐ์ฒด๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•œ๋‹ค. struct Test { char* ptr; }; vo..
[C++] ์˜ค๋ฒ„๋กœ๋”ฉ(Overloding)๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)
ยท
๐Ÿ“ Language/โœ C & C++
์˜ค๋ฒ„๋กœ๋”ฉ(Overloding) ์˜ค๋ฒ„๋กœ๋”ฉ์ด๋ž€ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์€ ๊ฐ™๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•จ์œผ๋กœ์จ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค. int add(int a, int b) { return a + b; } // ์›ํ•จ์ˆ˜ float add(int a, int b) { return a + b; } // ์˜ค๋ฒ„๋กœ๋”ฉ ๋ถˆ๊ฐ€๋Šฅ float add(int a, float b) { return a + b; } // ์˜ค๋ฒ„๋กœ๋”ฉ ๊ฐ€๋Šฅ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋ž€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ž์‹ ๊ฐ์ฒด์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ์‹œ ๋จผ์ € ํ˜ธ์ถœ๋œ๋‹ค. ๋™์ผํ•œ ๋ฆฌํ„ด ๊ฐ’, ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. #include using namespace std; class Drink { publ..
[C++] Call by value์™€ Call by reference
ยท
๐Ÿ“ Language/โœ C & C++
Call by value ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋กœ ๋ณ€์ˆ˜์˜ ๋ณต์‚ฌ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค. ์ด๋•Œ ๋ณต์‚ฌ๋œ ์ธ์ž๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ง€์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— local value์˜ ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ธ์ž ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์•„๊ทœ๋จผํŠธ(argument)๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ๋Š” ๋ณ„๋„์˜ ์ž„์‹œ ๊ณต๊ฐ„์— ์ƒ์„ฑ๋˜๋ฏ€๋กœ ํ•จ์ˆ˜ ์ข…๋ฃŒ ์‹œ ์‚ฌ๋ผ์ง„๋‹ค. Call by reference ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋กœ ๋ณ€์ˆ˜์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ธ์ž ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์•„๊ทœ๋จผํŠธ๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋œ๋‹ค. ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๊ณ  ์ดˆ๊ธฐํ™”๋œ ํ›„์—๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. #include using namespace std; void func_by_value(int a, i..
[C++] STL ์ปจํ…Œ์ด๋„ˆ(Containers)
ยท
๐Ÿ“ Language/โœ C & C++
1. ์ˆœ์„œ(์‹œํ€€์Šค) ์ปจํ…Œ์ด๋„ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํ˜•์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ์— ๋น„ํ•ด ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๋‹ค. 1) Vector ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. ์ผ๋ฐ˜ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ณ  ํ™•์žฅ/์ถ•์†Œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋™์  ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. iterator ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ index๋กœ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๊ฐœ๋ณ„ ์›์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. 2) Deque vector์™€ ๋น„์Šทํ•œ ์ปจํ…Œ์ด๋„ˆ์ด์ง€๋งŒ, ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ๋‚˜๋‰˜์–ด ์ €์žฅ๋œ๋‹ค. Random access iterator๋ฅผ ํ†ตํ•œ index๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 3) List ๋น„์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค. index๋กœ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ ‘๊ทผ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ ํ˜• ํƒ์ƒ‰์ด ํ•„์š”ํ•˜๋‹ค. ๋ณดํ†ต ์‚ฝ์ž…, ์‚ญ์ œํ•˜๋Š” ์—ฐ์‚ฐ์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค...