반응형
사용자 정의 타입에서 나온 3가지 종류 기억하시나요?
구조체, 클래스, 열거형 세 종류입니다.
이 세 종류를 타입으로 분류하면 다음과 같습니다.
값 타입 : 구조체, 열거형 참조 타입 : 클래스 |
그리고 참조타입은 값 타입과 달리,
상속이 가능하고 deinit 및 참조횟수 계산이 가능합니다.
더불어 인스턴스에 타입 캐스팅이 가능합니다.
그리고 차이점을 추가로 더 서술해 보겠습니다.
struct One{
var value = 1
}
let str = One()
var str2 = str
str2.value = 2
print(str) // 1
print(str2) // 2
class One{
value = 1
}
let cla = One()
let cla2 = cla
cla2.value = 2
print(cla.value) //2
print(cla2.value) //2
구조체와 클래스의 차이가 보이시나요?
구조체의 경우 str2가 str을 복사했지만, 별도의 메모리에 할당된 값입니다.
하지만, 클래스의 경우 cla2는 cla를 참조하게 되기 때문에 값이 같이 변경되는 것이죠.
풀어서 설명하자면, 구조체는 각자 다른집에 사는 사람이 같은 가구를 산 것이고,
클래스의 경우는 cla와 cla2가 같은 집에 사는데 cla2가 가구를 하나 들여온 거라 할 수 있겠네요.
애플 공식 문서에 나와있는 내용도 발췌하겠습니다.
다음중 하나이상의 조건에 해당하면 클래스 대신 구조체 사용을 권장한다고 합니다.
- 연관된 간단한 값의 집합을 캡슐화 하는 것만이 목적일 때
- 캡슐화된 값이 참조되는 것보다 복사되는 것이 합당할 때
- 구조체에 저장된 프로퍼티가 값 타입이며 참조되는 것보다 복사되는 것이 합당할 때
- 다른 타입으로부터 상속받거나 자신이 상속될 필요가 없을 때
공부하다가 아리송해서 별도로 작성해 보았습니다 ^^
공부에 도움을 준 사이트들
전반적인 공부 가이드라인
애플 공식 스위프트 언어 가이드 번역사이트
반응형
'Language > Swift' 카테고리의 다른 글
Swift 프로퍼티 타입들 (0) | 2021.03.12 |
---|---|
Swift 클로저 (0) | 2021.03.11 |
Swift 사용자 정의 타입 - enum (0) | 2021.03.11 |
Swift 사용자 정의 타입 - Class (0) | 2021.03.11 |
Swift 사용자 정의 타입 - Struct (0) | 2021.03.11 |