iOS/Swift

프로퍼티 2편 (연산 프로퍼티)

밤새는 탐험가89 2024. 1. 22. 14:17

 

연산 프로퍼티

특정 상태에 따른 값을 연산하는 프로퍼티

 

인스턴스 내/외부의 값을 연산하여 값을 돌려주는 접근자(getter) 역할

은닉화된 내부의 프로퍼티 값을 간접적으로 설정하는 설정자(setter) 역할

 

클래스, 구조체, 열거형에 연산 프로퍼티 정의 가능 

(저장 프로퍼티는 클래스와 구조체에서만 정의)

 

 

연산 프로퍼티의 정의

var name: Type {

    // 접근자: 다른 저장 프로퍼티의 값을 얻거나 연산하여 리턴
    get {
        statements
        return expr
    }
    
    // 설정자: 다른 저장 프로퍼티에 값을 저장
    set(name) {  
    	statements
    }
}

 

 

 

연산 프로퍼티의 사용

class Fruit {
    
    var name: String = ""
    
    var checkedName: String {
        get {
            return name
        }
        
        set(newName) {
            self.name = newName 
        }
    }
}

 

Fruit 클래스의 name 저장 프로퍼티가 없이 

checkedName 연산 프로퍼티만 구현한다면?

오류가 발생 

 

왜냐하면 연산 프로퍼티는 다른 "저장 프로퍼티"의 값을 읽거나 새롭게 쓰는 것이기 때문

 

set 부분의 newName 이라는 파라미터의 타입을 지정안함 

왜냐하면 이미 checkedName 이라는 연산 프로퍼티에 타입을 지정했기 때문

 

 

 

연산프로퍼티 사용

let apple: Fruit = Fruit()

apple.name = "apple"
print(apple.checkedName)     // apple

apple.checkedName = "delmont apple"
print(apple.ckeckedName)     // delmont apple

 

 

 

checkedName 이라는 연산 프로퍼티의 값을 읽으면, get가 실행

checkedName 이라는 연산 프로퍼티에 값을 쓰면, set가 실행

 

 

 

set 부분의 파라미터는 생략이 가능 

class Fruit {
    
    var name: String = ""
   
    var checkedName: String {
        get {
            return name
        }
        
        set {
            self.name = newValue
        }
    }
}

 

 

set의 파라미터를 생략할 경우에는 newValue 라는 이름으로 파라미터에 접근

반드시 "newValue"라고 해야 함 

철자 틀리면 안됨

 

 

읽기 전용 연산 프로퍼티

class Fruit {
    
    var name: String = ""
    
    var checkedName: String {
        get {
            return name + "읽기만 가능해요"
        }
    }
}

 

값을 읽어오기만 하면 된다면?

getter만 선언해주면 됨

 

 

쓰기 전용 연산 프로퍼티 

이건 안됨

 

'iOS > Swift' 카테고리의 다른 글

프로퍼티 4편 (타입 프로퍼티)  (1) 2024.01.25
프로퍼티 3편 (프로퍼티 감시자)  (0) 2024.01.23
프로퍼티 1편 (저장 프로퍼티)  (0) 2024.01.19
구조체와 클래스의 차이  (0) 2024.01.18
클래스  (0) 2024.01.17