들어가기 전
오늘은 Swift 문법의 기초인 Struct, Class, Enum의 차이점에 대해 알아보겠다.
먼저 이 셋 개념에 대해 알아보고 난 뒤에 차이점을 따져보기로 하자.
Class
- 일반적으로 단일 상속이 가능하지만, 프로토콜을 사용하면 다중 상속도 가능하다.
- 참조 타입(Reference Type)
- 타입 캐스팅과 관련된 기능과, deinit등의 기능을 가질 수 있다.
- 메모리의 Heap영역에 존재한다.
참조타입?
데이터의 크기가 크고 가변적이기에 동적으로 관리 되는 메모리의 힙에 생성되는 것을 말한다.
Struct
- 상속이 불가능
- Extension 등 사용이 가능
- 값 타입(Value Type)
- 메모리의 Stack 영역에 존재 (값 타입이기 때문에)
Enum
- 상속이 불가능
- 값 타입(Value Type)
- 열거형 자체가 하나의 데이터 타입이다.
- 열거형의 case 하나하나 전부 유의미한 값으로 취급하게 된다.
공통점과 차이점
공통점
- 메서드 정의 가능
- 초기화 블록 정의 가능
- 프로토콜 구현 가능
- 확장(익스텐션) 구문 사용 가능
- 서브스크립트 정의 가능
- 프로퍼티 정의 가능
차이점
- Struct, Enum은 Value Type, Class는 Reference Type 이다.
- Struct, Enum은 상속이 불가능하다.
- Struct, Enum은 AnyObject로 타입 캐스팅이 불가능하다.
- Struct, Enum은 생성자를 구현하지 않을 시 기본 이니셜라이저를 사용할 수 있다.
- Class는 Reference Counting 으로 메모리 관리가 가능하다.