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

๋””์ž์ธํŒจํ„ด5

[๋””์ž์ธํŒจํ„ด] ์ปดํฌ์ง€ํŠธ(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.
์ถ”์ƒ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(Abstract Singleton) ์ถ”์ƒ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ์ถ”์ƒํ™” ๋˜์–ด ์žˆ๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์ƒ์†๋ฐ›์•„์„œ, ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ 5๊ฐœ๋ผ๋ฉด, 5๊ฐœ ๋ชจ๋‘ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์ ์šฉํ•˜๊ธฐ ๋ณด๋‹จ ์ƒ์†๊ณผ ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•ด์„œ ์ถ”์ƒํ™”๋œ ์‹ฑ๊ธ€ํ†ค์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ˆ๊นŒ ๋”ฐ๋ผํ•ด๋ณด์„ธ์š” :) 1. ์ƒ์† ๋ฐ›์„ ์ถ”์ƒํ™” ํด๋ž˜์Šค๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ตฌํ˜„. class SingletonTemplate { public: T* GetInstance() { if ( m_instance == nullptr ) { m_instance = new T(); } return m_instance; } private: SingletonTemplate(); static T* m_instance; } Lasy create๋กœ ๊ตฌํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. GetInstance๊ฐ€ ์ฒ˜์Œ ํ˜ธ.. 2023. 3. 20.
์‹ฑ๊ธ€ํ†ค ํŒจํ„ด โœ… ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ (Static) ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธํŒจํ„ด. ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ˜ธ์ถœ๋˜๋”๋ผ๋„ ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” ํ•˜๋‚˜๊ณ  ์ตœ์ดˆ ์ƒ์„ฑ ์ดํ›„์— ํ˜ธ์ถœ๋œ ์ƒ์„ฑ์ž๋Š” ์ตœ์ดˆ์— ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (์ž๋ฐ”์—์„  ์ƒ์„ฑ์ž๋ฅผ private๋กœ ์„ ์–ธํ•ด์„œ ์ƒ์„ฑ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ•˜๊ณ  getInstance()๋กœ ๋ฐ›์•„์“ฐ๊ธฐ๋„ ํ•จ) => ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. (์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š” ํ•  ๋•Œ ๋˜‘๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋™์ผ(๊ธฐ์กด) ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒํ•จ) โœ… ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์“ฐ๋Š” ์ด์œ  ๊ณ ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์–ป์œผ๋ฉด์„œ ํ•œ๋ฒˆ์˜ new๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ ๋˜ํ•œ ์‹ฑ๊ธ€ํ†ค.. 2023. 1. 3.