본문 바로가기
Swift Study

Class vs Struct

by 창브로 2024. 2. 19.
728x90

다들 Class와 Struct에 대해 많이 들어보셨을 텐데 막상 말하려면 잘 못하게 되어서 오늘 확실하게 알아보고 기록하려 합니다!

Class와 Struct의 주요 차이점은 무엇일까요??

주요한 차이점은 Class는 참조 타입(상속 가능)이고 ARC를 사용하여 메모리 관리를 하고 Struct는 값 타입(상속 불가)!!

코드를 통해 가장 큰 차이점인 참조 타입 vs 값 타입을 알아봅시다!

 

먼저 Class를 생성하고 클래스의 인스턴스들을 생성하여 Class의 값들을 바꿔보겠습니다.

 

broClass에서 test를 4로 변경해 주고 broClass2에서 test를 2로 변경해 주었습니다.

하지만 모든 Class에서 test의 값은 2로 변경된 것을 확인할 수 있습니다. 😇

 

이로 인해 참조 타입은 인스턴스의 값을 할당해도 참조된 클래스 자체의 값이 변경되는 것을 알 수 있죠.

Class는 참조 타입이기 때문에 복사 개념이 아닌 참조 개념인 것을 알 수 있습니다.

 

이제 Struct도 확인해 보겠습니다!

 

만약 참조 타입에서 이런 식으로 값을 변경해 주었다면 모든 값이 1000으로 print 되었겠죠?

하지만 값 타입인 Struct로 코드를 작성하였기 때문에 모든 Struct는 값이 다르게 출력되는 것을 볼 수 있습니다.

 

값 타입은 변수에 구조체(Struct)를 할당하여 새로운 인스턴스를 만들어주면,

매번 새로운 메모리가 할당되어 매번 새로운 구조체가 할당됩니다.

 

이로 인해 값 타입은 인스턴스의 값을 할당해도 각각의 인스턴스가 고유의 값을 가지는 것을 알 수 있습니다.

 

이제 Class와 Struct의 공통점과 차이점들을 자세하게 알아볼까요?

🔥 Class와 Struct의 공통점

- extension을 사용하여 기능을 확장할 수 있습니다.

- 내부 값에. 을 사용하여 접근할 수 있습니다.

- 함수를 선언할 수 있습니다.

 

🔥 Class와 Struct의 차이점

📱Class

- 참조 타입

- ARC로 메모리를 관리합니다.

- 상속 가능합니다.

- deinit을 사용하여 인스턴스 메모리할당을 해제할 수 있습니다.

- 타입캐스팅을 통해 클래스의 인스턴스 타입을 확인할 수 있습니다.

- 새로운 변수에 Class를 할당하면 복사를 하는 것이 아니라 Class를 참조하고 있습니다.

- Heap에 저장

 

📱Struct

- 값 타입

- 상속 불가능합니다.

- 새로운 변수에 구조체를 할당할 때마다 새로운 구조체가 할당됩니다.

- Stack에 저장

 

 

이렇게 다양한 차이점들이 있는데 여기서 중요한 저장공간에 대해 얘기해 봅시다 🙂

Struct는 Stack에 저장되기 때문에 상대적으로 Heap에 저장되는 Class보다 할당/해제가 빠릅니다.

그래서 저는 인스턴스를 복사했을 때 같은 객체를 가리키게 하고 싶거나 상속이 필요한 경우가 아니면 Struct를 쓰려고 노력하고 있습니다!

 

다음 포스팅에선 ARC와 struct와 class의 메모리 관리 방법에 대해 알아보겠습니다.

수고하셨습니다🙇🏻‍♂️

'Swift Study' 카테고리의 다른 글

Error Handling  (0) 2024.02.23
Optional  (0) 2024.02.21
weak, unowned  (0) 2024.02.20
Strong Reference Cycle  (0) 2024.02.20
ARC  (0) 2024.02.20