티스토리 뷰
Swift를 공부하고 ios 개발자로 취업을 준비하는 사람이라면 Combine 을 한 번쯤은 들어봤을것이다.
취업 지원자격 혹은 우대사항에 Combine 경험자가 적혀있는 것을 종종 볼 수 있다.
그렇다면 Combine은 무엇이고 왜 쓰는 것일까???
궁금해서 공부해봤다.
Combine의 탄생
Combine은 WWDC 2019 에서 처음으로 나왔다. WWDC 2019 Combine 영상보기
영상 속에서 Combine은 이렇게 정의된다.
시간에 따른 값 처리를 위한 통합되고 선언적인 API.
이것만 봐서는 잘 모르겠다. Apple 공식문서의 Combine을 본다. Combine 공식문서
Combine
이벤트 처리 연산자를 결합(combine) 하여 비동기 이벤트 처리를 사용자 정의한다.
Combine 프레임워크는 시간에 따른 값 처리를 해주는 선언적인 Swift API를 제공한다. 이 값들은 여러 종류의 비동기 이벤트에서 나타난다. Combine은 시간이 지남에 따라 변할 수 있는 값에 대해 publisher를 통해 선언한다. subscribers 는 publisher로부터 그 값들을 받는다.
요약하자면 "비동기(asynchronous) 코드를 효율적으로 작동시키기 위해 사용하는 프레임워크" 로 이해할 수 있을 것 같다.
비동기 코드
그렇다면 왜 비동기 코드를 작성하는 것일까??
우선 동기, 비동기에 대해 간단히 말하자면
동기는 한 번에 하나의 작업을 하고, 그 작업이 끝나길 기다렸다가, 끝나면 그 다음 작업을 수행한다.
비동기는 여러 개의 일을 동시에 시작할 수 있다.
예시로 카카오톡을 들면
동기의 경우 메시지를 입력하고 전송버튼을 누르면, 아무것도 하지 못하고 그 응답이 올 때까지 기다려야 한다.
비동기의 경우 전송버튼을 누르면, 잘 도착했는지 여부에 상관없이 바로 다음 메시지를 타이핑할 수 있다.
응답여부는 나중에 도착한다.
요즘은 5G도 나오고 인터넷 속도도 빨라서 상관이 없지만, 만약 인터넷이 잘 안터지는 곳에서 네트워크 통신을 한다고 가정하면 그 응답을 받는 5~10초 시간 동안 사용자는 아무것도 할 수 없는 벽돌을 들고 있어야 한다.
이렇게 보면 비동기가 무조건 좋아 보인다.
그럼 다 비동기로 하면 좋을 것 같은데 왜 동기 코드를 작성하는 것일까??
우선 동기적으로 작동해야하는 코드들이 있다.
동기 코드는 작성하기가 훨씬 쉽다.
아이폰의 최신 프로세서 A15 뿐만 아니라 현재 나오는 모든 프로세서들은 매우매우매우 빠르다.
따라서 간단한 작업정도는 동기코드로 작성해도 시간에 큰 차이가 없고 작성하기도 쉬우므로 효율적이다.
비동기의 경우 동기에 비해 복잡하지만 동시에 여러 일을 처리할 수 있으므로 매우 효율적이다.
특히 네트워크에 관련된 코드는 대부분이 비동기이다.
이런 비동기 코드를 효율적(efficient)이고 최적화(optimize)되게 작성할 수 있는 것이 Combine 이다.
RxSwift vs Combine
그렇다면 그 전에는 비동기 코드를 다룰 수 없었는가?
그건 아니다. 그 전에도 RxSwift 가 있었다.
심지어 사용법도 매우 비슷하다.
2021년 12월 기준, 많은 기업들이 RxSwift를 사용하고 있기도 하다.
그렇다면 RxSwift를 계속 쓰면 되지, 왜 Combine을 쓰는 것일까??
애플이 Combine을 밀어주고 있기 때문이다.
우선 RxSwift는 애플이 직접 만든 것이 아닌 오픈 커뮤니티에서 만들었다.
즉 외부 라이브러리를 가져다써야하는 프레임워크이다.
그에 반해 Combine은 애플이 만들었다. (태생부터가 금수저이다.)
xCode 자체적으로 내장되어 있고, 비록 그 속도가 느릴지라도 애플이 지속적으로 관리하고 업데이트를 해준다.
애플이 직접관리하기 때문에 안정성 측면에서 더 기대할 수도 있다.
애플이 밀고있는 SwiftUI와도 잘 연동된다.
RXSwift의 장점을 모두 가지고 있다.
그럼 또 이런 생각이 든다.
애플이 밀어준다는데 아직까지도 RxSwift를 쓰는 건 뭔데?
우선 Combine은 ios 13.0 이상부터 지원이 된다.
RxSwift | Combine |
ios 8.0+ | ios 13.0+ |
그 전 버전 (ios 13.0 이전) 에 대해서는 RxSwift를 사용해야 한다.
기업입장에서 생각해보면, 그 전까지 RxSwift 로 만들었던 앱을 아직 확인이 안 된 Combine으로 싹 갈아엎는다??
그건 말이 안된다.
여태까지는 안정성도 확보가 안됐을뿐더러 RxSwift로도 동작이 잘되기 때문에 굳이 바꿀 필요가 없다.
그렇다면 무엇을 공부해야할까?
둘 다 공부하면 좋다. ㅎㅎㅎㅎㅎ
하지만 RxSwift 와 Combine 말고도 공부해야될 것이 많이 기다리고 있다.
선택과 집중이 필요하다.
검색을 하던 중 Naver Tech에서 진행한 ios MeetUp 영상을 보게 되었다. 영상링크
간단히 요약하자면
- 현재 RxSwift를 사용하고 있다면 계속해서 사용하면 된다.
- 아직 RxSwift를 도입하지 않았다면 개인적으로 Combine을 공부하자
현업에서 종사하는 분이 말하는 것이라 참고하면 좋을 것 같다. 참고로 영상은 21년 4월에 촬영되었다.
앱스토어에서 현재 아이폰에서 사용되는 ios 버전을 확인할 수 있다. 앱스토어 링크
2021년 6월 3일 기준으로 ios 13 버전 이상을 사용하는 아이폰 유저는 98% 이다.
앞으로 Combine 을 사용할 수 있는 환경이 갖춰져있다.
개인적으로는 지금 당장 일을 해야한다면 RxSwift 를 다룰 줄 알고 Combine도 공부해야 할 것으로 보인다.
아직 학생이고 ios를 차근차근 배워가는 입장이라면 Combine을 우선적으로 배우는 것이 좋아보인다.
이 글은 2021년 12월 4일에 작성되었습니다.
글을 읽게 되는 시점에서는 어떻게 달라졌을지 모르니 그 때 상황에 맞춰 공부하면 될 것 같습니다.
😀
'Swift > Swift 문법' 카테고리의 다른 글
Safari에서 WKWebView의 console 확인하기 - isInspectable 설정 (1) | 2023.10.12 |
---|---|
[Swift] Combine 3 - Combine 간단한 코드 예제 (0) | 2021.12.05 |
[Swift] Combine 2 - Combine 원리 (0) | 2021.12.05 |
- Total
- Today
- Yesterday
- Swift문법
- 필독서
- 애플
- UX
- SwiftUI
- 책리뷰
- 부스트캠프iOS
- TODO
- Swift DocC
- 코딩테스트
- 코딩 테스트
- Swift 디자인 패턴
- 디자인 패턴
- swiftUI 기초
- 프로그래머스
- 코딩
- ios
- vapor
- 날씨어플
- Swift공식문서
- Swift
- Combine
- 개발
- 부스트캠프
- 부스트캠프7기
- 책
- todo앱
- 책후기
- Swift 서버
- 앱개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |