[iOS][Swift] 클래스(Class)와 구조체(Struct)의 차이

Jay·2023년 8월 24일
0

iOS

목록 보기
26/47

Swift에서 클래스(class)와 구조체(struct)는 데이터를 캡슐화하고 모델링하는 핵심 도구입니다. 둘은 많은 공통점을 가지고 있지만, 서로 다른 용도와 특징을 가지고 있습니다. 이 포스트에서는 둘 사이의 주요 차이점을 살펴보겠습니다.

1. 참조 vs 값 타입

클래스(Class)

  • 참조 타입(Reference Type): 클래스의 인스턴스를 다른 변수나 상수에 할당하거나 함수에 전달할 때, 이는 참조로 전달됩니다. 따라서, 한 인스턴스를 여러 변수가 참조할 수 있습니다.

구조체(Struct)

  • 값 타입(Value Type): 구조체 인스턴스는 변수나 상수에 할당되거나 함수에 전달될 때 사본이 전달됩니다. 각 변수는 독립된 별도의 데이터를 가집니다.

2. 상속

클래스(Class):

  • 클래스는 상속을 지원합니다. 이를 통해 부모 클래스의 속성과 메서드를 상속받을 수 있습니다.

구조체(Struct):

  • 구조체는 상속을 지원하지 않습니다.

3. 타입 캐스팅

클래스(Class):

  • 클래스는 타입 캐스팅을 지원합니다. 이는 실행 시간에 객체의 타입을 확인하거나 다른 클래스 타입으로 변환할 때 유용합니다.

구조체(Struct):

  • 구조체는 타입 캐스팅을 지원하지 않습니다.

4. 디이니셜라이저

클래스(Class):

  • 클래스는 디이니셜라이저를 지원합니다. 인스턴스가 소멸되기 전에 수행할 작업을 정의할 수 있습니다.

구조체(Struct):

  • 구조체는 디이니셜라이저를 지원하지 않습니다.

5. 참조 카운팅

클래스(Class):

  • 클래스는 Automatic Reference Counting(ARC)를 사용하여 인스턴스의 메모리를 관리합니다.

구조체(Struct):

  • 구조체는 참조 카운팅이 필요하지 않습니다. 구조체는 값 타입이므로 메모리 관리에 ARC를 필요로 하지 않습니다.

6. 가변성

클래스(Class):

  • 클래스 인스턴스의 프로퍼티는 클래스 인스턴스 자체가 변수로 선언되었을 때 변경될 수 있습니다.

구조체(Struct):

  • mutating 키워드를 사용하여 구조체의 메서드 내에서 해당 구조체의 프로퍼티를 수정할 수 있습니다.

7. 사용 사례

클래스(Class):

  • 복잡한 상속 구조가 필요하거나, 여러 참조를 통해 같은 인스턴스를 공유해야 할 때 주로 사용됩니다.

구조체(Struct):

  • 간단한 데이터 구조를 표현하거나, 데이터의 사본이 필요할 때 주로 사용됩니다. 예를 들면, 좌표, 설정 값, 다른 간단한 값들을 표현할 때 유용합니다.

이렇게 클래스와 구조체는 Swift에서 데이터를 표현하는 데 있어 각각의 장점을 가지고 있습니다. 개발 시에는 해당 데이터의 성격과 필요한 기능에 따라 적절한 선택을 해야 합니다. Swift 커뮤니티에서는 가능하면 구조체를 우선적으로 사용하는 것을 권장하며, 참조 타입이나 상속 등의 클래스의 특별한 기능이 필요할 때만 클래스를 사용하도록 권장하고 있습니다.

profile
Junior Developer

0개의 댓글