Swift)struct와 class는 정말 다를까?

Featured image

@

컴퓨터 입장에서 struct와 class를 구분할까?

개발을 하다보면 struct와 class는 너무 비슷하다. 특히 swift에선 class가 상속을 받을 수 있다는 것 빼고는 거의 같다. 그러다보니 자연스레 struct와 class는 언제 써야하냐라는 질문이 나온다.

가정 - 사실 struct와 class는 같은 것이 아닐까?

C는 언어들 중에서 컴퓨터와 가장 가까운 언어인데, C에선 struct가 있고 class가 없다. 그 뜻은 사실 class는 존재하지 않고 class를 struct로 변환하여 전달해준다는 의미가 아닐까? 고로 그 둘은 컴퓨터 입장에서 비슷하게 작동시킨다. 하지만 다른 언어에서 문제가 되는 것은 컴파일러 단에서 제약을 두었기 때문이다.

이를 뒷바침해주는 근거를 찾아봤는데 C++ 위키피디아뿐… 7.4를 확인해보면 둘은 같다고 표시되어 있긴하다.

그렇다면 언제 struct를 또는 class를 써야할까?

애플 가이드라인에서 다음 조건 중 하나 이상에 해당된다면 구조체를 사용하기를 권한다.

  1. 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
  2. 캡슐화된 값이 참조되는 것보다 복사되는 것이 합당할 때
  3. 구조체에 저장된 프로퍼티가 값 타입이며 참조되는 것보다 복사되는 것이 합당할 때
  4. 다른 타입으로부터 상속받거나 자신이 상속될 필요가 없을 때
  5. 예시 : 좌표계. x, y 좌표 등을 표현하고 싶을 때 Int 타입으로 x, y 프로퍼티를 가질 수 있으며, 물건의 크기를 표현하고자 할 때는 부동소수 표현인 Double 또는 Float 타입을 사용하여 width, height, depth 등으로 묶어 표현해 줄 수 있습니다.

이건 내가 생각했을 때 간단한 기준

멤버 함수(메서드)를 사용할 땐 class를 써야한다. 데이터만 딱 모아 놓는 것만 struct를 쓰자

위와 같이 정의했을 시 struct의 장점

POD(Plain Old Data), assignment(대입)를 했을 때 memcpy를 할 수 있다. dynamic memory allocation(동적 메모리 할당)된 것도 없고, 객체안에서 메모리를 지워줄 것이 없다. 고로 모든 구조체를 대입해도 문제없겠다. 라고 생각할 수 있다.