struct
- 값 타입 (데이터를 전달할 때 값을 복사하여 전달)
- 상속 불가
- 메모리에서 자동제거 ⇒ 함수 종료(지역변수, 매개변수), 프로그램 종료(static, 전역변수)
- 인스턴스 상수로 선언시 저장속성 전부 상수로 선언
- 메서드 내에서 속성 변경 불가능
- 소멸자 없음
class
- 참조 타입 (데이터를 전달할 때 값의 메모리 위치를 전달)
- 상속 가능
- ARC로 메모리 관리
- 인스턴스 상수로 선언해도 가르키는 let/ var 선언에 따름
- 메서드 내에서 속성 변경 가능
- 소멸자 있음
- 객체 대신 인스턴스라는 용어 사용
enum
- 한정된 사례(case) 안에서 정의할 수 있는 타입 (요일, 성별 ..)
- 케이스가 선택가능한 가짓 수로 정해져 있을 때 정의 ⇒ 다른것 넣으면 타입 에러
- 상속 불가능
공통점
- 개발자가 마음대로 만들어서 쓸 수 있는 타입 (사용자 정의 타입)
- 키워드 + 이름 + {}
- 프로퍼티와 함수를 선언할 수 있음 (단, enum은 저장 프로퍼티 선언 불가)
- 서브스크립트 정의가능
- extenstion을 통해 확장 가능
- 프로토콜 채택 가능
차이점
1. 타입 (값 타입, 참조 타입)
class: 참조 타입
struct: 값타입
enum: 값타입
값 타입
- 값 타입은 값을 다른 공간에 새롭게 복사해서, 복사된 인자를 전달
- 메모리에서 자동 제거 ( 지역변수, 매개변수 → 함수 종료 / 전역 변수 → 프로그램 종료)
- 스택에 값이 저장됨
참조 타입
- 참조 타입은 데이터를 전달할 때 값의 메모리 위치(주소)를 전달
⇒ 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 줌 - ARC로 관리
- 힙에 값이 저장됨 (주소는 스택에 저장)
2. 메모리 관련
class: 힙
struct: 스택
enum: 스택
3. 값 복사 시
class: 저장된 주소를 전달
struct: 복사본을 생성
enum: 복사본을 생성
4. 선언 시 저장속성
class: 기존 선언한 let/var에 따름
struct: let으로 선언시 모두 상수로 선언
enum: X
5. 소멸자
class: O
struct: X
enum: X
6. 상속
class: O
struct: X
enum: X
'iOS > Interview Questions' 카테고리의 다른 글
[iOS] class의 성능을 향상 시킬 수 있는 방법 (0) | 2023.02.14 |
---|---|
[iOS] 앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있는가? (0) | 2022.10.20 |
[iOS] @Main에 대해 (0) | 2022.10.20 |
[iOS] 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체 (0) | 2022.10.13 |
[iOS] App thinning(앱 시닝) 이란? (0) | 2022.10.13 |