Jongwon Woo
2 min readJan 11, 2023

반응형 프로그래밍에서 지켜야 할 규칙

RxSwift, Swift Combine을 이용해서 몇 개의 화면을 만들어 본 사람들을 위한 짧은 글입니다.

TL;DR

의존 관계의 유향 비순환 그래프 DAG를 깨지마라.

반응형 프로그래밍은 (외부) 입력에 반응하는 (작은) 것들의 결합이라고 할 수 있다.

TV 화면이 디스플레이 부품에서 나오기 위해서는 디스플레이에 연결된 어떤 부품에서 출력이 나와서 디스플레이의 입력으로 들어가야 한다. 그 부품의 직전 부품도 입력을 받아서 출력을 내보낸다. 이런 연결을 거슬러 올라가다보면 결국 TV 전원 버튼을 누르는 입력으로 다다르게 된다. 물론 이렇게 단순하지는 않다.

중요한 것은 출력은 입력에 의존한다는 것이다. 입력으로 들어온 직전의 출력도 또다른 입력에 의존한다. 이런 의존 관계의 사슬은 유향 비순환 그래프 DAG으로 표현할 수 있다. 유향은 입력에서 출력으로 향하는 방향성을 나타낸다. 비순환은 입력이 출력으로 향하고 그 출력이 직전의 어떤 입력으로 들어가지 않는다는 것을 의미한다.

DAG가 깨지면 의존 관계가 뒤엉켰다는 뜻이다. 뒤엉킨 의존 관계는 원하는 출력을 항상 만들지 못한다. 운이 좋으면 TV가 켜질 수는 있다. 하지만 원하던 채널이 나오지 않을 수 있다.

아무리 복잡한 화면도 입력과 출력을 잘 구분해서 DAG으로 표현할 수 있으면, 반응형 프로그래밍으로 어렵지 않게 만들 수 있다.