상세 컨텐츠

본문 제목

[swift] 프로퍼티 - stored property

SWIFT

by 옹홍 2021. 3. 12. 23:35

본문

Properties

프로퍼티는 값을 특정 클래스, 구조체, 열거형과 연결한다. (이건 사실 뭔말인지 모르겠다...)

1. Stored Property(저장 프로퍼티)

2. Computed Proerty(연산 프로퍼티)

3. Typed Property(타입 프로퍼티)

 

Stored Property(저장프로퍼티)

저장 프로퍼티는 상수와 변수 값을 인스턴스의 일부로 저장한다. 그냥 클래스나 구조체의 인스턴스의 일부가 되는 상수 변수이다.

 var로 선언하면 변수, let으로 선언하면 상수이다.

이런게 저장프로퍼티이다. 위의 방법과 같이 초기값을 주고 선언하는 방법이 있다.

이 방법과 같이 만약에 초기값이 없다면 구조체 변수를 선언해줄때, (firstvalue: 0, length: 3)을 써줘야한다.

여기서 rangeOfThreeItems.length = 10 이 오류가 나는 이유는 바로 length의 선언이 let 이기 때문이다.

근데 구조체 변수를 상수로 선언해주면, 구조체 상수의 인스턴스 프로퍼티는 변경이 불가하다. 왜냐면 구조체는 value type 이기 때문!!

Class에서 상황을 보면 

Class의 경우는 저장 프로퍼티에 초기값이 없다면, 클라스는 init이 반드시 필요하다. 근데 위에 peter와 wendy의 차이를 보면 클래스 변수일지 클래스 상수선언일지 차이가 있다 하지만 여기서는 아까 구조체와 달리 오류가 나지 않는 이유는 바로 class는 reference type 이기 때문이다. 원본에 바로 접근하기 때문이다. 

 

Lazy Stored Properties(게으른 저장 프로퍼티)

- 값이 사용되기 전까지는 값이 계산되지 않는 프로퍼티이다.

zedd님의 블로그의 예제를 같이 따라해본 결과는 이렇다

게으른 저장 프로퍼티는 초기값이 인스턴스의 초기화가 될 때까지 모르는 외부요소에 의존하는 경우에 유용하다고 한다? 음 그니깐 초기화가 되도 모르는 외부요소? 초기화 이후에 외부요소에 의존할때 유요하다고 한다. 또한 초기값이복잡하거나 계산비용이 많이 드는 설정일때도 유용하다지만 아직은 잘 모르겠다.

여기서 이렇게 구현한 이유는 DataManager를 통해서 data를 관리할 수 있지만, 그래도 data.txt에 접근하고 싶을 때에만 DataImporter라는 클래스를 생성하고 싶은 것이다. 이럴 때 lazy var을 쓰는것! 

 

이 글을 참고해서 작성한 글입니다

 

Swift ) Properties - Stored Property(저장 프로퍼티)

안녕하세요 :) Zedd입니다. 오늘은 Property에 대해서 배워볼거에요!!!! Swift의 프로퍼티에는 종류가 있답니다. 글을 쓰면서 제가 프로퍼티 프로퍼티 그러는데, 딱 이건 무슨 프로퍼티다!!!라고 확실

zeddios.tistory.com

 

관련글 더보기

댓글 영역