본문 바로가기

면접질문정리/Swift문법

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

1. 가장 큰 차이점은 struct와 enum은 값 타입이고 class는 참조 타입입니다.

이것을 확인할 수있는 가장 직관적인 방법은 인스턴스를 할당해보면 된다.

 

상황 - A 인스턴스를 생성하고 값을 할당한다. 이를 B인스턴스에 할당을 한다.

참조타입 - A와 B의 인스턴스의 값이 동일하게 나온다.

값타입 - A와 B의 인스턴스의 값이 다르게 나온다.

 

다른 이유는 참조타입은 값의 주소를 저장하고 값타입은 값을 복사하여 저장하기 때문이다.

 

클래스는 A라는 인스턴스의 주소값을 B에 전달한거기 때문에 A,B 모두 값을 불러올때는 주소를 통해서 값을 불러온다.

그렇기 때문에 값이 같게 나오는 것이다.

구조체는 A라는 인스턴스의 값을 B라는 인스턴스에 복사하여 값을 전달 했기때문에 각각 다른 데이터를 가지게된다.

 

유사한 예시를 들어보자

나는 주식정보를 나의 블로그에 매일 기록을 한다고 가정을 해보자. 그런데 A라는 친구에게서 연락이왔다. 쿼카야 나 주식공부시작해보려고하는데 팁 좀알려줄 수있어 ? A 친구의 질문에 나는 나의 블로그에 올려놓은 주식공부팁 글의 주소를 카톡으로 보내주었다.

그런데 재테크 붐이라서 그런지 나의 베스트 프렌드인 B에게도 주식공부를 하고자 팁을 물어보는 연락을 받았다. 내가 자주만나는 베스트프렌드라서 B에게는 내가 직접 팁을 종이에 엑기스만 적어서 직접 전달해주었다.

 

A에게는 나의 블로그 원본인 블로그 주소를 보내주었고, B에게는 글을 그대로 종이에 적어서 전달해주었다.

 

나중에 내가 주식공부관련팁의 내용을 추가한다고 가정해보자. 블로그에 내용을 추가하고 다시 저장을 하였다.

이때 A와 B의 데이터 업데이트가 다르다는 것을 알 수 있다.

왜냐하면 A에게는 원본의 블로그 주소를 전달했고 B에게는 업데이트 이전에 정보를 종이에적어서 주었기때문에 내용이 다를 수 밖에없다.

 

이러한 차이점으로 참조와 값타입의 특징을 생각해 볼 수 있을것같다.

 

2. enum, struct와는 다르게 class만 상속의 기능을 가지고 있다.

3. struct와 class는 저장프로퍼티를 생성할 수 있는데 enum은 저장프로퍼티를 생성할 수 없다.

4. enum은 연관 값을 그룹화하는 용도이며 다른타입과 다르게 연산프로퍼티내 switch기능을 사용할 수 있다.

 

# 알게된 정보

MVC패턴의 Model 같이 많은 양의 데이터를 다룰 때는 값타입으로 사용하는 것이 좋을 수 있다. 왜냐하면 데이터들의 꼬임으로 스레드가 발생하는 사이드 이펙트를 줄일 수 있기 때문이다.

 

 

# Reference