Swift - 연산 프로퍼티란?
Swift - 연산 프로퍼티란?
이전글과 이어짐.
연산 프로퍼티란?
- 값을 저장하는 것이 아니라 다른 프로퍼티의 값을 연산 후 제공해줌.
- 연산 프로퍼티 값에 접근하기 위해 내부적으로
get구문을 정의해줘야함.- 이때
get구문은 값에 접근하기 위해서는 반드시 필요하기 때문에 정의해주지 않으면 값에 접근할 수 없음.
- 이때
- 연산 프로퍼티에 값을 전달 할 때는
set구문을 정의해 처리 가능함.set구문은 필수적인 요소는 아니라 필요에 따라 사용하면 됨.set구문의 매개변수명을 생략할 경우 기본으로 제공되는 상수명인newValue에 넘어온 값이 담기게 됨.set구문이 정의되어 있지 않은 연산 프로퍼티는 읽기 전용 프로퍼티의 역할만을 수행함.
구문
1
2
3
4
5
6
7
8
9
10
class/struct 객체명{
var 프로퍼티명: 데이터타입{
get{
처리구문
}
set(매개변수명){
처리구문
}
}
}
연산 프로퍼티의 경우 저장 프로퍼티와는 달리 저장소가 존재하지 않는 계산 전용 프로퍼티기 때문에
let으로는 선언 불가능함.
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
struct TV{
var width: Int
var height: Int
var area: Int {
get{
print("area get 구문 실행")
return width * height
}
set(newArea){
width = newArea / height
}
}
var perimeter: Int{
print("perimeter get 구문 실행")
return 2 * (width + height)
}
var description: String{
print("description get 구문 실행")
return "가로: \(width), 세로: \(height), 넓이: \(area), 테두리: \(perimeter) "
}
}
var tv = TV(width: 10, height: 20)
print(tv.area)
print(tv.perimeter)
print(tv.description)
tv.area = 20
print(tv.area)
print(tv.perimeter)
print(tv.description)
결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
area get 구문 실행
200
perimeter get 구문 실행
60
description get 구문 실행
area get 구문 실행
perimeter get 구문 실행
가로: 10, 세로: 20, 넓이: 200, 테두리: 60
area get 구문 실행
20
perimeter get 구문 실행
42
description get 구문 실행
area get 구문 실행
perimeter get 구문 실행
가로: 1, 세로: 20, 넓이: 20, 테두리: 42
연산 프로퍼티 내에서 set 구문을 사용하지 않고, get 구문만 사용할 경우 위 예시처럼 구문을 생략하여 사용이 가능함.
연산 프로퍼티는 저장 프로퍼티와 달리
lazy키워드를 붙일 수 없는데, 연산 프로퍼티는 저장 공간이 없는 계산 용도이고,lazy키워드는 실제 메모리 공간이 있어야 사용 가능하기 때문에lazy키워드를 붙일 수 없음.
This post is licensed under CC BY 4.0 by the author.