iOS
[Swift] Struct와 Class 비교하기
Sueaty
2021. 5. 6. 15:25
Swift & Struct와 관련된 면접 질문
- Struct와 Class의 차이에 대해 설명하고 언제 각각을 쓰면 좋을지 설명해보세요
- Struct가 무엇이고 어떻게 사용하는지 설명하시오
struct와 class의 비교는 많은 interview referene에서 찾아볼 수 있기 때문에 더 잘 알아야 한다는
강박이 생기는 것 같습니다.
오늘은 꼬리에 꼬리를 물 수 있는 Struct와 Class에 대해 다뤄보겠습니다.
Struct & Class
Struct | Class | |
정의 | 타입이 다른 데이터를 하나로 묶는 자료구조 | 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀 |
타입 | 값 타입 (value type) | 참조 타입 (reference type) |
메모리 공간 | stack | heap |
공통점 | 내부에 property, function, subscript, initializer를 둘 수 있음 | |
extension 키워드를 통해 확장 가능 | ||
protocol을 따를 수 있음 | ||
generic 사용 가능함 | ||
차이점 | ||
복사 방식 | 함수에 인자로 전달 / 변.상수에 배정(assigned) / 초기화 될 때 내용이 복사가 일어남 A → B A → C |
함수에 인자로 전달 / 변.상수에 배정(assigned) / 초기화 될 때 기존의 data를 공유 A ← B ↖ C |
let 사용 | 생성한 객체 자체가 상수가 되어 내부 property 변경 불가 error: "Cannot assign property: ____ is a 'let' constant" |
- 내부 property 변경 가능 - reassign 불가 ( let myClass = A() let yourClass = A() myClass = yourClass 안됨 ) |
var 사용 | 내부 property들을 mutating function을 통해 변경 가능 | - 내부 property 변경 가능 - reassign 가능 |
다중스레드 환경 |
memory issue 들을 제거하는데 도움이 됨 ↣ deadlock ↣ race condition (class처럼 하나의 자료를 모두 참조하고 있는게 아니라 복사가 이루어진 것이니 각 스레드에서 처리 가능) |
- |
상속 | 불가능 | 가능 |
deinit | 불가능 (애초에 deinit은 ref type 용) | 가능 |