๋์์ธํจํด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. ์ด์ 1 ๋ค์