Swift

❓ 저장 프로퍼티

_yunie 2024. 5. 31. 23:33

안녕하세요!

아실지 모르겠지만 Swift의 프로퍼티에는 총 세 가지가 존재합니다

바로 저장, 타입, 연산 프로퍼티인데요

오늘은 그중에서도 저장 프로퍼티에 대해 알아보겠습니다!

프로퍼티란 ❓

사실 프로퍼티라고 하면 개발에 아직 익숙지 않으신 분들은 강의나 관련 도서를 봤을 때  ‘도대체 그게 뭔데?’라고 생각하실 것 같아요

분명 그냥 변수를 얘기하는 것 같은데 쟤는 왜 프로퍼티인가~ 싶기도 할 것 같고요

이전에 프로퍼티에 대해 잘 모르던 저도 마찬가지였습니다😆

그래서 프로퍼티가 뭐냐고 물으신다면 우리가 아는 그 변수/상수 맞습니다 🙂

다만, 일반적으로 선언하는 것이 아닌 클래스 또는 구조체 내에서 사용하는 변수들을 모두 프로퍼티라고 합니다

let number: Int = 0 // 변수

struct UserData {
    var age: Int  // 프로퍼티 
    var location: String
}

 

❓ 저장 프로퍼티(Stored Property)

이제 프로퍼티가 어떤 것인지 정확히 알게 됐다면 이번 글의 목적인 저장 프로퍼티에 대해 알아보겠습니다

저장 프로퍼티는 방금 얘기한 것과 같은 어떠한 키워드도, 연산도 없는 일반적인 프로퍼티를 이야기합니다

자, 그럼 아래 코드에서 저장 프로퍼티는 총 몇 개일까요?

struct UserData {
    var age: Int 
    var location: String
}

class User {
    var userInfo: UserData 
    let name: String

    init(userInfo: UserData, name: String) {
        self.userInfo = userInfo
        self.name = name
    }
}

 

바로 age, location, userInfo, name으로 총 4개입니다!

저장 프로퍼티는 정말 말 그대로 클래스, 구조체 내에서 기본적으로 사용되는 프로퍼티이기 때문에 lazy 같은 키워드가 붙지 않았거나 var grade: Int { return 1 } 과 같은 형태의 프로퍼티가 아니라면 모두 저장 프로퍼티라고 생각해 주셔도 무방합니다😊

 

❓ 지연 저장 프로퍼티(Lazy Stored Property)

‘지연’이라고 하면 혹시 떠오르는 키워드 없으세요?

만약 제 글의 바로 이전글을 보셨다면 금방 알아차리실 lazy입니다!

이전 글을 굳이 또 찾아보기 귀찮다 하시는 분들을 위해 설명드리자면 lazy는 말 그대로 프로퍼티의 초기화를 미뤄주는 역할을 합니다

그래서 lazy가 붙은 프로퍼티를 초기화가 지연되었다하여 ‘지연 저장 프로퍼티’라고 합니다

코드로 한 번 살펴볼까요?

import UIKit

class GPS {
    init() {
        print("GPS!")
    }
}

class iPhone {
    lazy var gps = GPS() // 지연 저장 프로퍼티
    init() {
        print("iPhone!")
    }
}

let myiPhone = iPhone()

 

해당 코드를 보면 myiPhone이라는 인스턴스가 생성되고 해당 인스턴스는 GPS라는 기능을 가지고 있습니다

하지만 자세히 보시면 gps에 lazy라는 키워드가 붙은 걸 보실 수 있을 거예요

클래스 내부의 lazy가 쓰인 변수! 바로 지연 저장 프로퍼티입니다

현재 코드를 실행하면 어떤 print문이 출력될까요?

 

iPhone!

 

lazy는 lazy가 붙은 프로퍼티가 호출되었을 때서야 프로퍼티를 초기화한다고 했죠?

그렇기 때문에 지금은 iPhone이라는 객체가 생성된 것만을 확인할 수 있습니다

그리고 여기서 myiPhone의 gps에 접근해 주면 비로소 gps가 초기화되면서 GPS! 가 출력됩니다

myiPhone.gps // GPS!

 

이처럼 lazy는 인스턴스의 초기화와 상관없이 개별적으로 초기화가 이루어지므로 프로퍼티 선언 시에는 꼭 var로 선언해주어야 합니다

 

🧐 그럼 지연 저장 프로퍼티는 언제 쓰이나요

지연 저장 프로퍼티는 생성될 객체가 지금 당장 해당 데이터를 가지고 있지 않아도 될 때 사용됩니다

방금 전의 코드를 다시 가져와볼게요!

import UIKit

class GPS {
    init() {
        print("GPS!")
    }
}

class iPhone {
    lazy var gps = GPS()
    init() {
        print("iPhone!")
    }
}

let myiPhone = iPhone()
let youriPhone = iPhone()

 

우리 모두의 아이폰에는 gps 기능이 탑재되어 있습니다

하지만 gps기능이 처음부터 설정되어 있을 필요가 있을까요?

핸드폰을 처음 구매한 후, 지도로 길을 찾거나 배달음식을 시켜 먹기 전까지 우리의 위치정보는 아마 필요 없을 겁니다

그런데 처음부터 gps 기능이 켜져 있는 상태가 유지되면 불필요한 메모리를 잡아먹는 결과만 나오지 않을까요?

이러한 경우를 방지해주고 싶을 때, 우리는 lazy를 이용해 메모리를 절약해 줄 수 있습니다!

(lazy에 대해 좀 더 자세히 알고 싶다면 이전 글을 살펴봐주세용😉)

 

📚 참고

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

[Swift / Property] Store Property (저장 프로퍼티)

Swift) 프로퍼티 정복하기 (1/4) - 저장 프로퍼티(Stored Property)

'Swift' 카테고리의 다른 글

❓ Delegate와 DataSource의 차이  (1) 2024.06.10
❓ 타입 프로퍼티  (2) 2024.06.07
❓ 연산 프로퍼티  (0) 2024.06.05
❓final  (0) 2024.05.27
❓lazy  (0) 2024.05.20