오늘은 수업에서 다뤘던 연산 프로퍼티에 대해서 복습해보려고 한다.
우선 연산 프로퍼티의 핵심 내용은 다음과 같다.
1. 클래스, 구조체, 열거형에 사용
2. 저장 프로퍼티와 달리 저장 공간을 갖지 않는다. + 저장할 프로퍼티를 만들어야 한다.
3. 항상 var로 정의해야 한다. (다른 프로퍼티의 값을 연산, 프로퍼티로 전달받은 값을 다른 프로퍼티에 저장하기 때문에)
연산 프로퍼티 말을 이해해보면 값을 저장하지 않고 연산을 하는 프로퍼티구나 라고 짐작해볼 수 있다.
그리고 연산 프로퍼티는 값을 저장하지 않고 연산하기 때문에 어떤 타입을 연산할지 알기 위해 타입을 명시해야 한다.
추가로 연산 이라고 하면 어떤 값을 받고 다른 프로퍼티에 넘겨줄지를 알아야 한다고 짐작할 수 있다.
우선 예시를 들어서 설명하면
struct Family {
var member: Int = 0
var members: Int {
get {
return member + 1
}
set {
if newValue > 0 {
member = newValue + 1
print("가족 수가 0보다 큽니다.")
} else {
print("가족 수가 \(newValue)입니다. ")
}
}
}
}
var family : Family = Family()
//get에 접근 return 0 + 1
print(family.members) // 1
//set에 접근 -1 + 1
//결과값을 member에 할당
family.members = -1 //가족 수가 -1 입니다.
print(family.member)// 0
//set에 접근 4 + 1
//결과값을 member에 할당
family.members = 4 //가족 수가 0보다 큽니다.
print(family.member) //5
family.members 는 get에 접근한다는 의미
return 에 따라 프로퍼티 값과 1이 더해져 나타난다.
family.members = -1 는 newValue에 -1을 대입하고 결과를 다시 member에 저장
따라서 failmy.member 는 정수 0을 갖고 있는다.
기억해야 할 것은
연산 프로퍼티를 쓰기 위해서는 값을 저장할 저장 프로퍼티가 존재해야 하고
연산 프로퍼티는 저장 프로퍼티의 값을 받아오고 다시 저장한다는 것이다.
다음은 String타입으로 연산 프로퍼티를 연습해보았다.
class Person {
var introducing: String = "미지정"
var name: String {
get {
return self.introducing + "된 상태입니다."
}
set {
self.introducing = newValue + "입니다."
}
}
}
var person = Person()
print(person.name) //미지정된 상태입니다.
person.name = "김땡땡"
print(person.introducing) //김땡땡입니다.
연산 프로퍼티의 set의 newValue
위의 예시를 보면 set 부분의 파라미터가 newValue라고 되어있는 것을 볼 수 있다.
newValue는 기본값이고 이름을 변경해줄 수 있다.
class Person {
var introducing: String = "미지정"
var name: String {
get {
return self.introducing + "된 상태입니다."
}
set(myName) {
self.introducing = myName + "입니다."
}
}
}
var person = Person()
print(person.name) //미지정된 상태입니다.
person.name = "김땡땡"
print(person.introducing) //김땡땡입니다.
연산 프로퍼티는 get만을 사용할 수는 있지만 set만을 사용할 수는 없다.
그 동안 어려워서 미뤄뒀던 연산 프로퍼티에 대해서 공부해보았다.
이제 실제 프로젝트에 어떻게 사용해볼지 고민해봐야겠다!
https://stackoverflow.com/questions/24699327/what-are-get-and-set-in-swift
https://zeddios.tistory.com/245
https://babbab2.tistory.com/119
'swift 기본 문법' 카테고리의 다른 글
Swift 기본 문법) 상속 알아보기 (0) | 2022.10.02 |
---|---|
swift 기본문법) if let, guard let의 목적과 의미 알아보기 (0) | 2022.09.25 |
Swift 고차함수) flatMap, compactMap 알아보기 (1) | 2022.09.15 |
Swift lazy 알아보기 (0) | 2022.08.31 |
swift 고차함수 알아보기1(map, filter, reduce) (0) | 2022.08.12 |