반응형

SwiftUI에서 많이 하는 실수 - View 중첩이 지나치게 깊어져 가독성과 유지보수가 나빠지는 실수

 

SwiftUI는 “작은 View 조합”으로 큰 화면을 만드는 방식을 권장합니다.
하지만 한 View 파일 안에 VStack/HStack/ZStack/If/ForEach를 전부 몰아넣으면
금세 200~300줄짜리 body가 되어, 읽기/수정이 매우 힘들어집니다.


1. 문제 원인

  • 빠르게 결과를 보기 위해 작은 View로 쪼개는 작업을 미룸
  • UIKit 시절의 거대 ViewController 습관을 그대로 유지
  • “이 정도는 그냥 한 파일에 있어도 되겠지”가 쌓임

2. 나타나는 증상

  • body 안에 중첩된 VStack/HStack이 5~6단계 이상
  • 스크롤 없이 코드를 한 번에 파악하기 힘듦
  • 작은 UI 변경에도 어디를 고쳐야 할지 찾는 데 시간이 오래 걸림

3. 잘못된 코드 예시

struct ProfileView: View {
    var body: some View {
        VStack {
            HStack {
                Image("avatar")
                VStack {
                    Text("사용자 이름")
                    Text("상태 메시지")
                }
            }
            .padding()

            Divider()

            VStack(alignment: .leading) {
                Text("최근 활동")
                ForEach(0..<10) { index in
                    HStack {
                        // ...
                    }
                }
            }

            Divider()

            VStack {
                // 설정 관련 UI들...
            }

            // ... 200줄 이상 계속
        }
    }
}

4. 올바른 코드 예시 (컴포넌트 분리)

struct ProfileView: View {
    var body: some View {
        VStack(spacing: 16) {
            ProfileHeaderView()
            RecentActivitySection()
            SettingsSection()
        }
        .padding()
    }
}

struct ProfileHeaderView: View {
    var body: some View {
        HStack {
            Image("avatar")
            VStack(alignment: .leading) {
                Text("사용자 이름").font(.headline)
                Text("상태 메시지").font(.subheadline)
            }
        }
    }
}

struct RecentActivitySection: View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("최근 활동").font(.headline)
            ForEach(0..<10) { _ in
                ActivityRow()
            }
        }
    }
}

struct ActivityRow: View {
    var body: some View {
        HStack {
            Circle().frame(width: 8, height: 8)
            Text("활동 내용")
            Spacer()
        }
    }
}

5. 정리 및 팁

  • body가 100줄 가까이 가면 “쪼갤 시점이 온 것”으로 보는 게 좋습니다.
  • “논리적으로 하나의 역할을 하는 덩어리”를 기준으로 작은 View로 분리하세요.
  • 이 작업은 테스트/미리보기/재사용 측면에서도 큰 이득을 가져옵니다.
반응형
Posted by 까칠코더
,