Programming/Swift

[Swift] Properties 1 - Stored properties (저장 프로퍼티)

devssun 2019. 7. 9. 23:40
728x90
반응형

Swift - Stored properties (저장 프로퍼티)

Properties

프로퍼티는 값을 특정 class, struct, enum과 연결한다

Stored Properties (저장 프로퍼티)
computed properties (연산 프로퍼티)
type properties (타입 프로퍼티)

총 세개로 나뉜다.


Stored Properties (저장 프로퍼티)

저장 프로퍼티는 특정 class또는 struct 인스턴스의 일부로 저장되는 상수 또는 변수
변수를 저장하면 변수 저장 프로퍼티, 상수를 저장하면 상수 저장 프로퍼티 라고 부른다

이 프로퍼티를 선언할 때 기본 값을 설정할 수 있습니다

struct FixedLengthRange {
    var firstValue: Int
    let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// the range represents integer values 0, 1, and 2
rangeOfThreeItems.firstValue = 6
// the range now represents integer values 6, 7, and 8

위 코드에 있는 FixedLengthRange 구조체는 firstValue 변수, length 상수 프로퍼티를 가집니다

rangeOfThreeItems를 let으로 선언하면 프로퍼티의 값을 변경할 수 없습니다

struct와 mutating (ref. http://chris.eidhof.nl/post/structs-and-mutation-in-swift/)

struct는 value type으로 이것은 값 자체가 복사되는 타입이다
간단한 예시로 아래 코드를 볼 수 있다. b에다 a 값을 대입하고 b를 1 증가시킨 코드다
b는 a의 값(42)를 복사해서 받았기 때문에 b의 값이 변해도 a는 그대로다

var a = 42    // a = 42
var b = a    // b = 42
b += 1        // b = 43, a = 42

위에서 선언한 struct의 인스턴스(rangeOfThreeItems)에서 내부 변수의 값을 변경하면 setter로 동작해서 mutating(값 변경)을 하는데 let으로 선언하면 mutating을 허용하지 않아 에러가 발생한다.
그래서 구조체의 인스턴스를 let으로 선언했을 때 해당 struct의 프로퍼티까지 let 으로 선언한 효과를 가져옵니다

struct 이니셜라이저

struct는 기본 이니셜라이즈를 제공하기 때문에 FixedLengthRange 구조체 인스턴스를 선언하여 값을 초기화합니다.
* 만약 선언과 초기화를 한번에 진행했다면 FixedLengthRange() 로 인스턴스 생성이 가능합니다.
struct의 멤버 변수의 값을 선언과 동시에 초기화해주면 인스턴스를 만드는 과정이 쉬워집니다

struct FixedLengthRange {
    var firstValue: Int = 3
    let length: Int = 4
}
var rangeOfThreeItems = FixedLengthRange()
반응형