작성
·
201
0
안녕하세요 강사님! 영상 잘 보고 공부하고 있습니다!
영상에서 combine을 사용하여 데이터 바인딩 하셨는데 제가 이해하기로는 @Published가 붙은 데이터가 업데이트 되면 그것을 구독하는 userName3, userAge3 메서드가 호출되고 그래서 테이블 뷰 안에 데이터가 변경되는 것으로 알고있는데 reloadData를 호출하지 않으면 변경이 이루어지지 않습니다.
reloadData를 호출하여 테이블 뷰의 변경사항을 업데이트 한다면 굳이 각각의 셀에 데이터를 바인딩 할 필요 없이 셀에서는 배열 안에 데이터를 그냥 가져오고 viewDidLoad안에서 데이터가 변경되면 reloadData를 호출하도록 구현하는 것과 차이점이 있을까요?
답변 2
0
0
안녕하세요.
질문하신 의도가 '리로드는 무조건 필요한데 바인딩이 왜 필요한가'에 대한 것이라면, 영상에서 보여지는 것처럼, 특정 상황에서는 데이터 변경만으로도 UI 컴포넌트인 레이블을 갱신할 수 있습니다.
edit상황에서 리로드 없이 레이블이 변경되는 것을 보시면 이해가 되실겁니다.
그러나, 새로운 데이터가 추가되거나 기존 데이터가 삭제되는 경우와 같이 테이블 뷰의 셀 개수에 변화가 생길 때는 reloadData()를 호출하여 UI를 갱신해야 합니다.
이는 UIKit에는 데이터 바인딩이 직관적으로 내장되어 있지 않기 때문입니다. UIKit은 주로 명령형 프로그래밍에 기반하고 있으며, 데이터와 UI 간의 동기화를 위해 추가적인 리로드 같은 로직이 필요할 수 있습니다.
데이터 바인딩 개념이 대중화된 것은 2000년대 전후로 비교적 최근이므로 바인딩 개념이 없는 프레임워크가 아직 많습니다.
UIKit도 바인딩 개념이 표함되지 않았기 때문에 바인딩을 직접 구현할 수 있긴 하지만(클로저등으로 통해)
Combine, RxSwift와 같은 라이브러리를 사용하는게 훨씬 간편하므로 이런 라이브러리를 사용하게 됩니다.
그럼에도 이런 라이브러리들이 데이터와 UI 사이의 강력한 바인딩 기능을 제공하지만, UIKit에서는 여전히 셀의 추가나 삭제와 같은 일부 작업에서는 수동으로 UI를 갱신해야 하는 경우가 있습니다.
바인딩을 쓰는 목적은
개발자가 데이터 모델과 UI 업데이트를 수동으로 관리하는 복잡함을 줄이고, 코드의 명확성과 가독성을 향상시키기 위해 도입된 개념입니다. 바인딩이 적절히 구현되어 있다면, 개발자는 주로 데이터 로직에 집중할 수 있으며, UI는 자동으로 갱신되니 로직은 단순명확해 지게 됩니다.
참고로 최신 프레임워크인 SwiftUI는 데이터 바인딩을 핵심 개념으로 삼고 있으며, 데이터의 변화만으로 UI를 자동으로 갱신할 수 있도록 설계되었습니다. 이는 셀의 추가나 삭제와 같은 경우에도 별도의 리로드 과정 없이 UI가 갱신됩니다.