UI 제어는 메인스레드에서 하는 이유
UI 제어는 메인스레드에서 하는 이유
이유 1: 단일 UI 이벤트 루프 구조 (Single-threaded UI loop)
iOS (UIKit)는 단일 UI 루프 모델을 사용.
- 사용자의 터치 → 이벤트 전달 → 화면 갱신은 모두 메인 스레드에서 순차적으로 일어남
- 여러 스레드에서 UI를 동시에 변경하면, 이벤트 순서가 꼬이거나 충돌이 발생할 수 있음
그래서 UIKit은 “UI는 하나의 스레드(메인) 에서만 다뤄야 안전하다”는 구조로 설계됨
이유 2: 성능 & 렌더링 최적화
- 화면 렌더링은 Core Animation → GPU → 디스플레이까지 이어지는 파이프라인
- 이 파이프라인은 메인 스레드와 강하게 연결되어 있고, 그 흐름을 일정하게 유지해야 부드러운 애니메이션, 빠른 반응성 보장 가능
여러 스레드에서 UI 접근을 허용하면 렌더링 타이밍이 꼬이고 성능 저하 발생
이유 3: 스레드 안전성(Thread safety)을 보장하기 어려움
- 멀티스레드에서 데이터를 다룰 때는 동기화(lock) 이 필요함
- 만약 UIKit이 모든 UI 작업을 스레드 안전하게 설계했다면:
- 내부적으로 lock, queue, 동기화 처리가 필요
- 그만큼 성능 저하 + 복잡성 증가
그래서 아예 “UI는 무조건 메인에서만 다뤄라”는 규칙을 만들어 성능과 안정성을 확보함
This post is licensed under CC BY 4.0 by the author.