Property
Property 는
값을 특정 클래스, 구조체, 열거형과 연결한다.
Swift 에서 Property 는 크게 세 가지로 나눌 수 있다.
Stored Property
]상수와 변수값을 인스턴스의 일부로 저장한다.
클래스와 구조체에서만 사용된다.
Computed Property
]특정 연산을 수행하여, 값을 반환한다.
클래스, 구조체, 열거형에서 사용된다.
Type Property
]프로퍼티를 타입 자체와 연결한 형태이다.
연산 프로퍼티 [ Computed Property]
값을 저장하는 저장 프로퍼티와 달리,
연산 프로퍼티는 값을 저장하는 공간이 없다.
값을 저장하지 않기 때문에
무조건 변수로 선언되어야 하고,
타입추론이 불가하므로 타입을 꼭 명시해주어야 한다.
다른 저장 프로퍼티를 가져와서 연산을 하고
적절한 값을 돌려주는 역할을 한다.
구조체, 클래스, 열거형 모두에서 사용 가능하고,
접근자(getter), 설정자(setter) 가 필요하다.
접근자 [ getter ]
값을 가져와 연산하여 리턴하는 역할을 한다.
타입 명시를 꼭 해주어야 한다.
return
구문이 필수이지만,
getter 의 반환값이 프로퍼티 타입과 동일하다면
return
키워드를 생략해도 그 결과값이 접근자의 반환값이 된다.
설정자 [ setter ]
값을 설정하는 역할을 한다.
매개변수로 받은 값을 저장 프로퍼티에 연산하여 저장한다.
setter 는 매개변수가 꼭 필요하다.
// example1
struct Person {
var name: String = "Eugenie" // 저장 프로퍼티
// 값을 저장하지 않으므로, 타입추론이 불가하다.
// 타입을 꼭 명시해주어야 한다.
var introduce: String {
// 접근자 [ getter ]
// 저장 프로퍼티의 값을 연산하여 반환하므로
// return 구문을 꼭 작성해주어야 한다.
get {
return "Hello, My name is \(name)."
}
// 설정자 [ setter ]
// 매개변수로 받은 값을 어떤 저장 프로퍼티에,
// 어떻게 설정할 것인지 구현한다.
set {
self.name = "My name is \(name)."
// self. "My name is + newValue + ." 가능
}
}
}
var individual: Person = Person()
// get 에 접근
print(individual.introduce) // Hello, My name is Eugenie.
// set 에 접근
individual.introduce = ""
print(individual.name) // My name is Eugenie.
get 만 사용하여 읽기 전용으로 구현이 가능하다.
// example2
struct Person {
var name: String = "Eugenie"
var introduce: String {
get {
return "Hello, My name is \(name)."
}
}
}
var individual_1: Person = Person()
// Hello, My name is Eugenie.
print(individual_1.introduce)
// individual_1.introduce = "" // Error
set 에 접근하려고 한다면
'introduce' is a get-only property'
라고
에러 메세지가 발생한다.
// example3
struct Human {
var name: String = "eugnie"
var introduce: String {
return "My name is \(name)."
}
}
var individual_2: Person = Person()
print(individual_2.introduce)
// Hello, My name is Eugenie.
메서드 [ Method ] vs. 연산 프로퍼티 [ Computed Property ]
메서드 [ Method ]
: 접근자, 설정자를 각각 따로 구현해야 한다.
▶️ 구현하는 데에 불편함과 가독성이 떨어질 가능성이 있다.
연산 프로퍼티 [ Computed Property ]
: 직관적이고 편리하고, 읽기 전용 연산 프로퍼티 구현이 가능하다.
▶️ 메서드는 읽기 전용, 쓰기 전용 모두 구현이 가능하다.
📚 Reference
The Swift Language Guide
Swift ) Properties - Computed Property(연산 프로퍼티)
[Swift] 프로퍼티 개념 정리 (2); 연산 프로퍼티