음악 재생 프로그램을 만들면서 아래와 같은 상황이 있었기 때문이다
해당 노래를 누르면
노래 정보를 가져온 후(1)
원할 때마다 노래 파일 정보만 가져와서 재생하고 싶은데(3)
노래 파일 정보가 담겨 있는 모델의 데이터 타입이 클래스가 되어야 하나? 싶어서 찾아보고 있다.
참조타입: class, objective-C와 같이 NSObject를 상속받았다
값타입: struct, enum
간단하게 말하면 참조타입의 값을 변경하면 원본에 있는 값도 변한다는 것이다
// Value type example
struct S { var data: Int = -1 }
var a = S()
var b = a // a is copied to b
a.data = 42 // Changes a, not b
println("\(a.data), \(b.data)") // prints "42, -1"
// Reference type example
class C { var data: Int = -1 }
var x = C()
var y = x // x is copied to y
x.data = 42 // changes the instance referred to by x (and y)
println("\(x.data), \(y.data)") // prints "42, 42"
data
)을 비교해야할 때==
사용할 때extension Point: Equatable { }
func ==(lhs: Point, rhs: Point) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
독립적
이어야 할 때struct Shape {
var center: Point
}
let initialPoint = Point(x: 0, y: 0)
let circle = Shape(center: initialPoint)
var square = Shape(center: initialPoint`
square.center.x = 5 // {x: 5.0, y: 0.0}
circle.center // {x: 0.0, y: 0.0}
//square의 center 값을 바꾸어도 circle에 영향을 주지 않는다
===
사용할 때class Account {
var balance = 0.0
}
class Person {
let account: Account
init(_ account: Account) {
self.account = account
}
}
let account = Account()
let person1 = Person(account)
let person2 = Person(account)
person2.account.balance += 100.0
person1.account.balance // 100
person2.account.balance // 100
출처
https://www.raywenderlich.com/9481-reference-vs-value-types-in-swift
https://developer.apple.com/swift/blog/?id=10
https://velog.io/@msi753/2-1.-값타입과-참조타입-스위프트
결론
음... 개념은 대충 잡혔지만
섞어서 쓰는 단계까진 못왔다
이것 저것 고려한 뒤 결정을 내리고
내가 선택하기 나름의 문제인 거 같다