728x90
반응형
프로퍼티의 정의 및 사용
프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다.
(열거형 내부에는 연산 프로퍼티만 구현 가능)
연산 프로퍼티는 var키워드로만 선언 가능하다.
연산 프로퍼티는 읽기 전용으로는 구현 가능하지만, 쓰기 전용으로는 불가능하다.
읽기, 쓰기 둘 다 가능하게 하려면 get, set 블럭을 구현하면 된다.
set 블럭에서 암시적 파라미터로 newValue를 사용할 수 있다.
종류
- 저장 프로퍼티(Stored Properties)
- 연산 프로퍼티(Computed Properties)
- 타입 프로퍼티(Type Properties)
코드 예시
struct Student {
// 인스턴스 저장 프로퍼티
var name: String = ""
var `class`: String = "Swift"
var koreanAge: Int = 0
// 인스턴스 연산 프로퍼티
var westernAge: Int {
get {
return koreanAge - 1
}
set(inputValue) {
koreanAge = inputValue + 1
}
}
// 타입 저장 프로퍼티
static var typeDescription: String = "학생"
/*
// 인스턴스 메서드
func selfIntroduce() {
print("저는 \(self.class)반 \(name)입니다")
}
*/
// 읽기전용 인스턴스 연산 프로퍼티
// 간단히 위의 selfIntroduce() 메서드를 대체할 수 있습니다
var selfIntroduction: String {
get {
return "저는 \(self.class)반 \(name)입니다"
}
}
/*
// 타입 메서드
static func selfIntroduce() {
print("학생타입입니다")
}
*/
// 읽기전용 타입 연산 프로퍼티
// 읽기전용에서는 get을 생략할 수 있습니다
static var selfIntroduction: String {
return "학생타입입니다"
}
}
// 타입 연산 프로퍼티 사용
print(Student.selfIntroduction)
// 학생타입입니다
// 인스턴스 생성
var tony: Student = Student()
tony.koreanAge = 10
// 인스턴스 저장 프로퍼티 사용
tony.name = "yagom"
print(tony.name)
// tony
// 인스턴스 연산 프로퍼티 사용
print(tony.selfIntroduction)
// 저는 Swift반 tony입니다
print("제 한국나이는 \(tony.koreanAge)살이고, 미쿡나이는 \(tony.westernAge)살입니다.")
// 제 한국나이는 10살이고, 미쿡나이는 9살입니다.
연산 프로퍼티는 개인적으로 Kotlin의 backing property와 유사한 느낌이다.
이와 관련해서는 추후 더 자세히 비교해보자.
728x90
반응형
'Language > Swift' 카테고리의 다른 글
Swift - 클로저(Closures) - 2 (0) | 2024.11.15 |
---|---|
Swift - 클로저(Closures) - 1 (2) | 2024.11.14 |
Swift - Class, Struct, Enum 비교하기 (0) | 2024.05.13 |
Swift - 열거형(Enum) (0) | 2024.05.12 |
Swift - 클래스(Class) (0) | 2023.12.05 |