스위프트 공식문서를 참조하였습니다.
앞선 클래스와 구조체의 내용에서 프로퍼티를 한번 다루었고, 거기에서 부족한 내요을 추가 하였습니다.
지연 저장 프로퍼티( lazy stored property)
지연 저장 프로퍼티는 값이 처음으로 사용되기 전에는 값이 저장되어지지 않는 프로퍼티다. 지연저장으로 사용하기 위해서는 프로퍼티 선언 앞에
lazy를 붙여주면 된다. 하지만 중요한점은 지연 프로퍼티는 반드시 변수 var로 선언해줘야 하는데 이는 최초에 선언할때, 빈 프로퍼티를 주고 값을 이후 사용될때 변경하기 때문에 그렇다.
class DataImporter { /* DataImporter는 외부 파일에서 데이터를 가져오는 클래스입니다. 이 클래스는 초기화 하는데 매우 많은 시간이 소요된다고 가정하겠습니다. */ var filename = "data.txt" // 데이터를 가져오는 기능의 구현이 이 부분에 구현돼 있다고 가정 } class DataManager { lazy var importer = DataImporter() var data = [String]() // 데이터를 관리하는 기능이 이 부분에 구현돼 있다고 가정 } let manager = DataManager() manager.data.append("Some data") manager.data.append("Some more data") // DataImporter 인스턴스는 이 시점에 생성돼 있지 않습니다.
이렇게 사용을 할수 있는데, 최초에 위에 DataImporter라는 클래스는 사용시간이 매우 오래 걸리는데, 이를 밑에 DataManager라는 클래스에서는 lazy로 선언하였기 때문에, 실제로 사용되지 않는다면 저 값이 계산될 필요가 없기 때문에 연산에 드는 비용을 아낄수 있다.
읽기전용 계산된 프로퍼티 (read only property)
computed property에서 getter만 존재하고 setter가 없는 경우를 의미합니다.
즉 어떠한 반환값은 존재하고 제공하지만, 다른값은 지정을 해줄수 없는 경우를 의미합니다.
struct Cuboid { var width = 0.0, height = 0.0, depth = 0.0 var volume: Double { return width * height * depth } } let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0) print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)") // "the volume of fourByFiveByTwo is 40.0" 출력
프로퍼티 옵저버 (property observer)
프로퍼티에 새 값이 설정(set)될 때마다 이 이벤트를 감지할수 있는 옵저버를 제공한다.
willSet
: 값이 저장되기 바로 직전에 호출 됨
didSet
: 새 값이 저장되고 난 직후에 호출 됨willSet
에서는 새 값의 파라미터명을 지정할 수 있는데, 지정하지 않으면 기본 값으로newValue
를 사용합니다.didSet
에서는 바뀌기 전의 값의 파라미터명을 지정할 수 있는데, 지정하지 않으면 기본 값으로oldValue
를 사용합니다.
음,, 옵저버는 현재 정확하게 이해되지가 않아서 다음번에 다시 보면서 이해하자.
타입 프로퍼티(type property)
구조체와 클래스의 프로퍼티
구조체는 값 타입 프로퍼티를 가지게 되고
클래스는 참조타입 프로퍼티를 가지게 된다.
따라서 구조체는 한번 선언이 되면 직접적으로 값을 변경할수 없게 되는데 이때 사용하는것이
mutating이라는 문법이다.
이를 통해서 값타입 프로퍼티에 직접적으로 접근하여 값을 변환 시켜줄수 있다.
Uploaded by
N2T