[Swift๐Ÿฆฉ] #9 ๊ตฌ์กฐ์ฒด vs ํด๋ž˜์Šค

5666 ๋‹จ์–ด iOSswiftiOS

1. ๊ธฐ๋Šฅ

๊ฐ€๋Šฅ๊ตฌ์กฐ์ฒดํด๋ž˜์Šค
propertyOO
methodOO
subscriptOO
initOO
extensionOO
protocol ์ค€์ˆ˜OO
inheritanceXO
type castingXO
deinitXO
์ฐธ์กฐ ์นด์šดํŒ…XO

2. ์ •์˜

struct Model {
    var status: Int
    var message: String
}
class ViewModel {
    var model: Model
    var observable: Observable<Int>
}

3. instance

let model = Model()
let viewModel = viewModel()

4. ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

.์œผ๋กœ ์ ‘๊ทผ

model.status
viewModel.observable
viewModel.model.message

5. ์ดˆ๊ธฐํ™”

๊ตฌ์กฐ์ฒด๋Š” ๋ฉค๋ฒ„๋ณ„ ์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ์ด ์ž๋™ ์ƒ์„ฑ ๋˜์ง€๋งŒ,
ํด๋ž˜์Šค๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Œ. ํ•„์š”ํ•˜๋ฉด ์ง์ ‘ ์ •์˜ํ•ด์•ผํ•จ.

let model = Model(status: 404, message: "success")

6. Value vs Reference โญ๏ธโญ๏ธ

๊ตฌ์กฐ์ฒด์™€ ์—ด๊ฑฐํ˜•์€ ๊ฐ’ ํƒ€์ž…์ด๋ผ ์‚ฌ์šฉํ•  ๋•Œ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. (๊ธฐ์กด ๊ฐ’ ์œ ์ง€)
ํ•˜์ง€๋งŒ, ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ผ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. (๊ธฐ์กด ๊ฐ’๋„ ๋ฐ”๋€œ)
C์–ธ์–ด์˜ ํฌ์ธํ„ฐ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋˜์ง€๋งŒ, int * ์ฒ˜๋Ÿผ ๋”ฐ๋กœ ํƒ€์ž…์ด ๋‚˜๋‰˜์ง€ ์•Š์Œ. ๊ทธ๋ƒฅ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

+) Swift ์˜ value type ์€ copy-on-write ์ด๋‹ค. ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ๊ฐ’์ด ๋ฐ”๋€Œ๊ธฐ ์ง์ „์— ๋ณต์‚ฌํ•˜๊ฒŒ ๋œ๋‹ค!!

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

ํด๋ž˜์Šค ์‹๋ณ„ ์—ฐ์‚ฐ์ž

== != ์ด ์•„๋‹ˆ๋ผ === !== (js์—์„œ๋Š” ํƒ€์ž…๊นŒ์ง€ ๊ฐ™์€์ง€ ๋ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž์˜€๋Š”๋ฐ..)



์งˆ๋ฌธ

Struct ๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

struct ๋Š” ๊ตฌ์กฐ์ฒด๋กœ struct ์ด๋ฆ„ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์•ˆ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ, ์ดˆ๊ธฐ์ž๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ (+ extension, protocol, subscript)

์ฃผ๋กœ ๋ชจ๋ธ์„ ์ •์˜ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

+) ์ถ”๊ฐ€

  • struct ๋Š” ๊ด€๋ จ๋œ ๊ฐ’์„ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ (์บก์Šํ™”ํ•ด์„œ) ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•.
  • ๊ฐ’ํƒ€์ž…์ด๋ผ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ํ• ๋‹น ์‹œ, ๋ณต์‚ฌ๋˜์–ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ copy-on-write ๋ผ ์‹ค์ œ ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ์žˆ๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ฐ™์€ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ƒ์†, deinit, type casting ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ž๋™ ๋ฉค๋ฒ„๋ณ„ ์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ์ด ์ œ๊ณต๋œ๋‹ค.

struct์™€ class์™€ enum์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.

๊ฐ’ํƒ€์ž…
struct ๋Š” ๊ตฌ์กฐ์ฒด๋กœ, ํ•ด๋‹น ํƒ€์ž… ์•ˆ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๊ธฐ์ž๋‚˜ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ extension, protocol ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
enum ์€ ์—ด๊ฑฐํ˜•์œผ๋กœ, ํ•ด๋‹น ํƒ€์ž…์—์„œ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์ผ€์ด์Šค๋กœ ํ‘œํ˜„๋œ๋‹ค.

์ฐธ์กฐ ํƒ€์ž…
class ๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. struct ์™€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„์Šทํ•˜์ง€๋งŒ, ์ฐธ์กฐ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— let ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•˜๋”๋ผ๋„ ์ธ์Šคํ„ด์Šค ์•ˆ์— ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ , ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋งŒ ๋ฐ”๊ฟ”๋„ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ „์ฒด๊ฐ€ ๋‹ค ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

+) ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์„œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๊ณ , deinit ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.



https://bbiguduk.gitbook.io/swift/language-guide-1/structures-and-classes

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ