Swift에서는 대부분의 타입이 구조체로 이루어져 있으므로 중요!
struct Sample {
var mutableProperty: Int = 100 // 가변 프로퍼티
let immutableProperty: Int = 100 // 불변 프로퍼티
static var typeProperty: Int = 100 // 타입 프로퍼티
func instanceMethod() { // 인스턴스 메서드
print("instance method")
}
static func typeMethod() { // 타입 메서드
print("type method")
}
}
static 키워드를 앞에 붙여주면 Sample 타입 자체에서만 사용할 수 있는 타입 프로퍼티이고, static 안 붙여있는 프로퍼티는 인스턴스 프로퍼티이다.
// 가변 인스턴스
var mutable: Sample = Sample()
mutable.mutableProperty = 200
// mutable.immutableProperty = 200 → 에러
dump(mutable)
// - mutableProperty: 200
// - immutableProperty: 100
// 불변 인스턴스
let immutable: Sample = Sample()
// immutable.mutableProperty = 200 → 에러
// immutable.immutableProperty = 200 → 에러
// 타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod()
// mutable.typeProperty = 400 → 에러
// mutable.typeMethod() → 에러
클래스는 구조체와 유사한 개념이지만, 구조체가 값 타입이라면 클래스는 참조(reference) 타입이라는 점에서 차이를 갖는다. Swift의 클래스는 다중상속이 불가능하다.
class Sample {
// 가변 프로퍼티
var mutableProperty: Int = 100
// 불변 프로퍼티
let immutableProperty: Int = 100
// 타입 프로퍼티
static var typeProperty: Int = 100
// 인스턴스 메서드
func instanceMethod() {
print("instance method")
}
// 타입 메서드
// 상속시 재정의 불가 타입 메서드 - static
static func typeMethod() {
print("type method - static")
}
// 상속시 재정의 가능 타입 메서드 - class
class func classMethod() {
print("type method - class")
}
}
인스턴스를 생성할 때 var로 선언하든 let으로 선언하든 키워드에 상관 없이 Sample 클래스의 가변 프로퍼티를 변경할 수 있다. 불변 프로퍼티는 물론 값 변경이 불가능하다.
// 인스턴스 생성 - 참조정보 수정 가능
var mutableReference: Sample = Sample()
mutableReference.mutableProperty = 200
// mutableReference.immutableProperty = 200 → 에러
// 인스턴스 생성 - 참조정보 수정 불가
let immutableReference: Sample = Sample()
immutableReference.mutableProperty = 200
// immutableReference.immutableProperty = 200 → 에러
야곰의 스위프트 기본 문법 강좌를 수강하며 작성한 내용입니다.