티스토리 뷰

Swift

[Swift] 클래스와 구조체

Hani_Levenshtein 2021. 1. 10. 16:48

클래스와 구조체는 함수나 자료형을 선언하고 사용하는 방식이 비슷해보이지만 몇 가지 차이점들이 존재합니다.

 

 

 


공통점

 

구조체와 클래스는 다른 자료형이나 타입들을 묶어서 하나의 새로운 타입으로 사용할 수 있습니다.
내부에 프로퍼티와 메서드를 정의할 수 있고 서로 문법이 유사합니다.


할당되는 영역

 

class

인스턴스를 생성할 때 Heap영역에 저장됩니다.

struct

인스턴스를 생성할 때 Stack영역에 저장됩니다. 


타입

 

class

클래스는 파라미터로 데이터 전달 시 객체를 가리키고 있는 주소를 복사하는 참조 타입입니다.

주소를 가져오기 때문에 원본에서의 변화가 복사본에서의 변화로 이어집니다.

물론 한 복사본의 변화도 원본이나 다른 복사본의 변화를 이끌어냅니다.

Multi-threaded 환경에서 한 thread가 데이터를 수정하면 다른 thread가 이용중인 데이터에 영향을 줄 수 있기 때문에 이런 경우에는 참조 타입인 클래스를 사용하는 것은 적합하지 않은 방식입니다.

 

struct

구조체는 파라미터로 데이터 전달 시 해당 객체가 가지고 있는 값을 복사하는 값 타입입니다.

값을 가져오기 때문에 데이터를 변화시킨다고 해서 다른 데이터에 영향을 주지는 않습니다.

다만, 클래스는 주소 하나만 복사해가지면 되지만 구조체는 복사할 크기만큼의 자원을 메모리 공간에서 소모하기 때문에 스택 오버플로우가 발생할 수 있는 단점이 존재합니다.


상속

상속은 객체 지향 프로그래밍의 대표적인 장점입니다. 상속은 클래스와 구조체를 가르는 특징 중 하나입니다.

 

Class

하나의 클래스는 하나의 클래스만 단일 상속 가능

 

Struct

구조체는 enum이라는 타입과 동일하게 객체 지향 프로그래밍의 장점인 상속이 불가능 

 


 

  • 해당 모델을 serialize 해서 전송하거나 파일로 저장할 경우가 발생하면 클래스 사용
  • 해당 모델이 Objective-C에서도 사용되어야 한다면 클래스 사용

 

'Swift' 카테고리의 다른 글

[Swift] 인스턴스  (0) 2021.01.16
[Swift] 프로퍼티의 종류  (0) 2021.01.13
[Swift] 메서드  (0) 2021.01.13
[Swift] 옵셔널  (0) 2021.01.12
[Swift] 객체 지향 프로그래밍  (0) 2021.01.09
댓글