SwiftUI는 UIKit과 다르게 모든 뷰가 Struct로 선언되어 있다.

왜 그렇게 해야하며, 그렇게 설계한 이유가 궁금해서 공부하게 되었다.

먼저 염두해야하는 내용은 SwiftUI는 선언형 프로그래밍이라는것이다!

함수형프로그래밍은 선언형 프로그래밍의 좀더 좁은 범위다.


그러면 늘 그렇듯 먼저 알아야하는 내용에 대해서 공부하자.

구조체와 클래스의 차이점

먼저 구조체와 클래스의 차이는 다음과 같다.

  1. 상속 가능여부

    클래스는 상속이 가능하지만, 구조체는 상속이 불가능하다.

  2. 형식의 차이

    클래스는 참조타입이지만, 구조체는 값 타입이다.

구조체는 메모리영역에서 stack영역에 저장이 되며, 클래스는 참조타입이기 때문에 heap영역에 저장이 된다.

값타입의 구조체는 값을 변경하려고 하면, 새로운 메모리를 할당하고 값을 복사해서 새로운 값을 생성하게 되는데, 클래스는 같은 메모리 주소를 참조하기 때문에 값을 변경하면 모든 참조가 그 값을 바라보게 된다. 즉 해당 값을 바꿔버린다.

또한 스택은 메모리에 올라갔다가 사용이 종료되면 바로 삭제가 되지만, 힙에 올라간 코드는 가비지컬렉터에 의해서 정리를 하게 된다.

특히 기존의 uikit개발에서는 ARC를 사용해서 가비지컬렉팅을 하게 되는데 강한 상호참조가 일어나면 메모리릭이 일어나는 가능성이 높앗다. 이를 위해서 약한 참조를 하는 경우가 생겼다.

즉 정리를 하자면 클래스보다 구조체의 이점은 다음과 같다.