뷰컨트롤러 파일에 모든것을 때려박아 개발한 어제의 나 왜그랬을까?
오늘의 내가 view와 viewcontroller 그리고 tableview로 분리했다..
처음에 생각한 순서는 뷰 → 테이블뷰 → VC 순으로 분리한다였다
단순한걸 먼저 정리하는게 나을거라고 생각했기 때문에!
뷰를 분리한 후 빌드해볼 생각은 안하고 신나게 테이블뷰까지 다 분리를 하고 빌드를 하니 !
완전히 꼬임 ^^
당연한게 뷰 분리 후에도 테이블뷰 로직이 VC에 남아 있어서 애매한 상태로 테이블뷰를 분리했었다
뷰 내에서 독립적으로 동작하는 테이블뷰를 먼저 분리하는 게 맞는 순서였다
테이블뷰 → 뷰 → VC 순으로 분리
테이블뷰를 먼저 분리하면 해당 뷰 컴포넌트만 띄워보기가 가능하다
가장 중요한건 매 단계 빌드 가능한 상태임을 항상 확인하자 ‼️
1단계) TableView 분리
TableView 관련 로직만 독립적으로 분리한다
// TableView.swift 파일에 추가할 내용
override func layoutSubviews() {
super.layoutSubviews()
tableView.frame = bounds
}
// TableView 분리 후 남은 VC.swift 파일 수정 내용
// private let tableView = UITableView()
private let tableView: TableView
// init 함수에 추가
self.tableView = TableView(member: member)
테이블뷰로 옮긴 관련 함수들을 잘 호출해준다 !
2단계) View 분리
UI 컴포넌트들과 레이아웃 관리 함수 분리
이 친구가 TableView를 들고 있는다
그리고 뷰 안에 있던 버튼 액션은 ‘Delegate’ 프로토콜로 VC에 전달하도록 델리게이트 패턴을 적용했다
// View.swift에 추가
protocol ViewButtonDelegate: AnyObject {
func backButtonTapped()
func blogButtonTapped()
}
// 뷰 클래스 내부에 추가
@objc private func backButtonTapped() {
delegate?.backButtonTapped()
}
@objc private func blogButtonTapped() {
delegate?.blogButtonTapped()
}
// 뷰 클래스 내부에 추가
private let tableView: TableView
weak var delegate: ViewButtonDelegate?
// init 내부에 추가
self.tableView = TableView(member: member)
// VC.swift에 추가
private let view: View
// init에 추가
self.view = View(member: member)
// setupView 함수에 추가
view.addSubview(view)
view.delegate = self
'iOS' 카테고리의 다른 글
[iOS] MVVM 패턴에서 데이터 로딩 책임 분리 (0) | 2025.06.18 |
---|---|
[아키텍처] Clean Architecture + MVVM (0) | 2025.06.13 |
[Swift] SOLID 원칙 iOS에 적용해보기 (1) | 2025.06.10 |
override init vs required init 초기화 차이 (0) | 2025.05.21 |
[iOS] SnapKit과 AutoLayout (0) | 2025.05.20 |