๋ชจ๋ ์ฝ๋๋ Swift๋ก ์์ฑ๋์์ต๋๋ค.
๋์์ธ ํจํด์ด๋?
๋์์ธ ํจํด์ด๋ ์ํํธ์จ์ด ์ค๊ณ์ ์์ด์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ผ์ข ์ ํ ํ๋ฆฟ ํน์ ๊ฐ์ด๋๋ผ์ธ์ด๋ค. ํํ ์ํคํ ์ฒ ํจํด๊ณผ ๋ง์ด ํผ๋ํด์ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๊ณค ํ๋ค.
์ํคํ ์ฒ ํจํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ์ ์ด์ ์ ๋ง์ถ ํจํด์ด๋ผ๋ฉด ๋์์ธ ํจํด์ ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ์ ์ด์ ์ ๋ง์ถ ํจํด์ด๋ผ๋ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
GoF ๋์์ธ ํจํด
ํํ ์ํํธ์จ์ด ๊ณตํ์์ '๋์์ธ ํจํด'์ ๋๋ถ๋ถ GoF(Gang of Four) ๋์์ธ ํจํด์ ์๋ฏธํ๋ค. ์ด๋ค์ ๊ฐ๊ฐ์ ๋ชฉ์ ์ ๋ฐ๋ผ ์์ฑ ํจํด, ๊ตฌ์กฐ ํจํด, ํ์ ํจํด์ผ๋ก ๋ถ๋ฅํ๊ณ ์ด 23๊ฐ์ ํจํด์ผ๋ก ๊ตฌ์ฒดํํ์๋ค.
์ด๋ ๊ฒ๋ ๋ง์ ๋์์ธ ํจํด์ ๊ณต๋ถํ๊ณ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น?
์ฒซ์งธ, ์์ฐ์ค๋ฝ๊ฒ ๊ฐ์ฒด ์ค๊ณ์ ํ์ํ 5๊ฐ์ง ์์น์ธ SOLID ์์น์ ์ค์ํ๊ฒ ๋์ด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ ์ดํด์ ์์ ์ด ์ฌ์ด ์ฝ๋๋ก ์์ฑ๋ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ค๋ค.
๋์งธ, ์ฝ๋์ ๊ตฌ์กฐ์ ์ด๋ฆ์ ๋ถํ์ ์ํตํ ์ ์๊ธฐ์ ๋ฌธ์ ํด๊ฒฐ์ ๋ํ ์ปค๋ฎค๋์ผ์ด์ ์ ๋๊ตฌ๊ฐ ๋ ์ ์๋ค.
ํ์ง๋ง, ์ด๋ฌํ ๋์์ธ ํจํด์ ์ด๋๊น์ง๋ ์ฝ๋์ ํ์ฅ์ฑ, ๋ณ๊ฒฝ ์ฉ์ด์ฑ์ ๋ํ๊ธฐ ์ํ ์๋จ์ผ๋ก ์ฌ์ฉํด์ผ์ง, ์ด๋ฌํ ๋์์ธ ํจํด์ด ๋ชฉ์ ์ด ๋๋ฉด ์๋๋ค. ์ฆ, ๋์์ธ ํจํด์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฌด๋ฆฌํ๊ฒ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พผ๋ค๊ฑฐ๋ ๊ตณ์ด ์์ฑํ์ง ์์๋ ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด, ๋์์ธ ํจํด์ผ๋ก๋ถํฐ ์ป์ ์ ์๋ ์ฅ์ ์ด ์ฌ๋ผ์ง๊ฒ ๋ ์ ์๋ค.
UML ํด๋์ค ๊ด๊ณ ํํ
๋์์ธ ํจํด์ ์์์ ๋งํ๋ค์ํผ ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ์ ์ด์ ์ ๋ง์ถ ํจํด์ด๊ธฐ์ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ UML ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๋ํ ๋ฐฐ๊ฒฝ ์ง์์ด ํ์ํ๋ค.
์ฐ๊ด ๊ด๊ณ
์ฐ๊ด ๊ด๊ณ๋ ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ค. ํ์ดํ๊ฐ ์กด์ฌํ๋ฉด ํ์ชฝ๋ง ์ธ์งํ๊ณ ์๋ ๊ด๊ณ, ํ์ดํ๊ฐ ์๋ค๋ฉด ์๋ก๊ฐ ์๋ก๋ฅผ ์ธ์งํ๊ณ ์๋ ๊ด๊ณ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
UML ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
์ฝ๋ ์์
class House {}
class Person {
private var house: House
}
์์กด ๊ด๊ณ
์์กด ๊ด๊ณ๋ ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ฃผ ์งง์ ์๊ฐ ๋์๋ง ์ฐ๊ด์ ์ ์งํ๋ ๊ด๊ณ๋ค. ์ฐ๊ด ๊ด๊ณ์ฒ๋ผ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ๋กํผํฐ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ์๋๋ผ ๋ฉ์๋์ ๋ฐํ๊ฐ์ด๋ ๋งค๊ฐ ๋ณ์๋ก ๊ฐ์ง๊ณ ์์ด '์์ฃผ ์งง์ ์๊ฐ ๋์' ์ด๋ผ๋ ์๋ฏธ๋ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ๋นํด ์์ฃผ ์งง์ ๋ฉ์๋์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๋ฏธํ๋ค.
UML ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
์ฝ๋ ์์
class House {}
class Person {
func createHouse() -> House {
return House()
}
func useHouse(house: House) {
let myHouse = house
}
}
์์ ๊ด๊ณ์ ์ค์ฒดํ ๊ด๊ณ
์์ ๊ด๊ณ์ ์ค์ฒดํ ๊ด๊ณ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๋งํ๋ ์์๊ณผ ์ธํฐํ์ด์ค ์ฑํ์ ์๋ฏธํ๋ค.
์งํฉ ๊ด๊ณ
์งํฉ ๊ด๊ณ๋ ํ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ์ฐ๊ดํ๊ณ ์๋ ๊ด๊ณ์ด๋ค.
UML ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
์ฝ๋ ์์
class Computer {
private var monitor: Monitor
private var keyboard: Keyboard
private var mouse: Mouse
init(monitor: Monitor, keyboard: Keyboard, mouse: Mouse) {
self.monitor = monitor
self.keyboard = keyBoard
self.mouse = mouse
}
}
ํฌํจ ๊ด๊ณ
ํฌํจ ๊ด๊ณ๋ ์งํฉ ๊ด๊ณ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ์ฐ๊ดํ๊ณ ์๋ ๊ด๊ณ์ด๋ค. ์งํฉ ๊ด๊ณ์์ ์ฐจ์ด์ ์ ์งํฉ ๊ด๊ณ๋ ๋ชธ์ด ์ฃฝ์ผ๋ฉด ์ก์ธ์ธ๋ฆฌ๋ ๋จ์์๋ ๊ด๊ณ๋ก ๋น์ ๋๊ณ ํฌํจ ๊ด๊ณ๋ ๋ชธ์ด ์ฃฝ์ผ๋ฉด ์ฅ๊ธฐ๋ ๊ฐ์ด ์ฃฝ๋ ๊ด๊ณ๋ก ๋น์ ๋๋ค. ์ฆ, ์งํฉ ๊ด๊ณ๋ ์ด๊ธฐํ ๋ฉ์๋์ ๋งค๊ฐ ๋ณ์๋ก ์ธ๋ถ์์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์์ค๋ ๊ด๊ณ์ด๊ณ , ํฌํจ ๊ด๊ณ๋ ๊ฐ์ฒด๋ค์ ๋ด๋ถ์์ ์์ฑํ๋ ๊ด๊ณ์ด๋ค.
UML ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
์ฝ๋ ์์
class Computer {
private var monitor: Monitor
private var keyboard: Keyboard
private var mouse: Mouse
init(monitor: Monitor, keyboard: Keyboard, mouse: Mouse) {
self.monitor = Monitor()
self.keyboard = KeyBoard()
self.mouse = Mouse()
}
}
'CS > ๋์์ธ ํจํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[GoF ๋์์ธ ํจํด] - ์ฑ๊ธํค ํจํด (0) | 2024.06.04 |
---|---|
[GoF ๋์์ธ ํจํด] - ํ๋กํ ํ์ ํจํด (0) | 2024.05.31 |
[GoF ๋์์ธ ํจํด] - ๋น๋ ํจํด (0) | 2024.05.30 |
[GoF ๋์์ธ ํจํด] - ์ถ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด (2) | 2024.05.28 |
[GoF ๋์์ธ ํจํด] - ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด (0) | 2024.05.28 |
๋๊ธ