Skip to content

Boost‐SwiftUI‐2024.11.26(화).md

유정주 JeongJu Yu edited this page Dec 14, 2024 · 2 revisions

원본 텍스트 파일

Boost-SwiftUI-2024.11.26(화).txt


스터디 시간 및 참여자

  • 2024.11.26 화 오후 9:01 ・ 73분 46초
  • 권승용 김대황 김인환 유정주 윤동주 이창준
  • 클로버노트를 이용해 회의 내용을 기록하고, Claude를 이용해 요약, 편집했습니다.

SwiftUI View 구조와 최적화

View 컴포넌트 구성 전략

  • 작은 단위의 View로 분리하여 구성하는 것이 권장됨
    • "작은 뷰를 구축해서 큰 뷰를 만든다"는 원칙 강조
    • 단일 책임을 가진 작은 View로 구성하는 것이 좋음
  • 구조체로 View를 분리할 때 주의사항
    • iOS 15에서 TabView 사용 시 하위 View를 구조체로 분리하면 렌더링 문제 발생
    • TabView의 tabStyle을 .page로 설정 시 init과 body는 호출되지만 화면에 그려지지 않음
    • 해결방법: 구조체 대신 ViewModifier로 구현

SwiftUI의 View 렌더링 특성

  • Mental Model 이해
    • Modifier가 기존 View를 수정하는 것이 아님
    • 새로운 View를 계속 생성하는 형태로 동작
  • UIKit과 SwiftUI의 차이점
    • UIKit: View 인스턴스를 직접 조작
    • SwiftUI: View를 표현하기 위한 선언적 방식 사용

디버깅과 개발 도구

View Hierarchy 디버깅

  • SwiftUI의 View Hierarchy 확인의 한계
    • UIKit에 비해 계층 구조 파악이 어려움
    • 실제 뷰 구조와 디버깅 도구에서 보이는 구조가 다를 수 있음
  • Metal/Shader 관련 이슈
    • Metal 사용 시 View Hierarchy에서 제대로 표시되지 않는 문제
    • Gradient 등 특정 효과 사용 시 디버깅이 어려울 수 있음

성능 최적화

  • View 계층 구조 최적화
    • SwiftUI는 내부적으로 View 계층을 효율적으로 관리
    • 개발자가 View를 많이 중첩해도 성능에 큰 영향 없음
  • 메모리 관리
    • SwiftUI가 자동으로 처리하는 부분이 많음
    • UIKit보다 메모리 관리가 수월함

고급 UI 구현 사례

커스텀 차트 구현

  • 레이더 차트 구현 사례
    • Shape 프로토콜 활용
    • 동적 각형 계산 및 그리기
    • 코너 라운딩 처리를 위한 벡터 계산
  • 애니메이션 구현
    • Animatable 프로토콜 활용
    • 벡터 값 합성을 위한 Accelerate 프레임워크 사용
    • VDSP 활용한 벡터 계산

블러 효과 구현

  • 네이티브 블러 효과의 한계
    • SwiftUI의 기본 블러가 원하는 효과를 내지 못함
    • 틴트 색상 문제로 인한 제약
  • UIVisualEffectView 활용
    • UIKit 컴포넌트 활용
    • 필터 커스터마이징
    • 가우시안 블러 구현

개발 프로세스와 협업

프로젝트 관리

  • UI 변경으로 인한 코드 폐기 사례
    • 3일간 개발한 복잡한 차트 기능이 디자인 변경으로 폐기
    • API 구현까지 완료된 상태에서 변경
    • 재사용 가능한 컴포넌트는 보존

크로스 플랫폼 개발

  • SwiftUI와 Jetpack Compose 간의 코드 변환
    • 선언형 UI 특성으로 인해 변환이 비교적 수월
    • AI 도구를 활용한 코드 변환 가능
Clone this wiki locally