Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Boost‐SwiftUI‐2024年07月16日(화)

junbok97 edited this page Jul 21, 2024 · 2 revisions

원본 텍스트 파일

Boost-SwiftUI-240716.txt


240716 SwiftUI 스터디 요약

  • 2024年07月16日 화 오후 9:01 ・ 81분 0초
  • 권승용 유정주 홍승현 이준복 김대황
  • 클로버노트를 이용해 회의 내용을 기록하고, GPT를 이용해 요약, 편집했습니다.

한 줄 요약

  • Version 2
    • SwiftUI와 UIKit의 장단점을 비교하고, TCA를 포함한 다양한 디자인 패턴과 UI 구현 문제를 해결하기 위한 논의를 진행함.
  • Version 1
    • SwiftUI를 사용한 UI 구현에서 빈 공간 처리, 뷰 최적화 및 구성 방법, 선언형 문법의 장단점을 중심으로 논의했다.

Version 2 (100% GPT)

iOS와 SwiftUI 스터디 세션 요약

SwiftUI와 UIKit 비교

  • SwiftUI와 UIKit의 장단점을 비교하며, SwiftUI의 장점과 단점을 논의함.
  • UIKit으로 해결할 수 있는 문제들을 SwiftUI로 구현할 때의 어려움을 공유.
  • SwiftUI의 프레임 처리와 스크롤 뷰에서의 빈 공간 처리 문제를 해결하는 방법을 고민함.

TCA (The Composable Architecture)

  • TCA를 사용하는 것에 대해 논의, TCA를 SwiftUI와 UIKit에서 어떻게 사용할 수 있는지 검토.
  • TCA와 관련된 참고 자료의 부족으로 인해 학습의 어려움을 공유함.
  • TCA의 라이브러리 특성보다는 디자인 패턴으로 접근하는 방법을 제안.

뷰 모델과 뷰 컨트롤러

  • 뷰 모델과 뷰 컨트롤러의 역할을 구분하여 사용하려는 시도.
  • 뷰 모델을 뷰 컨트롤러와 뷰에서 어떻게 분리할 것인지에 대해 논의.
  • 회사 프로젝트에서 호스팅 뷰 컨트롤러를 사용해야 하는 이유와 그에 따른 구조 설계.

이벤트 처리

  • 각 뷰마다 이벤트를 처리하는 문제에 대한 고민을 나눔.
  • 퍼블리시드를 사용하여 뷰 모델과 뷰 간의 데이터 흐름을 설정하는 방법을 논의.
  • 이벤트 처리의 딜레마와 이를 해결하기 위한 방법들에 대해 의견을 나눔.

개인 프로젝트와 회사 프로젝트

  • 개인 프로젝트와 회사 프로젝트에서 사용하는 기술과 라이브러리에 대해 공유.
  • 회사 프로젝트에서 TCA를 사용하는 경험을 바탕으로 한 의견 교환.
  • 개인 프로젝트에서 TCA를 사용하며 겪은 문제와 해결 방안에 대해 논의.

UI 구현 문제

  • UI를 구현하는 과정에서 발생하는 다양한 문제에 대해 논의.
  • 프레임을 사용하여 UI 요소를 배치하는 방법과 그로 인한 문제 해결.
  • 스크롤 뷰와 프레임 설정 시 발생하는 빈 공간 문제를 해결하는 방법을 공유.

학습 자료와 참고 문서

  • 공식 문서와 오픈 소스 자료를 활용한 학습 방법을 공유.
  • 강의나 멘토링을 통해 학습할 수 있는 방법을 제안.
  • 다양한 참고 자료와 학습 자료의 활용에 대해 논의.

Version 1 (GPT + 사람 편집)

캘린더 UI 문제

  • 캘린더 UI에서 빈 공간을 처리하는 문제를 논의했다.
  • UIKit에서는 오토레이아웃으로 공간을 채울 수 있지만, SwiftUI에서는 뷰의 크기가 콘텐츠에 따라 변동되어 빈 공간이 생길 수 있다.
  • ScrollView를 사용하면 의도하지 않은 스크롤이 발생할 수 있다.
  • 이를 해결하기 위해 프레임 지정, 색상 저장 등 빈 공간을 채우는 방안을 토의했다.
    • 상단에 round를 적용하고, 하단에 뷰를 추가하는 방법을 논의했다.
    • 백그라운드 색상을 적용해 빈 공간을 채우는 방법을 시도했지만, 구현 결과가 만족스럽지 않았다.
    • 뷰의 백그라운드 컬러를 회색으로 설정하고, 루트 뷰의 백그라운드 컬러를 회색으로 맞추는 방안을 선택했다.

뷰 분리 및 최적화

  • 뷰를 분리할 때 private 구조체로 정의하거나 @ViewBuilder를 사용하는 방법에 대해 논의했다.
  • 구조체가 최적화에 더 유리하지만, @ViewBuilder는 별도의 프로퍼티 전달을 하지 않아도 된다.
  • 구조체 분리와 @ViewBuilder의 애니메이션 차이가 있다.
  • @ViewBuilder는 다른 뷰에서 재사용할 가능성이 없을 때 고려할 수 있다.

SwiftUI의 장단점

  • SwiftUI와 UIKit의 장단점을 비교했다.
  • SwiftUI는 선언형 문법으로 코드 양이 줄어들고, 직관적인 UI 설계가 가능하다.
  • 일부 UI 구성 요소의 동작이 UIKit과 다르게 작동해 추가적인 고민이 필요하다.
  • UIKit에서는 쉽게 해결할 수 있는 문제가 SwiftUI에서는 복잡해질 수 있다.

뷰 빌더 사용 사례

  • 뷰 빌더를 사용하여 뷰를 최적화하고, 리스트 안에 여러 뷰를 효율적으로 배치하는 방법을 논의했다.
  • 뷰 빌더를 사용하면 depth가 1인 구조로 작성할 수 있다. List의 재사용 최적화를 노릴 수 있다.
  • 리스트 안에서 뷰 빌더를 사용해 배열 형태로 구성하는 것이 효과적이다.

AnyView와 최적화

  • AnyView를 사용하면 뷰의 최적화가 저하될 수 있다. 따라서 AnyView 대신 @ViewBuilder를 사용해 최적화된 구조를 만드는 것이 좋다.
  • 프로퍼티나 함수로 뷰를 구성할 때보다 구조체로 지정했을 때 최적화가 더 잘 이루어진다는 의견이 있다.

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /