class Point {
var x = 0.0
var y = 0.0
}
let point = Point()
var comparePoint = point // 인스턴스를 복사
comparePoint.x = 5
print(comparePoint.x, point.x) // 5.0, 5.0
struct Point {
var x = 0.0
var y = 0.0
}
let point = Point()
var comparePoint = point // 인스턴스를 복사
comparePoint.x = 5
print(comparePoint.x, point.x) // 5.0, 0.0
/* struct */
struct Sample {
// 가변 프로퍼티(값 변경 가능)
var mutableProperty: Int = 100
// 불변 프로퍼티(값 변경 불가능)
let immutableProperty: Int = 100
// 타입 프로퍼티(static 키워드 사용: 타입 자체가 사용하는 프로퍼티)
static var typeProperty: Int = 100
// 인스턴스 메서드(인스턴스가 사용하는 메서드)
func instanceMethod(){
print("instance method")
}
// 타입 메서드(static 키워드 사용: 타입 자체가 사용하는 메서드)
static func typeMethod(){
print("type method")
}
}
var mutable: Sample = Sample() // 가변 인스턴스 생성
//인스턴스에서는 타입 프로퍼티나 타입 메서드를 사용할 수 없음
//mutable.typeProperty = 400 // 컴파일 오류
//mutable.typeMethod() // 컴파일 오류
Sample.typeProperty = 300 //구조체의 타입 프로퍼티 사용(새로운 value 할당)
Sample.typeMethod // type method //구조체의 타입 메서드 호출
let immutable: Sample = Sample() // 불변 인스턴스 생성
//immutable.mutableProperty = 200 // 불변 인스턴스는 가변 프로퍼티라도 인스턴스 생성 후 수정 불가 // 컴파일 오류
/* note */
// 타입(static) or 인스턴스 분류할 수 있고,
// 타입은 그 자체로, 인스턴스는 생성 후 사용 가능함을 의미한다.
/* class */
// class의 type method는 상속 시 override 할 수 없다.
class SuperClass {
// 인스턴스 메서드
func instanceMethod(){
print("instance method")
}
// 타입 메서드(상속 시 override 불가능)
static func typeMethod(){
print("type method")
}
}
class SubClass: SuperClass {
override func instanceMethod() {
print("override instance method")
}
}
var superClass: SuperClass = SuperClass()
superClass.instanceMethod() // prints "instance method"
var subClass: SubClass = SubClass()
subClass.instanceMethod() // prints "override instance method"
https://zeddios.tistory.com/12
https://developer.apple.com/documentation/swift/choosing_between_structures_and_classes