상세 컨텐츠

본문 제목

[Swift] SwiftUI에서는 왜 뷰에 struct를 사용할까?

iOS 캐기/Swift 캐기

by Atlas 2022. 2. 19. 22:38

본문

728x90
반응형

시나리오 : 프로젝트 생성시 interface를 SwiftUI로 선택하면 기본 뷰가 struct로 생성되어 있는 것을 확인할 수 있음.

기존에 Storyboard를 선택하고 생성하게 되면 class로 생성되어 있는데 왜 SwiftUI에서는 struct를 사용하는 지 궁금증이 생김

 

 

via GIPHY

 

프로젝트의 interface를 각 각 storyboard, swiftUI로 선택해서 생성해서 보면 이렇게 초기설정된 코드를 확인할 수 있음.

 

interface storyboard(왼쪽) / swiftUI(오른쪽)

 

물론 이렇게 프로젝트를 각 각 생성할 필요는 없고, 각 interface에서 import를 통해서 사용할 수 있음.

 

애플은 왜 value type 인 구조체를 써서 기존의 reference type인 클래스를 지원하는걸까?

 

클래스를 사용하게 되면 상속, 초기화 해제 객체, 레퍼런스카운팅 등 다양한 기능을 사용이 가능하지만

이에 비해 훨씬 제한된 수의 기능을 제공하는 스위프트가 표준 라이브러리의 구성요소로 적합하기 때문이다. 

 

구조체를 사용하는 중요한 이유를 보자면

구조체는 밸류타입으로 단 하나의 소유 객체만을 지내며, 새로운 변수에 할당하거나 함수에 전달될 때 

항상 값을 복사해서 사용한다는 점!

 

이런 구조체의 단순성은 우리가 작성한 코드를 체계적으로 안정화시키고, 특정 구조체를 변경해도 

어플리케이션의 다른 부분은 이에 영향을 받지 않을 수 있다

 

우리의 코드를 보면 구조체의 동작 모습은 항상 복사가 이루어지는것 같이 보이지만,

스위프트에서는 반드시 필요한 경우에만 복사물을 만들어 사용하고, 알고리즘이 최적의 성능을 낼 수 있도록 복사한 모든 값을 관리한다. 

 

스위프트의 구조체는 c기반 언어의 구조체에 비해 훨씬 강력하며, c기반 언어의 클래스에 가깝다.

스위프트 구조체는 c기반 언어의 구조체와 기본적인 기능은 비슷하지만 ,구조체에 각종 클래스의 기능을 추가했다. 

 

구조체의 주요기능을 정리하면

- 자동으로 생성되는 멤버 초기화 함수, 커스텀 초기화 함수도 사용가능

- 메소드를 지닐 수 있음. 

- 프로토콜을 구현 할 수 있음 

 

이처럼 스위프트에서 구조체가 강력하다면 반대로 클래스는 언제 써야할까 하는 의문이 듬.

애플의 가이드라인을 보게되면 아래의 조건 중 하나라도 해당된다면 클래스보다 구조체를 사용하는 것이 낫다고 설명하고 있다. 

 

- 특정 타입의 생성 가장 중요한 목적이 간단한 몇 개의 값을 캡슐화하려는 것인경우 

- 캡슐화한 값을 구조체의 인스턴스에 전달하거나 할당할 때 참조가 아닌 복사를 할 경우 

- 구조체에 의해 저장되는 프로퍼티를 참조가 아닌 복사를 위한 밸류타입인 경우 

- 기존의 타입에서 가져온 프로퍼티나 각종 기능을 상속할 필요가 없는 경우 

 

그리고 클래스와 구조체의 특징으로 살펴보게 되면 

UIKit에서는 모든뷰는 UIView라는 클래스를 상속받고 있다. 물론 상속을 통해서 필요한 기능을 가져올 수 있지만,반대로 생각해보면 굳이 사용하지 않는 기능까지 즉, 필요유무에 상관없이 다 하위 클래스로 가야와야하는 뜻임

 

이부분을 구조체를 통해서 본다면 깔끔한 방식으로 단순하게 구성할 수 있음. 이런 방식을 swiftUI에서는 권장하는 것인것 같음.

 

해킹스위프트 사이트를 보게되면 SwiftUI에서 뷰를 사용하는 이유를 알려주고 있음.

사이트에서 글을 읽다보면 마지막에 "Trust me on this: use a struct." 라고 팁 주심 👍

 

해킹스위프트 사이트 이미지

 

 

via GIPHY

 

 

마무리 

 - 프로젝트 생성하자마자 왜 struct로 되어있지? 하면서 샛길로 잠시 빠졌지만 이런거 알아보는거 재밌음 :)

 - swiftUI 얼른 써보러 가봐야겠음

 

 

 

참고 사이트 : 

https://developer.apple.com/documentation/swift/choosing_between_structures_and_classes

 

Apple Developer Documentation

 

developer.apple.com

 

https://www.hackingwithswift.com/books/ios-swiftui/why-does-swiftui-use-structs-for-views

 

Why does SwiftUI use structs for views? - a free Hacking with iOS: SwiftUI Edition tutorial

Was this page useful? Let us know! 1 2 3 4 5

www.hackingwithswift.com

 

 

 

 

 

 

반응형

관련글 더보기

댓글 영역