전체 글 21

[SwiftUI] MVVM 패턴 간단한 예제 + 다형성

서론MVVM의 핵심은 뷰와 비즈니스 로직을 분리하는 것입니다.SwiftUI에서 뷰와 비즈니스 로직을 엮어버리면 다음과 같은 그림이 됩니다.struct ContentView: View { @State private var count = 1 var body: some View { VStack { Text("count : \(count)") .onTapGesture { /* 비즈니스 로직 */ count += 1 } } }} 이런 코드는 다음과 같은 문제가 있습니다.1. 테스트의 어려움비즈니스 로직"만"을 테스트하..

iOS/SwiftUI 2024.11.14

Delegate Pattern을 왜 썼을까?

이렇게 생긴 버튼들의 집합을 구현하기 위해 ButtonsView라는 클래스를 만들었습니다.그리고 ViewContoller와 Delegate를 통해 데이터를 주고받도록 했습니다.사실 ButtonsView 클래스에서 onTapLike() 와 같은 함수를 두어서 buttonsView.onTapLike() 이런식으로 직접 조작을 할 수도 있었을 것입니다.하지만, 왜 Delegate Pattern을 "굳이" 썼는지 정리해보고자 합니다. 1. 구조VC는 Delegate를 구현하는 방식으로 의존하고, ButtonsView는 Delegate를 선언하고 사용하는 방식으로 의존합니다.ButtonsView 입장에서는 함수들을 "직접 구현"하는 것이 아니라, "위임"하게 됩니다. 그래서 명칭이 Delegate Pattern입..

iOS/UIKit 2024.09.03

[UIKit/Refactoring] 전시 화면 데이터 처리 관련 로직 개선하기

- OverviewPLAIN 앱의 전시화면은 이렇게 생겼습니다. (데이터는 가짜입니다.) * mock data ref더보기https://www.google.com/url?sa=i&url=https%3A%2F%2Ftwitter.com%2FChampionsLeague%2Fstatus%2F1348932678297538561&psig=AOvVaw0c_KgXbB1BnBijOhuVlyaS&ust=1722327969680000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCIDCmejpy4cDFQAAAAAdAAAAABAEhttps://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.pinterest.com%2Fpin%2Flionel-me..

iOS/Refactoring 2024.08.17

[UIKit/Refactoring] Domain + Presentation + MVVM 아키텍처 개선

기존 아키텍처 및 개선의 필요성domain layer + presentation layer + mvvm 파란색 선: 의존기존 아키텍처는 이런 모습으로 구현되어 있었습니다. 의존성이 내부로 향하는 것이 클린 아키텍처의 핵심이라 하면, 문제는 없었습니다.다만, 개발을 빠르게 하다보니 이것이 지켜지지 않는 문제들이 있었습니다.뷰컨에 모델이 들어간다던지, 네비게이션을 직접 한다던지 등등 SRP를 어기는 코드가 있었습니다.또한, 뷰모델에 많은 로직이 들어가 있었는데 뷰와 관련된 로직이 포함된 뷰모델을 테스트하기 어려운 문제도 있었습니다.따라서, 코드를 리팩토링하고 data layer를 추가해서 테스트 가능한 영역을 구분하기로 결정했습니다.  개선된 아키텍처 개선된 구조의 모습입니다.데이터 흐름은 presentat..

iOS/Refactoring 2024.08.09