안녕하세요.
iOS 공부 관련 글은 정~말 오랜만에 작성하는 것 같습니다.
기존의 프로젝트를 MVVM Code Design Architecture로 리펙토링이 필요하여 비동기 처리를 알아보다 보니 RxSwift와 Combine이 있더라구요.
Apple에서 공식으로 지원하는 API 가 아무래도 좋을 것 같아 iOS 13 이상부터 적용 가능한 Combine에 대해 공부 및 정리해보았습니다.
옛날 생각도 나고 좋은데요, 아무래도 공부 관련 글이니 만큼 잡설은 각설하고 시작해보겠습니다.
Combine ?
Combine은 한국말로 결합하다라는 의미입니다.
과연 무엇을 결합한다는 의미일까요?
이걸 이해하기 위해선 여러 관문이 존재합니다 (어렵진 않아요)
.
.
View를 구성하는 부분을 크게 2가지로 나눠봅시다.
1. 데이터를 불러와 UI를 구성하는 부분
2. Button등 특정 행위를 통해 Client 측에서 데이터 처리를 요구하는 부분 (비동기 데이터 처리라고 주로 표현합니다.)
.
.
어려우면 이렇게 생각해보시죠
1. 프로필 정보 (기존 정보를 불러와 표시)
2. 프로필 수정 (기존 정보를 수정)
여기까지 이해 되시나요?
.
.
그럼 다음 단계로 가봅시다
.
.
다음으로는
정보의 수정이 일어나는 경우를 생각해보아야 합니다.
정보의 수정? (프로필 정보 수정을 떠올려보아요)
1. 초기 데이터 불러옴
2. 프로필 정보 UI 초기 구성
3. 프로필 관련 데이터가 모종의 이유로 수정됨
4. 프로필 정보 UI Update
최초 정보는 어떤 방식으로든 한번 불러와져 View에서 쓰이겠죠.
하지만 그 뒤의 정보는 어떻게 가져오죠?
많은 방식이 있겠지만, 2가지만 예를 들어볼게요 !
1) 일정 시간을 두고 DB에서 정보를 다시 불러온다.
2) Listener(DB에서 변화를 감지해 서버에서 클라이언트로 변경을 알리는 객체)를 설정하여 변화가 발생하면 변경된 값과 알림을 전달한다.
가장 원론적인 방식들인데, 일반적인 경우에는 2번을 선택 할 겁니다.
뭐 1번이든 2번이든 정보를 다시 불러왔다고 칩시다.
그럼 수정된 정보를 어떻게 View에 다시 적용할 것이냐?
그것이 문제로다... 입니다.
수정된 정보를 View에 적용하는 방법
이에 대한 방법론은 iOS 뿐만 아니라 다양한 분야(Android, Web 등)에서 다양한 방식으로 구현됩니다.
iOS에는
- Completion Handler
- SwiftUI (State Binding)
- GCD (Grand Central Dispatch)
- Async/Await (iOS 15 이상)
- Delegate Pattern (DataFetcherDelegate)
- RxSwift
- Combine
위와 같은 것들로 구현해낼 수 있죠
그 중, 저희는 Combine을 활용해 수정된 정보를 View에 적용(일반적으로 반응형 UI 라고 표현합니다.) 해보려 하는 겁니다.
좀 멋있게 표현하면,
"비동기 이벤트 스트림을 처리하고 데이터 흐름을 관리"한다 라고 할 수 있구요
대충 표현하면,
"변경된 정보(데이터)를 UI에 !! 그것도 불시에 !! 적용해야할 때, 이를 처리할 수 있는 !! 대단한 !!" 것이라고 볼 수 있습니다.
(대충 표현한게 원래 더 긴가요?)
암튼 이해만 되면 되는거에요.
본격적인 시작에 앞서
Combine은 제가 사용하는 목적 외에도 정말 많은 곳에 응용될 수 있습니다.
- By. GPT 공
- 네트워크 요청 처리
Combine을 사용해 비동기 네트워크 요청을 처리하고, 응답 데이터를 선언적으로 다룰 수 있습니다. - 사용자 입력 및 폼 유효성 검사
Combine을 사용하여 실시간으로 사용자 입력을 처리하고, 폼 유효성 검사 결과를 자동으로 반영할 수 있습니다. - 타이머 및 주기적인 작업 처리
Combine의 타이머를 사용해 주기적인 작업을 설정하고, 일정 간격으로 이벤트를 발생시킬 수 있습니다. - 다중 데이터 스트림 결합
여러 비동기 작업의 결과를 Combine을 이용해 결합하여 동시에 처리하거나, 이벤트를 병렬로 처리할 수 있습니다. - 애플리케이션 상태 관리 (V)
Combine을 활용하여 앱의 상태 변화를 추적하고, 상태가 변경될 때마다 UI나 비즈니스 로직을 자동으로 반영할 수 있습니다.
이렇게요.
.
.
하지만 저는 state 관리를 통해 UI 및 비즈니스 로직을 변경하여,
MVVM 구조를 실현하기 위해 시작한 공부인 만큼 앞으로의 Combine 내용은 그와 관련한 내용일 것 입니다.
참고해주시면 좋을 것 같아요 ~ !
Combine(2)에는 기본적으로 Combine의 각각의 요소가 의미하는게 뭔지 그리고 어떻게 쓰이는 건지 분석해보는 내용일 것 같아요.
뭔가 @이런 특수 문자나 수상한 단어가 많이 나와서 우선 친해져야 할 것 같습니다 ~ 엣헴
그럼 소개는 여기서 마쳐보도록 하겠습니다.
Mins 주인장 올림
'iOS > iOS' 카테고리의 다른 글
[iOS] Combine (4) (6) | 2024.11.11 |
---|---|
[iOS] Combine (3) (8) | 2024.11.08 |
[iOS] Combine (2) (9) | 2024.11.07 |
[iOS] Frame & Bounds (2) - Bounds (0) | 2023.02.13 |
[iOS] Frame & Bounds (1) - Frame (4) | 2023.02.13 |