SwiftUI, UIKit 둘 중에 무엇을 써야할까?

PectoralisHeok·2023년 7월 10일

일단 나는 여태까지 UIKit를 사용하여 개발하였다.
SwiftUI는 2019년 Apple이 WWDC에서 처음 발표가 되었고 적은 코드로 좋은 앱을 만드는 프레임 워크라고 소개가 되었다.
말만 들어보면 당연히 SwiftUI가 더 좋은거 아니야? 라는 생각이 든다.
하지만 UIKit를 전부 다 대체하지는 못한다고 한다. -> 곧 대체될 것이다.

각각 설명하기보다는 서로 비교를 하면서 설명해보겠다

명령형 vs 선언형

UIKit(명령형), SwiftUI(선언형)이다

워딩만 봤을때는 감이 잘 안오니까 코드를 한번 보자

UIKit

changeButton을 누르면 뷰의 백그라운드 색이 바뀌는 아주 간단한 코드이다.
changeButton에 타겟을 설정해 뷰야 이거이거(백그라운드 색 변경) 해! 이렇게 명령을 하고있다.
액션은 있지만 뷰에서는 어떤 행동을 할지 알 지 못하는 상태이다.

import UIKit

class ViewController: UIViewController {
    let changeButton = UIButton()
    let testView = UIView()
    
    override func loadView() {
    	super.loadView()
        view = testView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
		changeButton.addTarget(self, action: #selector(changeText), for: .touchUpInside)
    }
    
    @objc func changeColor(_ sender: UIButton) {
        testView.backgroundColor = .yellow
    }
}

SwiftUI

하지만 밑에서 보면 @State변수를 통해 state를 변경해주고 state에 따라 Rectang의 색이 변한다.
즉 미리 선언한 규칙대로 뷰가 유기적으로 변한다는 것이다.

import SwiftUI

struct ContentView: View {
    
    @State var isButtonTapped: Bool = true
    
    var body: some View {
        VStack {
            Rectangle()
                .foregroundColor(isButtonTapped == true ? .green: .red)
            Button {
                isButtonTapped.toggle()
            } label: {
                Text("색 변환")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Class vs Struct, Protocol

위에 코드를 봤을때 UIKit는 class를 사용하고 SwiftUI struct, protocol를 사용한다.

📌 class와 strcut,protocol 차이

class는 참조 타입이고 struct 값 타입이다

class는 변수를 할당하면 할당한 모든 변수가 변경 하지만 struct는 변수를 할당할때마다 새로운 구조체를 할당하여 다른 변수에 관여 안함

이벤트 중심, 데이터 중심

UIKit는 이벤트가 있으면 뷰를 그려주고 SwifUI는 state 변수를 지정하여 데이터와 바인딩하여 값이 변경되면 뷰를 그려주는 방식이다.

결론

SwiftUI가 나온 직후는 아직 UIKit를 전부 대체 못했지만 요즘 구인구직 사이트를 가 보면 SwiftUI를 요구하는 것 같다.
점점 더 나아질테니 공부를 필연적으로 해야된다.
모든 개발자들이 똑같지만 개발자는 항상 공부를 해야되는 것 같다. ㅠㅠ

참고

https://velog.io/@kkh3/UIKit-vs-SwiftUI-%EC%B0%A8%EC%9D%B4%EC%A0%90

profile
공부하고 소통하는 공간

0개의 댓글