면접때 자주하는 질문중 하나인
클래스와 구조체의 차이는 무엇인가요?
위 질문에 단순하게 대답한다고하면
'클래스는 복사를 할경우 참조타입이며, 구조체는 값자체를 복사한다.' 라고 대답할 수 있다.
한줄요약은 이렇지만 우리는 그차이를 깊게 이해하며, 공부한 토대로 성능 개선이 가능한 개발을 진행해야한다.
우선 구조체와 클래스의 차이는
| Class(클래스) | Struct(구조체) | |
| 상속 여부 | O | X |
| 타입캐스팅 | O | X |
| 참조횟수 계산(ARC) | O | X |
그렇다면, 계속 클래스는 참조, 구조체는 값타입이라고 하는데 도대체 어떠한 뜻인걸까?
Struct는 값 자체를 복사하여 yoonds는 minsu의 인스턴스를 그대로 복사하여 몸무게를 복사하는데 성공하였다.
struct MyInfo {
var weight: Int
}
// 초기화 0
var minsu: MyInfo = MyInfo(weight: 0)
// 민수의 몸무게 할당 65
minsu.weight = 65
// 윤즈는 민수의 몸무게를 따라하고 싶음
var yoonds: MyInfo = minsu
print("minsu: ", minsu.weight) // 65
print("yoonds: ", yoonds.weight) // 65
그렇다면 Class는 어떨까?
해당라인 2) 에서 민수에게 65를 할당하고 윤즈의 몸무게를 확인해보니 65가 찍혀있다.
아니왜 민수에게 65를 할당했는데 윤즈의 몸무게가 65가 되어있지?
해당라인 1)에서 참조주소를 복사했으므로
둘다 같은주소를 바라보고 있는것, 값이 변경되면 일심동체로 움직이고 있는 것이다.
class MyInfo {
var weight: Int
// 클래스는 초기화가 init이 필요하다.
init(weight: Int){
self.weight = weight
}
}
// 초기화 0
var minsu: MyInfo = MyInfo(weight: 0)
// 해당라인 1)
// 윤즈는 민수의 몸무게를 따라하고 싶음
var yoonds: MyInfo = minsu
print("minsu: ", minsu.weight) // 0
print("yoonds: ", yoonds.weight) // 0
// 해당라인 2)
// 민수의 몸무게 할당 65
minsu.weight = 65
print("yoonds: ", yoonds.weight) // 65
그림으로 좀더 쉽게 표현하면 이렇다.

'Swift(IOS)' 카테고리의 다른 글
| [내용정리] Swift - StackView사용법과 속성들 (1/2) (0) | 2022.07.14 |
|---|---|
| [내용정리] Swift - 메모리 관리 Weak, Strong, Unowned? (0) | 2022.02.24 |
| [내용정리] Swift - 옵셔널(Optional)이란? (0) | 2022.02.15 |
| [내용정리] Swift - closure(클로저)란? (2/2) (0) | 2022.02.08 |
| [내용정리] Swift - JsonArray와 JsonObject의 차이 (0) | 2022.02.03 |