๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
CS/๋””์ž์ธ ํŒจํ„ด

[GoF ๋””์ž์ธ ํŒจํ„ด] - ํ”„๋กœํ† ํƒ€์ž… ํŒจํ„ด

by ์œ ์ง„์˜ 2024. 5. 31.
๋ชจ๋“  ์ฝ”๋“œ๋Š” 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 ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

 

https://yagom.net/courses/design-pattern-in-swift/lessons/์ƒ์„ฑ-ํŒจํ„ด/topic/prototype

 

์ฝ”๋“œ ์˜ˆ์‹œ

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๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜์ง€ ์•Š์•˜์„๊นŒ๋ผ๋Š” ์‚ฌ๊ฒฌ์„ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋ถ™ํ˜€๋ณธ๋‹ค ๐Ÿ‘€

๋Œ“๊ธ€