๋ชจ๋ ์ฝ๋๋ Swift๋ก ์์ฑ๋์์ต๋๋ค.
๋ฌธ์ ์ํฉ
๋คํธ์ํฌ ์์ ๊ฐ์ด ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ ํตํด ์์ฑ๋๋ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๊ณ ์ถ์ ๋๊ฐ ์๋ค. ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๊ฒ ๋ค๊ณ ๋์ผํ ๋คํธ์ํฌ ์์ ์ ๋ฐ๋ณตํด์ ํ๋ ๊ฒ์ ๋น์ฐํ ๋นํจ์จ์ ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋น์ฐํ ์ฐ๋ฆฌ๋ ์๋ ์ฝ๋์ ๊ฐ์ด ์ฒ์ ๋ง๋ค์ด์ง ์ธ์คํด์ค๋ฅผ ๋ณต์ฌ ํ ๊ฒ์ด๋ค.
class Response {
// JSON ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ฉค๋ฒ ๋ณ์๋ค...
}
let data = Network().requestAPI("https://127.0.0.1:8080/map/search")
let response = Response(data)
let copy1 = response
let copy2 = response
let copy3 = response
ํด๋์ค์ ์ธ์คํด์ค๋ ๋ณต์ฌํ ๊ฒฝ์ฐ ์์ ๋ณต์ฌ๊ฐ ๋๋ฏ๋ก copy1์ ๋ณ๊ฒฝ ์ฌํญ์ด ํด๋น ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๋ชจ๋ ๊ณณ์ ์ ์ฉ๋๋ค. ๋ง์ฝ, copy1์ ๋ณ๊ฒฝ์ด copy1์์๋ง ์ ์ฉ๋๊ฒ ํ๊ณ ์ถ์ผ๋ฉด, ์ฆ ๊น์ ๋ณต์ฌ๋ฅผ ํ๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ํ ๊น?
ํ๋กํ ํ์ ํจํด
ํ๋กํ ํ์ ํจํด์ ์๊ธฐ ์์ ์ ๊น์ ๋ณต์ฌ ํ ์ ์๊ฒ ํด์ฃผ๋ ๋์์ธ ํจํด์ด๋ค.
UML ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
์ฝ๋ ์์
protocol Prototype: AnyObject { // ๊ตณ์ด ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ง ์์๋ ๋๋ค..!
func clone() -> Self
}
class Response: Prototype {
var data: [Int]
init(data: [Int]) {
self.data = data
}
func clone() -> Self {
return Response(data: self.data) as! Self
}
}
let original = Response(data: [1, 2, 3, 4, 5])
let copy1 = original.clone()
let copy2 = original.clone()
let copy3 = original.clone()
๐ Swift์์์ ํ๋กํ ํ์ ํจํด
Swift์์๋ ๊น์ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ ๊ฐ ํ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ Struct ๊ฐ๋ ์ด ์กด์ฌํ๋ฏ๋ก Swift์์๋ ํ๋กํ ํ์ ํจํด์ ํ์์ฑ์ด ํฌ๊ฒ ๋จ์ด์ง๋ค. ์ธ์คํด์ค์ ๊น์ ๋ณต์ฌ๋ฅผ ์ํด์ ํ๋์ ํจํด๊น์ง ๋ง๋ค์ด์ก๋ค๋ ์ ์ ๋ฏธ๋ฃจ์ด ๋ณด์ ์ด์ฉ๋ฉด Swift์ Struct๋ผ๋ ๊ฐ๋ ์ ๋์ ํ ์ด์ ์ค ํ๋๊ฐ ๋์ง ์์์๊น๋ผ๋ ์ฌ๊ฒฌ์ ์กฐ์ฌ์ค๋ฝ๊ฒ ๋ถํ๋ณธ๋ค ๐
'CS > ๋์์ธ ํจํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[GoF ๋์์ธ ํจํด] - ์ฑ๊ธํค ํจํด (0) | 2024.12.02 |
---|---|
[GoF ๋์์ธ ํจํด] - ๋น๋ ํจํด (0) | 2024.11.28 |
[GoF ๋์์ธ ํจํด] - ์ถ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด (2) | 2024.11.26 |
[GoF ๋์์ธ ํจํด] - ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด (1) | 2024.11.25 |
[GoF ๋์์ธ ํจํด] - ๋์์ธ ํจํด์ด๋? (1) | 2024.11.22 |
๋๊ธ