Search

Stored, Computed, Type Property

Swift를 배우면서 프로퍼티(Property)에 대해 접하게 될 텐데, 프로퍼티는 클래스, 구조체, 열거형 등에 속하는 값들을 의미합니다. 크게 Stored Property(저장 프로퍼티), Computed Property(연산 프로퍼티), Type Property(타입 프로퍼티)로 나뉩니다. 이 글에서는 이 세 가지 프로퍼티의 차이점을 설명하고 메모리 상에서 어떤 차이가 있는지 알아보고자 합니다.

목차

1.

Stored Property

저장 프로퍼티는 말 그대로 값을 저장하는 역할을 하는 프로퍼티입니다. 클래스나 구조체의 인스턴스에 해당 값을 저장하고 그 값을 메모리에 유지합니다. 쉽게 말해, 우리가 변수를 선언하고 값을 할당할 때와 같은 역할을 합니다.

예시 코드

struct Person { var name: String // 저장 프로퍼티 var age: Int // 저장 프로퍼티 } var rafa = Person(name: "Rafa", age: 25)
Swift
복사
위 코드에서 nameagePerson 구조체의 저장 프로퍼티입니다. 인스턴스 rafa가 생성되면 nameage 값이 메모리에 저장됩니다.

메모리에서의 특징

저장 프로퍼티는 인스턴스가 생성될 때 메모리에 할당되며 인스턴스가 메모리에서 해제될 때 함께 해제됩니다. 즉, 인스턴스와 생명 주기를 같이합니다. 각 저장 프로퍼티는 인스턴스별로 고유한 값을 유지합니다.

Computed Property

연산 프로퍼티는 값을 저장하는 대신, 다른 값이나 로직을 기반으로 계산된 값을 제공하는 프로퍼티입니다. 저장된 값을 갖지 않으며 매번 접근할 때마다 계산된 결과를 반환합니다.

예시 코드

struct Rectangle { var width: Double // 저장 프로퍼티 var height: Double // 저장 프로퍼티 var area: Double { // 연산 프로퍼티 return width * height } } let rect = Rectangle(width: 10.0, height: 5.0) print("사각형의 면적: \(rect.area)") // 사각형의 면적: 50.0
Swift
복사
위 코드에서 areaRectangle 구조체의 연산 프로퍼티입니다. widthheight 값을 기반으로 면적을 계산하여 반환합니다.

메모리에서의 특징

연산 프로퍼티는 값을 저장하지 않기 때문에 메모리에 값을 따로 할당하지 않습니다. 대신 필요할 때마다 계산하여 반환하므로 메모리 사용을 절약할 수 있지만 매번 계산을 수행하기 때문에 성능이 중요할 때는 주의가 필요합니다.

Type Property

타입 프로퍼티는 클래스나 구조체의 인스턴스가 아닌 타입 자체에 속하는 프로퍼티입니다. 즉, 모든 인스턴스가 공유하는 값을 의미합니다. 타입 프로퍼티는 저장 프로퍼티와 연산 프로퍼티 둘 다 가능하며 주로 static 키워드를 사용하여 정의합니다.

예시 코드

class Bank { static var totalBalance: Double = 0.0 // 저장 타입 프로퍼티 static var interestRate: Double { // 연산 타입 프로퍼티 return 0.02 } } Bank.totalBalance = 1000000.0 print("총 잔액: \(Bank.totalBalance)") // 총 잔액: 1000000.0 print("이자율: \(Bank.interestRate)") // 이자율: 0.02
Swift
복사
totalBalance저장 타입 프로퍼티로서 은행 전체의 총 잔액을 관리합니다. 반면 interestRate연산 타입 프로퍼티로서 고정된 이자율을 제공합니다.

메모리에서의 특징

타입 프로퍼티는 타입 자체에 저장되기 때문에 인스턴스를 생성하지 않아도 접근할 수 있습니다. 이와 같은 프로퍼티는 앱의 전역 상태를 유지하거나 모든 인스턴스가 공유해야 하는 값을 관리할 때 유용합니다. 저장 타입 프로퍼티는 프로그램이 시작될 때 메모리에 할당되고 종료될 때 해제됩니다.

프로퍼티 간의 메모리 차이 요약

저장 프로퍼티
인스턴스별로 고유하게 메모리에 저장되며 인스턴스가 생성될 때 할당되고 소멸할 때 해제됩니다.
연산 프로퍼티
값을 메모리에 저장하지 않고 매번 계산을 통해 값을 반환하므로 메모리에서 저장 공간을 차지하지 않습니다.
타입 프로퍼티
타입 프로퍼티는 인스턴스가 아닌 타입 자체에 저장되며 앱 전반에 걸쳐 공유됩니다. 저장 타입 프로퍼티는 프로그램이 실행될 때 메모리에 할당됩니다.

언제 어떤 프로퍼티를 사용할까?

저장 프로퍼티
인스턴스마다 고유의 값을 유지해야 한다면 저장 프로퍼티를 사용합니다. 예를 들어, 사용자 정보(이름, 나이 등)를 저장할 때 사용합니다.
연산 프로퍼티
특정 값을 다른 프로퍼티로부터 계산해야 한다면 연산 프로퍼티가 적합합니다. 예를 들어, 사각형의 면적을 계산할 때 사용합니다.
타입 프로퍼티
모든 인스턴스가 공유해야 하거나 전역적으로 관리해야 하는 값이 있을 때 타입 프로퍼티를 사용합니다. 예를 들어, 은행의 총 잔액이나 고정된 설정 값 등을 관리할 때 사용합니다.

마무리

저장, 연산, 타입 프로퍼티는 각각의 역할과 메모리에서의 특징이 다릅니다. 올바른 프로퍼티를 선택함으로써 메모리 효율성과 코드의 가독성을 높일 수 있습니다.