lunchScreen/Interview_Questions

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

Opened this issue · 5 comments

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

struct 와 enum은 값 타입의 인스턴스를 가지고, class 는 reference 타입의 인스턴스를 가집니다.

class 는 상속이 되지만 struct 와 enum은 상속이 불가능하다는 차이점이 있습니다. class 와 struct의 공통점으로는 서로 다른 타입을 하나로 묶어 새로운 타입을 만들 수 있다는 점과 extension을 사용할 수 있다는 점이 있습니다.

또한, 스위프트에서의 enum은 case 그 자체가 고유의 값으로, 값을 매칭 시킬 필요가 없다는 특징이 있습니다.

struct, class, enum 모두 여러 값과 속성을 하나로 그룹화하여 관리할 수 있다는 특징을 가졌습니다. 다만 class는 참조타입이지만, struct와 enum은 값타입이라는 점에서 가장 큰 차이를 보입니다.

이어서 각 키워드들의 대표적인 특징을 기준으로 설명해보겠습니다. class는 상속이 가능하다는 점이 가장 대표적인 특징입니다. 때문에 상속을 통해 설계를 진행하려 할 경우 class 사용이 필수적입니다.

다음으로 struct는 class와 유사한 기능을 수행하면서도 값이 복사된다는 것이 특징입니다. 때문에 참조나 상속은 필요없이 연관된 값들을 묶어두는 것이 주목적이라면 struct를 사용하는 것이 좋습니다.

마지막으로 enum은 case가 나뉘어 분류되어 저장된다는 것이 특징입니다. 코드의 가독성도 높아지고 컴파일 타임에 에러 확인이 가능하기 때문에 많이 쓰입니다. 다만 새로운 case를 추가할때마다 많은 코드를 수정해야할 수 있기 때문에 확장성이 떨어진다는 단점이 있습니다.

cf. 16 byte 이상의 크기를 가지면 구조체도 힙 영역에 생성됨으로써 참조타입이 될 수 있습니다. (https://sihyungyou.github.io/iOS-class-struct-enum/)

struct와 class, enum은 모두 값이나 속성을 하나로 묶어주는 역할을 한다는 공통점이 있습니다.

셋에는 몇가지 차이점도 존재합니다. 먼저 class와 struct에는 생성자가 있지만 enum에는 생성자가 없습니다. 또한 class는 상속이 되지만 struct와 enum은 상속이 되지않습니다.

마지막으로 struct와 enum은 값 타입이고 class는 참조 타입이라는 차이점이 있습니다. 하지만 struct가 항상 값 타입이 되는 것은 아닙니다. struct도 크기가 16bytes 이상이 되면 힙 영역에 생성되는 참조 타입이 됩니다.

struct와 enum은 값 타입이고, class는 참조타입입니다.
struct와 class는 생성자가 있지만, enum은 생성자가 없습니다.
struct와 enum은 상속이 불가능 하지만, class는 상속이 가능합니다.

struct class enum
Value Type
상속 X
protocol 준수 O
stored property O
init O
extension O
Reference Type
상속 O
protocol 준수 O
stored property O
init O
extension O
Value Type
상속 X
protocol 준수 O
stored property X
init X
extension O
  • 구조체는 항상 값타입인가?
    • 아니다. 구조체 내에 참조타입 변수가 있다면, 다르게 동작한다