
프로퍼티(Properties)
프로퍼티는 클래스, 구조체, 열거형 등의 타입과 연관된 값을 나타냅니다. 이를 통해 인스턴스의 상태를 저장하거나 계산할 수 있습니다. 저장 프로퍼티는 인스턴스 내부에 상수나 변수로 값을 저장하고, 계산 프로퍼티는 값을 직접 저장하지 않고 getter와 setter를 통해 값을 계산합니다.
저장 프로퍼티(Stored Properties)
클래스나 구조체의 인스턴스 내부에 저장되는 상수나 변수입니다.
class Person {
var name: String
var age: Int
// 이니셜라이저를 통해 프로퍼티를 초기화
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// 사용 예시
let person = Person(name: "John", age: 30)
print(person.name) // "John"
print(person.age) // 30
계산 프로퍼티(Computed Properties)
실제 값을 저장하지 않고, getter와 setter를 통해 값을 계산합니다.
class Person {
var firstName: String
var lastName: String
var fullName: String {
return "\(firstName) \(lastName)"
}
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
}
// 사용 예시
let person = Person(firstName: "John", lastName: "Doe")
print(person.fullName) // "John Doe"
계산 프로퍼티에는 setter를 추가할 수도 있습니다.
class Square {
var sideLength: Double
var area: Double {
get {
return sideLength * sideLength
}
set {
sideLength = sqrt(newValue)
}
}
init(sideLength: Double) {
self.sideLength = sideLength
}
}
// 사용 예시
let square = Square(sideLength: 4.0)
print(square.area) // 16.0
square.area = 25.0
print(square.sideLength) // 5.0
프로퍼티 감시자(Property Observers)
프로퍼티 값이 변경될 때 호출되는 willSet과 didSet 메서드를 정의할 수 있습니다.
class StepCounter {
var totalSteps: Int = 0 {
willSet {
print("About to set totalSteps to \(newValue)")
}
didSet {
print("Added \(totalSteps - oldValue) steps")
}
}
}
// 사용 예시
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// 출력: About to set totalSteps to 200
// 출력: Added 200 steps
stepCounter.totalSteps = 360
// 출력: About to set totalSteps to 360
// 출력: Added 160 steps
프로퍼티는 인스턴스의 상태를 나타내며, 인스턴스의 기능을 구현하는 데 사용됩니다.
타입 메서드 (Type Methods)
타입 메서드는 특정 타입(클래스, 구조체, 열거형)과 연관된 메서드입니다. 타입 메서드는 인스턴스를 생성하지 않고도 호출할 수 있습니다.
타입 메서드의 특징
- static 키워드를 사용하여 정의합니다.
- self 키워드를 사용하여 현재 타입에 접근할 수 있습니다.
- 인스턴스 프로퍼티나 메서드에는 접근할 수 없습니다.
- 타입 자체의 기능을 구현하는 데 사용됩니다.
타입 메서드 사용 예시
class Math {
static func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
static func subtract(_ a: Int, _ b: Int) -> Int {
return a - b
}
}
let result1 = Math.add(5, 3) // 8
let result2 = Math.subtract(10, 4) // 6
위 예시에서 Math 클래스에는 add(\\\_:\\\_:) 와 subtract(\\\_:\\\_:) 라는 두 개의 타입 메서드가 정의되어 있습니다. 이 메서드들은 인스턴스를 생성하지 않고도 Math.add(5, 3) 과 같이 호출할 수 있습니다.
타입 메서드는 주로 타입 자체와 관련된 기능을 구현하는 데 사용됩니다. 예를 들어, 특정 타입의 인스턴스를 생성하는 메서드, 타입과 관련된 유틸리티 함수 등을 타입 메서드로 구현할 수 있습니다.
타입 메서드는 인스턴스 메서드와 달리 인스턴스 프로퍼티나 메서드에 접근할 수 없습니다. 따라서 타입 메서드에서는 타입 자체와 관련된 기능만을 구현해야 합니다.
'걔 (개발)로그 > Swift' 카테고리의 다른 글
| Swift의 메모리 구조(Code, Data, Heap, Stack) | 도대체 어떻게 생겼나 봅시다. (0) | 2024.05.19 |
|---|---|
| Swift에서 Filter와 Map (0) | 2024.05.17 |
| Swift에서 상속 (Inheritance) (0) | 2024.05.17 |
| Swift에서 인스턴스 (Instance) 및 인스턴스 메서드 (Instance Methods) (0) | 2024.05.17 |
| Swift에서 UserDefaults의 정체 (0) | 2024.05.16 |