Post

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.