- Swift Document - Method
https://docs.swift.org/swift-book/LanguageGuide/Methods.html
μ°μ Mutating ν€μλ
μλν΄ μ€λͺ
νκΈ° μ μ, Swift μ Type μ κ°λ΅νκ² μ€λͺ
νκ² μ΅λλ€.
Swift μ λ³μμλ Value Type
κ³Ό Reference Type
μ΄ μμ΅λλ€.
struct
, enum
, tuple
λ±
Swiftμ κΈ°λ³Έ μλ£ν (
Int
,Float
,Double
,Bool
,String
,Array
,Dictionary
,Set
λ±) μ structλ‘ κ΅¬νλμ΄μμ΅λλ€. μ¦,Value Type
μ λλ€.
class
, function(closure)
λ±
λκ°μ§ Typeμ Copy ν λ μ°¨μ΄λ₯Ό 보μ
λλ€.
볡μ¬, μ¦ ν΄λΉ λ³μλ₯Ό κ°κ³ μλ‘μ΄ λ³μλ₯Ό μμ±ν λ,
Value Type
μ λ°μ΄ν°μ μλ‘μ΄ λ³΅μ¬λ³Έμ μμ± β‘οΈ κΉμ λ³΅μ¬ (Deep Copy)Reference Type
μ μλ³Έ λ°μ΄ν°λ₯Ό μ°Έμ‘° β‘οΈ μμ λ³΅μ¬ (Shallow Copy)μ¬μ€ Swiftμμλ COW (Copy on Write) κΈ°λ² μ μ¬μ©νμ¬,
Value Type
μ 볡μ¬λ³Έμμ κ° λ³κ²½μ΄ μ΄λ£¨μ΄ μ‘μλ μ€μ μλ‘μ΄ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉνμ¬ μ μ₯μ νκ² λ©λλ€.(μ¦, μλ³Έκ³Ό 볡μ¬λ³Έμ΄ λμΌν κ°μ κ°κ³ μμλλ κ΅³μ΄ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νμ§ μκ² λ€λ κ²μ!)
Structures and enumerations are
value types
. By default, the properties of a value type canβt be modified from within its instance methods.
Swift Documents - Methods
Swiftμ Value Type
μ κΈ°λ³Έμ μΌλ‘ λ΄λΆμμ μΈμ€ν΄μ€ λ©μλλ₯Ό ν΅ν΄ λ΄λΆ κ°μ μμ ν μ μμ΅λλ€.
struct Point {
var x = 0.0, y = 0.0
func moveBy(x deltaX: Double, y deltaY: Double) {
x += deltaX // π₯ ERROR
y += deltaY // π₯ ERROR
}
}
κ·Έλ κΈ° λλ¬Έμ λ΄λΆμμ κ° λ³κ²½μ΄ νμν κ²½μ°, ν΄λΉ λ©μλκ° mutating
λ©μλλΌλ κ²μ λͺ
μνμ¬ κ°μ λ³κ²½ν μ μμ΅λλ€. λν mutating
λ©μλμμλ self
λ₯Ό ν΅ν΄ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό ν λΉν μ μμ΅λλ€.
μΈμ€ν΄μ€ λ©μλμμ ꡬ쑰체 λ΄λΆμ κ°μ λ³κ²½
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0) // β somePoint μ κ° : (3.0, 4.0)
μΈμ€ν΄μ€ λ©μλμμ self
λ₯Ό ν΅ν΄ μλ‘μ΄ μΈμ€ν΄μ€ ν λΉ
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
self = Point(x: x + deltaX, y: y + deltaY)
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0) // β somePoint μ κ° : (3.0, 4.0)
π
let
λ³μλΉμ°ν μ΄μΌκΈ°μ΄κ² μ§λ§, let μΌλ‘ μ μΈλ Value Typeμ Mutating λ©μλλ₯Ό μ¬μ©νλλΌλ κ°μ λ³κ²½ν μ μμ΅λλ€!
let fixedPoint = Point(x: 3.0, y: 3.0) fixedPoint.moveBy(x: 2.0, y: 3.0) // π₯ ERROR
μ€λμ Swiftμ Type
κ³Ό Value Type λ΄λΆ κ°μ μμ μ κ°λ₯νκ² ν΄μ£Όλ mutating ν€μλ
μ λν΄μ μμ보μμ΅λλ€.
μ΄μ κ» value type
κ³Ό reference type
μ κΉμ μ΄ν΄μμ΄ κ·Έλ₯ κ° νμ
μ κ·Έλ μ§, μ°Έμ‘° νμ
μ μ λ μ§.. μ΄λ κ² μ΄κ³ μμλλ° μ΄λ² ν¬μ€νΈλ₯Ό ν΅ν΄μ μ΄ν΄λ₯Ό νκ³ λμ΄κ° μ μμμ΅λλ€. κ²°λ‘ μ μΌλ‘λ "value type
μ λ§ κ·Έλλ‘ λ³μ μμ²΄κ° νλμ κ°μΌλ‘, μμμ²λΌ 보μ¬μ Έμ μ΄ κ°μ λ΄λΆμμ μμ νκΈ° μν΄μλ μΈμ€ν΄μ€ λ©μλ μμ mutating
ν€μλλ₯Ό λΆμ¬μ μ΄λ₯Ό κ°λ₯νκ² νλ€" λΌκ³ μ΄ν΄νλ©΄ λ κ² κ°μ΅λλ€!
νλ¦° μ 보 λλ κΆκΈν μ μ΄ μλ€λ©΄ λκΈ λΆνλ립λλ€! μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€βΌοΈ