Swift에서 Class와 Struct의 차이점 다시 정리

sonny·3일 전
0

TIL

목록 보기
132/135

Swift에서는 데이터를 저장하고 관리하는 데 classstruct를 사용할 수 있다.

하지만 두 가지는 메모리 관리 방식과 동작이 다르기 때문에 상황에 맞게 선택해야 한다.

1. 주요 차이점

특징ClassStruct
메모리 할당HeapStack
참조 방식참조 타입 (Reference Type)값 타입 (Value Type)
상속가능불가능
복사 방식동일 객체를 참조 (Call by Reference)값 자체를 복사 (Call by Value)
Mutabilitylet으로 선언해도 내부 속성 변경 가능let으로 선언하면 내부 속성 변경 불가
deinit 사용가능불가능

2. 참조 타입 vs 값 타입

  • Class참조 타입이므로 인스턴스를 변수에 할당하거나 함수에 전달하면 같은 객체를 가리킨다.
  • Struct값 타입이므로 복사본을 생성하며, 변경이 원본에 영향을 미치지 않는다.
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

struct Animal {
    var name: String
}

var person1 = Person(name: "Alice")
var person2 = person1 // 같은 객체를 참조
person2.name = "Bob"
print(person1.name) // "Bob"

var animal1 = Animal(name: "Dog")
var animal2 = animal1 // 값 복사
animal2.name = "Cat"
print(animal1.name) // "Dog"

3. 언제 Class를 사용하고 Struct를 사용할까?

Class를 선택해야 할 경우

  • 객체 간 공유가 필요할 때 (예: 싱글턴 패턴, 데이터 모델링)
  • 상속이 필요한 경우
  • 메모리 효율적 관리가 중요한 경우 (Heap 사용)
  • deinit을 활용해 객체 해제 시점에 특정 동작을 수행해야 할 때

Struct를 선택해야 할 경우

  • 불변성(immutability)을 유지해야 하는 데이터 (예: 좌표, 크기, 색상 등)
  • 스레드 안전성이 필요한 경우 (값 타입은 경쟁 조건이 적다)
  • Swift의 기본 데이터 타입과 유사한 동작이 필요한 경우

4. 결론

  • struct는 값 타입이므로 복사할 때 독립적인 객체를 만든다. 이로 인해 상태 관리가 간편하고 스레드 안전성이 높다.
  • class는 참조 타입이므로 같은 객체를 공유할 수 있어, 객체 간 상태 변경이 필요할 때 적합하다.
  • Swift에서는 불필요한 객체 공유를 방지하기 위해 가능하면 struct를 기본적으로 사용하고, 필요할 때 class를 선택하는 것이 좋다.
profile
iOS 좋아. swift 좋아.

0개의 댓글

관련 채용 정보