Combine과 Rx가 잘 이해가 안가는 사람을 위한 설명(feat. SwiftUI에 비유해서)

2024. 1. 1. 21:29·앱/Swift

Combine을 처음 공부할때 가장힘들었던점

콤바인, rx모두 같은 맥락으로 처음 공부할때 힘든점은

그래서 subscriber, publisher가 뭔지는 알겠는데 어떻게 생성하는가? 이다.

따라서, 최대한 쉽게 나만의 해석을 하고 이해하여서 설명해보려고 한다.

Combine을 사용하는 이유

우선 콤바인을 사용하는 이유를 이해 해야하는데, 콤바인을 사용하는 이유는 공식문서에 나와있다.

하지만 내가 생각하는 combine이나 rx를 사용하는 이유는 바로 데이터 바인딩을 하기 위함이다.

데이터 바인딩을 한다는 말은, 뷰에 있는 어떠한 컴포넌트(textfield, button, text..)에 이벤트 감지를 하고, 감지를 통해서 다시 어떠한 값의 변경을 이끌어 내는것을 의미한다

나는 이러한 방법에서 combine을 이해하려고 하니 좀 쉬웠다.

예를들어 다음과 같은것이다.

예시)

기본적으로 mvvm패턴에서 사용한다고 가정하고, SwiftUI에서 View와 ViewModel이 있다고 가정한다.

struct View: View {
	@StateObject var vm = SomeViewModel()

	var body: some View {
			{Button,과 TextField가 있는 뷰}
	}
}
import Combine

class SomeViewModel: ObservableObject {

	@Published var textfieldInput = ""
	@Published var buttonClicked = false
	var cancallables = Set<AnyCancallable>

//혹은 init을 직접 파라미터를 추가하는 방식으로 해도 된다. (상위 뷰에서 데이터를 전달해줄때)
init() {
	makeTextFieldSubscribe()
	makeButtonSubscribe()
}

	func makeTextFieldSubscribe() {
		$textfieldInput
			.sink {
				//어떠한 변경을 해준다던지, 네트워킹을 해준다던지 하자
			}.store(in: &cancallables)
	}
	func makeButtonSubscribe() {
		$buttonClicked
			.sink {
				print("hello")
			}.store(in: &cancallables)
	}
}

이러한 방식으로 textField와 buttonClicked라는 변수 자체에 subscribe를 붙이는 것으로 I/O입력은 뷰에서 처리해주고, 해당 처리된 값의 변경을 VM에서 감지하도록 해주는 방법이다.

뷰에서는 위의 변경을 또 인식하여, 어떠한 변경을 처리해준다던지 하는 방법이 내가 생각하는 combine을 이용하는 법이다.

반응형

'앱 > Swift' 카테고리의 다른 글

Swift) RxDataSource 사용하는법 정리  (0) 2024.02.25
Swift) URLSession, async await을 사용하여(parameter, header, body 세팅까지)  (0) 2024.02.25
Swift) NSAttributedString, NSMutableAttributedString  (1) 2024.01.01
UIKit) lineBreakMode에 대해서  (1) 2024.01.01
UIKit) Then을 사용해보자  (0) 2024.01.01
'앱/Swift' 카테고리의 다른 글
  • Swift) RxDataSource 사용하는법 정리
  • Swift) URLSession, async await을 사용하여(parameter, header, body 세팅까지)
  • Swift) NSAttributedString, NSMutableAttributedString
  • UIKit) lineBreakMode에 대해서
진ddang
진ddang
안녕하세요 진땅의 개발자 블로그 입니다. 피드백은 환영입니다. 깃헙 : https://github.com/it794613
    반응형
  • 진ddang
    맛동산이
    진ddang
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • 일기 그리고 목표 (1)
      • 웹 (20)
        • 리액트 (19)
      • 앱 (115)
        • Swift 문법 (15)
        • Swift (65)
        • SwiftUI (32)
        • 리액트 네이티브 (3)
      • CS (30)
        • 컴퓨터그래픽스 (8)
        • 운영체제 (6)
        • 네트워크 (16)
      • 알고리즘 (13)
        • 백준 (12)
        • 프로그래머스 (1)
      • 대외활동 (7)
        • ict한이음(2022.04) (2)
        • 멋쟁이 사자처럼 (5)
        • Apple Developer Academy (0)
      • 다양한 내용들 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    widgetkit
    컴퓨터그래픽스
    스위프트
    SwiftUI
    dispatchqueue
    영남대
    후기
    widget
    대외활동
    Protocol
    멋사
    ReactorKit
    네트워크
    웹
    uikit
    멋쟁이사자처럼
    백준
    위젯킷
    composable architecture
    c++
    Swift
    TCA
    리액트
    cs
    swift concurrency
    문법
    스유
    운영체제
    알고리즘
    spritekit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진ddang
Combine과 Rx가 잘 이해가 안가는 사람을 위한 설명(feat. SwiftUI에 비유해서)
상단으로

티스토리툴바