[iOS/Swift] 형식 속성(Type Property) 이란?
형식 속성이란?
- 타입 자체에 속하는 속성으로, 모든 인스턴스가 공유합니다.
- 인스턴스를 생성하지 않고도 타입 이름을 통해 직접 접근할 수가 있습니다.
형식 속성은 static 키워드를 사용하여 정의됩니다
여기서 "static"이란
타입에 속하는 속성이나 메서드를 정의할 때 사용하는 키워드입니다.
사용하는 이유는?
클래스, 구조체, 또는 열거형의 인스턴스를 생성하지 않고도 해당 속성이나 메서드에 접근이 가능하게 하기 위해서입니다.
먼저 인스턴스를 생성해야 하는 인스턴스 속성의 예를 먼저 확인해 보겠습니다.
인스턴스 속성
class Dog {
var name: String
init(name: String) {
self.name = name
}
func bark() { // 인스턴스 메서드
print("\(name) says Woof!")
}
}
// 인스턴스 속성 사용
let dog = Dog(name: "Buddy") // 인스턴스 생성
dog.bark() // 출력: Buddy says Woof!
name과 bark()는 인스턴스 속성입니다. 이를 사용하기 위해서 반드시 Dog 클래스의 인스턴스를 생성해야 합니다.
인스턴스를 왜 생성해야 하냐면
인스턴스를 생성해야 각 객체가 고유한 공간을 가지게 됩니다. 이 공간에는 그 인스턴스만의 속성과 상태가 담기며, 각각의 객체는 독립적으로 동작하게 됩니다.
만약 인스턴스를 생성하지 않고 호출을 시도한다면 당연히
Instance method 'bark()' requires 'self' to be used from an instance of 'Dog'라는 오류가 발생합니다.
형식 속성
동일 코드에 static 키워드를 사용한다면?
class Dog {
static var commonBark: String = "Woof!" // static 속성
static func barkCommon() { // static 메서드
print("A dog says \(commonBark)")
}
}
// static 메서드 호출
Dog.barkCommon() // 출력: A dog says Woof!
인스턴스를 생성하지 않고 호출할 수 있게 됩니다.
여기서 주의할 점은 형식 속성은 기본값을 생략할 수 없고 반드시 원하는 값으로 초기화해야 합니다.
생성자는 인스턴스를 초기화하는 것이고, 타입 자체를 초기화시키지는 못 합니다.
그러기에 형식 속성은 생성자에서 초기화 시킬 수 없는 것입니다.
형식 속성은 클래스나 구조체 자체에 속하게 되어서, 모든 인스턴스가 공유 할 수 있습니다.
그래서 인스턴스를 따로 생성하지 않아도 괜찮은 것입니다
정리하자면
인스턴스 속성은 객체마다 고유하게 존재하는 속성입니다. 각 객체는 인스턴스를 생성하여 독립적인 공간을 가지며, 이 공간에 객체만의 속성과 상태가 담깁니다. 인스턴스 속성에 접근하기 위해서는 반드시 인스턴스를 생성해야 합니다. 만약 인스턴스를 생성하지 않고 호출하려고 하면 오류가 발생합니다.
형식 속성은 static 키워드를 사용하여 정의되며, 타입 자체에 속하는 속성입니다. 모든 인스턴스가 형식 속성을 공유하며, 인스턴스를 생성하지 않고도 타입 이름으로 직접 접근할 수 있습니다. 형식 속성은 기본값으로 초기화해야 하며, 생성자에서는 초기화할 수 없습니다. 이는 형식 속성이 클래스나 구조체 자체에 속해 있기 때문입니다. 따라서, 형식 속성은 인스턴스를 생성하지 않아도 사용할 수 있습니다.
잘못된 내용 혹은 오타가 있거나 더 좋은 내용 피드백은 언제나 환영입니다 :)