iOS. class, struct, enum의 차이를 설명하시오.

sanghee·2021년 12월 29일
0

👩‍💻면접 스터디

목록 보기
18/22
post-thumbnail
post-custom-banner

매주 진행하는 면접스터디에서 아래의 질문들에 대한 정리를 모은 글입니다.
https://github.com/JeaSungLEE/iOSInterviewquestions
swift struct와 class와 enum의 차이를 설명하시오.

📌class, struct, enum의 공통점

프로퍼티나 메서드를 정의할 수 있다.

서브스크립트를 정의할 수 있다.

이니셜라이저를 정의할 수 있다.

익스텐션을 통해 확장할 수 있다.

특정 프로토콜을 준수할 수 있다.

📌클래스(class)

참조 타입으로 값을 전달시 참조(주소, 포인터와 유사)가 전달된다.

상속이 가능하다.

ARC로 참조 횟수를 계산하여 메모리를 관리한다.

타입캐스팅은 클래스의 인스턴스에만 가능하다.

📌구조체(struct)

값 타입이다.

데이터를 전달할 때 값을 복사하여 전달한다(처음에는 참조하다가, 값이 변경되면 그때 복사를 한다).

Swift의 기본 데이터 타입은 모두 구조체로 구성되어 있다. 비효율적이라고 생각할 수 있으나, 스위프트는 꼭 필요한 경우에만 진짜 복사를 하며 효율적으로 처리한다.

메모리의 Stack 영역에 저장되며, 일정 크기가 넘으면 Heap에 저장된다.

📌열거형(enum)

상속이 불가능하다.

연관된 값의 집합을 정의한다.

RawValue를 통해 원시값을 지정할 수 있다.

📌언제 구조체를 쓸까?

애플은 다음 조건 중 하나 이상에 해당한다면 구조체를 사용하는 것을 권장한다.

  • 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
  • 캡슐화된 값을 참조하는 것보다 복사하는 것이 합당할 때
  • 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
  • 다른 타입으로부터 상속을 받거나 자신을 상속할 필요가 없을 때

이런 몇 가지 상황을 제외하고 클래스로 정의하여 사용한다.

profile
👩‍💻
post-custom-banner

0개의 댓글