๐จ 01. ๋์์ธ ํจํด ์๊ฐ์ ์ ๋ต ํจํด
๐ฆย ์ค๋ฆฌ ์๋ฎฌ๋ ์ด์ ๊ฒ์
SimUDuck์ด๋ผ๋ ์ค๋ฆฌ ์๋ฎฌ๋ ์ด์ ๊ฒ์์ ํค์๋ ์น๊ณ , ๊ฝฅ๊ฝฅ ์๋ฆฌ๋ ๋ด๋ ๋ค์ํ ์ค๋ฆฌ๊ฐ ๋ฑ์ฅํ๋ค. ์ด ์์คํ ์ ์ฒ์ ๋์์ธํ ์ฌ๋์ ํ์ค ๊ฐ์ฒด์งํฅ ๊ธฐ๋ฒ์ ์ฌ์ฉํด Duck์ด๋ผ๋ ์ํผํด๋์ค๋ฅผ ๋ง๋ ๋ค์, ํด๋์ค๋ฅผ ํ์ฅํด ์๋ก ๋ค๋ฅธ ์ค๋ฆฌ๋ฅผ ๋ง๋ค์๋ค.
1
2
3
4
5
// Duck (์ํผํด๋์ค)
quack() // ๊ฝฅ๊ฝฅ ์๋ฆฌ๋ฅผ ๋
swim() // ํค์์ ์น ์ ์์
display() // ๋ชจ๋ ์ค๋ฆฌ์ ๋ชจ์์ด ๋ค๋ฅด๋ฏ๋ก ์ถ์ ๋ฉ์๋
๊ทธ๋ฐ๋ฐ ๊ฐ์๊ธฐ ์ค๋ฆฌ๋ฅผ ๋ ๊ฒ ํ๋ผ๋ ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋์๋ค.
1
2
3
4
5
6
// Duck (์ํผํด๋์ค)
quack() // ๊ฝฅ๊ฝฅ ์๋ฆฌ๋ฅผ ๋
swim() // ํค์์ ์น ์ ์์
display() // ๋ชจ๋ ์ค๋ฆฌ์ ๋ชจ์์ด ๋ค๋ฅด๋ฏ๋ก ์ถ์ ๋ฉ์๋
fly() // ์ถ๊ฐ!!!
Duck์ด๋ผ๋ ์ํผํด๋์ค์ fly() ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด์ ์ ํฉํ์ง ์์ ์ผ๋ถ ์๋ธํด๋์ค(๊ณ ๋ฌด ์ค๋ฆฌ ๋ฑ)์๋ fly()๊ฐ ์ถ๊ฐ๋ ๊ฒ์ด๋ค. ์ฝ๋์ ์ผ๋ถ๋ถ๋ง ๊ณ ์ณค๋๋ฐ, ํ๋ก๊ทธ๋จ ์ ์ฒด์ ๊ณ ๋ฌด ์ค๋ฆฌ๊ฐ ๋ ์๋ค๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
1
2
3
4
5
6
7
8
// RubberDuck
quack() // ๊ฝฅ๊ฝฅ ์๋ฆฌ๋ฅผ ๋
swim() // ํค์์ ์น ์ ์์
display() // ๋ชจ๋ ์ค๋ฆฌ์ ๋ชจ์์ด ๋ค๋ฅด๋ฏ๋ก ์ถ์ ๋ฉ์๋
fly() {
// ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ก ์ค๋ฒ๋ผ์ด๋
}
๊ทธ๋์ ๊ฒฐ๊ตญ ๊ณ ๋ฌด ์ค๋ฆฌ ํด๋์ค์์๋ ๋ ์ง ์๋๋ก fly ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํด ์ฃผ์๋ค. ๊ทธ๋ฐ๋ฐ ์์์ง์ด ์์ผ๋ก 6๊ฐ์๋ง๋ค ์ ํ์ ์ ๋ฐ์ดํธํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ์์ผ๋ก ๊ท๊ฒฉ์ด ๊ณ์ ๋ฐ๋๊ฒ ๋๋ค๋ฉด? Duck์ ์๋ธํด๋์ค์ธ fly()์ quack() ๋ฉ์๋๋ฅผ ์ผ์ผ์ด ์ํฉ์ ๋ฐ๋ผ ์ค๋ฒ๋ผ์ด๋ ํด์ผ ํ๋ค.
๐ฆย ์์์ ๋จ์
- ์๋ธํด๋์ค์์ ์ฝ๋๊ฐ ์ค๋ณต๋๋ค.
- ์คํ ์ ํน์ง์ ๋ฐ๊พธ๊ธฐ ํ๋ค๋ค.
- ๋ชจ๋ ์ค๋ฆฌ์ ํ๋์ ์๊ธฐ ํ๋ค๋ค.
- ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋ค๋ฅธ ์ค๋ฆฌ๋ค์๊ฒ ์์น ์์ ์ํฅ์ ๋ผ์น ์ ์๋ค.
๐ฆย ์ธํฐํ์ด์ค ์ค๊ณํ๊ธฐ
fly()๋ฅผ Duck ์ํผํด๋์ค์์ ๋นผ๊ณ fly() ๋ฉ์๋๊ฐ ๋ค์ด์๋ Flyable ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค. ๋ ์ ์๋ ์ค๋ฆฌ์๊ฒ๋ง ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ fly() ๋ฉ์๋๋ฅผ ๋ฃ์ ์ ์๋ค. ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก Quackable์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ์ค๋ฆฌ๋ฅผ ๊ตฌํํ ์๋ ์๋ค.
๊ทธ๋ฌ๋ Flyable, Quackable์ ๊ตฌํํด ์ผ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๋ ์๊ฒ ์ผ๋, ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์ฝ๋ ๊ด๋ฆฌ์ ์ปค๋ค๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
- ๋ ์ ์๋ ์ค๋ฆฌ ์ค์์๋ ๋ ์๋ค๋๋ ๋ฐฉ์์ด ์๋ก ๋ค๋ฅผ ์ ์์
- ์ํํธ์จ์ด๋ฅผ ๊ณ ์น ๋ ๊ธฐ์กด ์ฝ๋์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํ์ผ๋ก ์ค์ด๋ฉด์ ์์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด?
๐ฆย ๋ฌธ์ ๋ฅผ ๋ช ํํ๊ฒ ํ์ ํ๊ธฐ
์์์ ๊ฒฝ์ฐ ์๋ธํด๋์ค๋ง๋ค ์ค๋ฆฌ์ ํ๋์ด ๋ฐ๋ ์ ์๋๋ฐ๋ ๋ชจ๋ ์๋ธํด๋์ค์์ ํ ๊ฐ์ง ํ๋๋ง ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ฌ๋ฐ๋ฅด์ง ๋ชปํ๋ค.
์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ ์๋ฐ ์ธํฐํ์ด์ค์๋ ๊ตฌํ๋ ์ฝ๋๊ฐ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค. ์ฆ, ํ ๊ฐ์ง ํ๋์ ๋ฐ๊ฟ ๋๋ง๋ค ๊ทธ ํ๋์ด ์ ์๋์ด ์๋ ์๋ก ๋ค๋ฅธ ์๋ธํด๋์ค๋ฅผ ์ ๋ถ ์ฐพ์์ ์ฝ๋๋ฅผ ์ผ์ผ์ด ๊ณ ์ณ์ผ ํ๊ณ , ๊ทธ ๊ณผ์ ์์ ์๋ก์ด ๋ฒ๊ทธ๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ๋ ์๋ค.
๋์์ธ ์์น
์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ ์ฐพ์๋ด๊ณ , ๋ฌ๋ผ์ง์ง ์๋ ๋ถ๋ถ๊ณผ ๋ถ๋ฆฌํ๋ค.
๋ฐ๋๋ ๋ถ๋ถ์ ๋ฐ๋ก ๋ฝ์์ ์บก์ํํ๋ค. ๊ทธ๋ฌ๋ฉด ๋์ค์ ๋ฐ๋์ง ์๋ ๋ถ๋ถ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๊ทธ ๋ถ๋ถ๋ง ๊ณ ์น๊ฑฐ๋ ํ์ฅํ ์ ์๋ค.
๐ฆย ๋ฐ๋๋ ๋ถ๋ถ๊ณผ ๊ทธ๋ ์ง ์์ ๋ถ๋ถ ๋ถ๋ฆฌํ๊ธฐ
Duck ํด๋์ค๋ ์ ์๋ํ๊ณ ์์ผ๋ฉฐ, ์์ฃผ ๋ฌ๋ผ์ง๊ฑฐ๋ ๋ฐ๋์ง ์์ผ๋ฏ๋ก ๊ทธ๋๋ก ๋๋ค.
๋ณํํ๋ ๋ถ๋ถ๊ณผ ๊ทธ๋๋ก ์๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๋ ค๋ฉด 2๊ฐ์ ํด๋์ค ์งํฉ(set)์ ๋ง๋ค์ด์ผ ํ๋ค. ํ๋๋ ๋๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ด๋ค. ๊ฐ ํด๋์ค ์งํฉ์๋ ๊ฐ๊ฐ์ ํ๋์ ๊ตฌํํ ๊ฒ์ ์ ๋ถ ์ง์ด๋ฃ๋๋ค.
fly()์ quack()์ Duck ํด๋์ค์ ์๋ ์ค๋ฆฌ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ด๋ค.
fly()์ quack()์ Duck ํด๋์ค๋ก๋ถํฐ ๋ถ๋ฆฌํ๋ ค๋ฉด 2๊ฐ์ ๋ฉ์๋๋ฅผ ๋ชจ๋ Duck ํด๋์ค์์ ๋์ง์ด๋ด์ ๊ฐ ํ๋์ ๋ํ๋ผ ํด๋์ค ์งํฉ์ ์๋ก ๋ง๋ค์ด์ผ ํ๋ค.
๐ฆย ์ค๋ฆฌ์ ํ๋์ ๋์์ธํ๋ ๋ฐฉ๋ฒ
- ์ต๋ํ ์ ์ฐํ๊ฒ ๋ง๋ ๋ค.
- Duck์ ์ธ์คํด์ค์ ํ๋์ ํ ๋นํ ์ ์์ด์ผ ํ๋ค.
- MallardDuck ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค๊ณ ํน์ ํ์์ ๋๋ ํ๋์ผ๋ก ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ
- ์ค๋ฆฌ์ ํ๋์ ๋์ ์ผ๋ก ๋ฐ๊พผ๋ค. ์ฆ, Duck ํด๋์ค์ ํ๋๊ณผ ๊ด๋ จ๋ ์ธํฐ ๋ฉ์๋๋ฅผ ํฌํจํด์ ํ๋ก๊ทธ๋จ ์คํ ์ค์๋ MallardDuck์ ๋๋ ํ๋์ ๋ฐ๊ฟ ์ ์๋ค.
๋์์ธ ์์น
๊ตฌํ๋ณด๋ค๋ ์ธํฐํ์ด์ค์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค.
๊ฐ ํ๋์ FlyBehavior, QuackBehavior๋ก ํํํ๋ค. ํน์ ํ๋์ Duck ํด๋์ค์์ ๊ตฌํํ์ง ์๊ณ , ํ๋์ ๋ชฉ์ ์ผ๋ก ํ๋ ํด๋์ค์ ์งํฉ์ ๋ง๋ ๋ค. ์๋ก์ด ๋์์ธ์ ์ฌ์ฉํ๋ฉด Duck ์๋ธํด๋์ค๋ ์ธํฐํ์ด์ค(FlyBehavior, QuackBehavior)๋ก ํํ๋๋ ํ๋์ ์ฌ์ฉํ๋ค.
โ์ธํฐํ์ด์ค์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค.โ ๋ผ๋ ๋ง์ ์ฌ์ค โ์์ ํ์์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค.โ ๋ผ๋ ๋ง์ ๋๋ค.
์ธํฐํ์ด์ค๋ ์ค์์ ์๋ฏธ๋ก ์ฐ์๋ค.
- ์๋ฐ์ ๊ตฌ์กฐ
- ์ธํฐํ์ด์ค ๊ฐ๋ ์ง์นญ
์ธํฐํ์ด์ค์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค. โ ์ค์ ์คํ ์์ ์ฐ์ด๋ ๊ฐ์ฒด๊ฐ ์ฝ๋์ ๊ณ ์ ๋์ง ์๋๋ก ์์ ํ์์ ๋ง์ถฐ ํ๋ก๊ทธ๋๋ฐํด์ ๋คํ์ฑ์ ํ์ฉํ๋ผ.
์์ ํ์์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค. โ ๋ณ์๋ฅผ ์ ์ธํ ๋ ๋ณดํต ์ถ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ฐ์ ์์ ํ์์ผ๋ก ์ ์ธํ๋ผ. โ ๊ฐ์ฒด๋ฅผ ๋ณ์์ ๋์ ํ ๋ ์์ ํ์์ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํํ ํ์์ด๋ผ๋ฉด ์ด๋ค ๊ฐ์ฒด๋ ๋ฃ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
1
2
Dog d = new Dog();
d.bark();
๋ณ์ d๋ฅผ Dog ํ์์ผ๋ก ์ ์ธํ๋ฉด ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ง์ถฐ์ ์ฝ๋ฉํด์ผ ํ๋ค. ํ์ง๋ง ์ธํฐํ์ด์ค์ ์์ ํ์์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค.
1
2
Animal animal = new Dog();
animal.makeSound();
Dog๋ผ๋ ๊ฑธ ์๊ณ ์๊ธด ํ์ง๋ง ๋คํ์ฑ์ ํ์ฉํด์ Animal์ ๋ ํผ๋ฐ์ค๋ฅผ ์จ๋ ๋๋ค. ๋ ๋ฐ๋์งํ ๋ฐฉ๋ฒ์ ์์ ํ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์ง์ ์ฝ๋๋ก ๋ง๋๋ ๋์ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํ๋ ๊ฐ์ฒด๋ฅผ ์คํ ์์ ๋์ ํ๋ ๊ฒ์ด๋ค.
1
2
a = getAnimal();
a.makeSound();
์ฐ๋ฆฐ animal์ด ์ด๋ค ํ์ ํด๋์ค์ธ์ง ๋ชฐ๋ผ๋ makeSound()๋ฅผ ๋์ํ๋ ๋ฐ์ ์๋ฌด ๋ฌธ์ ๊ฐ ์๋ค.
๐ฆย ์ค๋ฆฌ์ ํ๋์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
์ด๋ฐ ์์ผ๋ก ๋์์ธํ๋ฉด ๋ค๋ฅธ ํ์์ ๊ฐ์ฒด์์๋ ๋๋ ํ๋๊ณผ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ํ๋์ ์ฌ์ฌ์ฉํ ์ ์๋ค. ๋ก์ผ ์ถ์น๋ ฅ์ผ๋ก ๋ ์๊ฐ๋ ํ๋์ ์ถ๊ฐํ๋ ค๋ฉด FlyBehavior๋ฅผ ์์๋ฐ๋ FlyRocketPowered ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด ๋๊ณ , ์ค๋ฆฌ ์๋ฆฌ๋ฅผ ๋ด๋ ์ฅ์น ํด๋์ค๋ฅผ ์๋ก ๋ง๋ ๋ค๋ฉด Quack์ ํ์ฉํ ์๋ ์๋ค.
๐ฆย ์ค๋ฆฌ ํ๋ ํตํฉํ๊ธฐ
๊ฐ์ฅ ์ค์ํ ์ ์ ๋๋ ํ๋๊ณผ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ํ๋์ Duck ํด๋์ค์์ ์ ์ํ ๋ฉ์๋๋ฅผ ์จ์ ๊ตฌํํ์ง ์๊ณ ๋ค๋ฅธ ํด๋์ค์ ์์ํ๋ค๋ ๊ฒ์ด๋ค.
- ์ฐ์ Duck ํด๋์ค์ flyBehavior์ quackBehavior๋ผ๋ ์ธํฐํ์ด์ค ํ์์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ถ๊ฐํ๋ค. ๊ฐ ์ค๋ฆฌ ๊ฐ์ฒด์์๋ ์คํ ์์ ์ด ๋ณ์์ ํน์ ํ๋ ํ์์ ๋ ํผ๋ฐ์ค๋ฅผ ๋คํ์ ์ผ๋ก ์ค์ ํ๋ค. ๋๋ ํ๋๊ณผ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ํ๋์ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ์ผ๋ฏ๋ก Duck ํด๋์ค์ ๋ชจ๋ ์๋ธํด๋์ค์์ fly()์ quack() ๋ฉ์๋๋ ์ ๊ฑฐํ๋ค. Duck ํด๋์ค์ fly()์ quack() ๋์ performFly()์ performQuack()๋ผ๋ ๋ฉ์๋๋ฅผ ๋ฃ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// 1. ๋ ๊ธฐ ํ๋์ ์ํ ์ธํฐํ์ด์ค
interface FlyBehavior {
void fly();
}
// 2. ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ํ๋์ ์ํ ์ธํฐํ์ด์ค
interface QuackBehavior {
void quack();
}
// 3. ์ค์ ๋ ๊ธฐ ํ๋๋ค (์ ๋ต)
class FlyWithWings implements FlyBehavior {
public void fly() {
System.out.println("ํผ๋ํผ๋");
}
}
class FlyNoWay implements FlyBehavior {
public void fly() {
System.out.println("์์ฅ ์์ ๊ฐํ ์");
}
}
// 4. ์ค์ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ํ๋๋ค (์ ๋ต)
class Quack implements QuackBehavior {
public void quack() {
System.out.println("๊ฝฅ๊ฝฅ");
}
}
class MuteQuack implements QuackBehavior {
public void quack() {
System.out.println("...");
}
}
// 5. Duck ํด๋์ค (ํ๋์ ์บก์ํํ์ฌ ์ฐธ์กฐ)
abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public void performFly() {
flyBehavior.fly();
}
public void performQuack() {
quackBehavior.quack();
}
public abstract void display();
}
- MallardDuck ํด๋์ค ํตํด flyBehavior์ quackBehavior ์ธ์คํด์ค ๋ณ์ ์ค์ ๋ฐฉ๋ฒ์ ์๊ฐํด ๋ณด์.
- MallardDuck์ ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง ๋ ์์ฑ์๋ Duck์ผ๋ก ๋ถํฐ ์์๋ฐ์ quackBehavior ์ธ์คํด์ค ๋ณ์์ Quack ํ์์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋์ ํ๋ค.
- MallardDuck์ ์์ฑ์๋ flyBehavior ์ธ์คํด์ค ๋ณ์์ FlyWithWings ํ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ ๋์ ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
// 6. ํน์ ์ค๋ฆฌ ํด๋์ค (ํ๋์ ๋์ ์ผ๋ก ์ค์ ๊ฐ๋ฅ)
class MallardDuck extends Duck {
public MallardDuck() {
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}
public void display() {
System.out.println("๋๋ ๋ฌผ์ค๋ฆฌ");
}
}
๐ฆย ๋ ํด๋์ค๋ฅผ ํฉ์น๋ ๋ฐฉ๋ฒ
๋์์ธ ์์น
์์๋ณด๋ค๋ ๊ตฌ์ฑ์ ํ์ฉํ๋ค.
โA์๋ B๊ฐ ์๋ค.โ
๊ฐ ์ค๋ฆฌ์๋ flyBehavior์ quackBehavior๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๋๋ ํ๋๊ณผ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ํ๋์ ์์๋ฐ๋๋ค. ์ด๋ฐ ์์ผ๋ก ๋ ํด๋์ค๋ฅผ ํฉ์น๋ ๊ฒ์ โ๊ตฌ์ฑ(composition)์ ์ด์ฉํ๋ค.โ ๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ตฌ์ฑ์ ํ์ฉํด์ ์์คํ ์ ๋ง๋ค๋ฉด ์ ์ฐ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค.
๐ฆย ์ ๋ต ํจํด
์ง๊ธ๊น์ง ์ ์ฉํ ๊ฒ๋ค์ด ๋ฐ๋ก ์ ๋ต ํจํด(Strategy Pattern)์ด๋ค. ์ ๋ต ํจํด์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ ์บก์ํํด์ ๊ฐ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์์ ํด์ ์ธ ์ ์๊ฒ ํด ์ค๋ค. ์ ๋ต ํจํด์ ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฆฌํด์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ฐ์ฑ์ด ๋ฐ์ด๋๋ค.

