Class, Struct, Enum을 비교해보면 Class만 유일하게 참조타입이고 상속이 가능하다.
구조체는 언제 사용할까?
Swift의 많은 기본 데이터 타입들이 구조체로 이루어져 있고, 보다시피 Swift는 구조체와 열거형을 클래스형보다 선호한다. 하지만 Apple 프레임워크는 대부분 클래스를 사용하기 때문에, Apple 프레임워크 사용시 구조체/클래스 선택은 우리의 몫이다. 상황에 따라 적절히 사용하기!
public struct Int
public struct Double
public struct String
public struct Dictionary<Key: Hashable, Value>
public struct Array<Element>
public struct Set<Element: Hashable>
Value | 데이터를 전달할 때 값을 복사하여 전달
Reference | 데이터를 전달할 때 값의 메모리 위치를 전달
아래의 예제를 보자.
struct ValueType {
var property = 1
}
class ReferenceType {
var property = 1
}
struct는 Value 타입이므로 값을 복사하여 전달한다. 따라서 ②는 ①을 똑같이 복사한 별도의 인스턴스
가 된다. 때문에, ②의 프로퍼티 값을 변경해도 ①의 프로퍼티 값에는 영향이 없다.
var first = ValueType() // 첫번째 구조체 인스턴스 (①)
var second = first // 두번째 구조체 인스턴스 (②)
second.property = 2
print(first.property)
print(second.property)
class는 Reference 타입이므로 값의 메모리 위치를 전달한다. 따라서 ④의 프로퍼티 값을 변경하면 ③과 ④가 같은 위치를 가리키고 있기 때문에 ③의 프로퍼티를 출력해보면 변경된 값이 출력된다.
var third = ReferenceType() // 첫번째 클래스 인스턴스 (③)
var fourth = third // 두번째 클래스 인스턴스 (④)
fourth.property = 2
print(third.property)
print(fourth.property)
야곰의 스위프트 기본 문법 강좌를 수강하며 작성한 내용입니다.