SwiftUI의 View 프로토콜이 구조체인 이유

DG
2 min readJul 12, 2024

--

SwiftUI에서 View 프로토콜을 구현하는 대부분의 객체는 구조체(struct)로 정의됩니다. 이는 여러 가지 이유가 있으며, 이러한 설계는 SwiftUI의 성능과 효율성을 크게 향상시킵니다. 주요 이유들을 살펴보겠습니다.

1. 불변성 (Immutability)

구조체는 기본적으로 불변성(immutability)을 제공하며, 이는 함수형 프로그래밍의 중요한 개념 중 하나입니다. SwiftUI에서 불변성은 UI 상태를 예측 가능하고 안전하게 만듭니다. 뷰가 상태를 직접 수정하지 않고 상태가 변경될 때마다 새로운 뷰가 생성됩니다.

2. 값 타입 (Value Type)

구조체는 값 타입으로, 인스턴스가 복사될 때 데이터가 복사됩니다. 이는 참조 타입(reference type)인 클래스와 달리, 뷰 계층 구조에서 데이터 공유와 관련된 버그를 줄여줍니다.

3. 성능

값 타입은 참조 타입보다 성능이 더 우수할 수 있습니다. SwiftUI는 뷰 계층 구조를 효율적으로 관리하기 위해 값 타입의 특성을 활용합니다. 값 타입은 복사가 일어나더라도 메모리 관리를 더 효율적으로 할 수 있습니다.

4. 스레드 안전성 (Thread Safety)

구조체는 스레드 안전성을 제공합니다. 값 타입은 다른 스레드에서 동시에 접근할 때 복사되므로 데이터 경쟁(data race)을 피할 수 있습니다.

5. 메모리 관리의 단순화

구조체는 참조 타입에 비해 메모리 관리가 더 간단합니다. 참조 타입은 ARC(Automatic Reference Counting)를 사용하여 메모리를 관리하지만, 구조체는 참조 카운트를 증가시키거나 감소시키지 않아도 됩니다. 이는 ARC 관련 오버헤드를 줄여줍니다.

--

--

DG

한국의 iOS 개발자이다. 강아지와 운동을 좋아함. github: https://github.com/donggyushin