-
Flutter는 왜 UI를 단 하나의 스레드에서만 그릴까?프로그래밍/flutter로 앱만들기 2025. 4. 22. 11:47반응형
처음 Flutter를 배우다 보면, 이런 생각 한 번쯤 들죠?
“왜 이렇게 async랑 await가 많아?”
“이거 다 Dart 문법 때문인가, 아니면 Flutter 구조 때문인가?”저도 Flutter 처음 시작할 땐 그랬어요.
근데 알고 보니 이건 Dart 언어 특성도 있지만,
무엇보다 Flutter의 철학적인 선택이 크더라고요.오늘은 왜 Flutter는 UI를 단 하나의 메인 스레드에서만 다루게 했는지,
그리고 그 구조 덕분에 우리가 얼마나 편해지는지를 간단히 정리해볼게요.
🎯 결론 먼저 말할게요
Flutter는 개발자에게 예측 가능한 UI를 주기 위해,
UI는 무조건 하나의 메인 스레드에서만 그리도록 강제합니다.이게 끝이에요. 근데 그 이유가 꽤 재밌어요.
1️⃣ Flutter는 직접 그리는 프레임워크
Android에서는 View, iOS에서는 UIKit을 사용해서 UI를 만드는데,
Flutter는 그런 거 안 써요. 대신 Skia라는 그래픽 엔진을 통해
버튼, 텍스트, 리스트 전부 직접 그립니다.그래서 Flutter는 iOS/Android 똑같이 생겼고, 똑같이 동작하죠.
→ "플랫폼 무관하게 동일한 UI 보장"
2️⃣ UI를 멀티스레드로 하면 생기는 문제들
혹시 “그럼 UI도 멀티스레드로 하면 빨라지지 않나?” 생각하실 수도 있어요.
근데 현실은…- 스레드 간 데이터 충돌(race condition)
- 락(lock)이나 세마포어 등 동기화 비용 증가
- 개발자 입장에서 코드가 복잡하고 불안정해짐
그래서 Android도 명시하죠:
Only the original thread that created a view hierarchy can touch its views.
→ 즉, UI는 메인 스레드에서만 다루라는 뜻이에요.
3️⃣ Flutter의 선택: “UI는 단일 스레드 + 나머진 비동기로”
그래서 Flutter는 이렇게 했습니다:
- UI는 무조건 하나의 스레드에서만 그리게 하고
- 그 대신 시간 오래 걸리는 작업은 전부 async/await로 처리
예를 들어,
- Firebase 로그인
- 파일 업로드
- 데이터베이스 쿼리
- 이미지 불러오기
이런 건 전부 await 붙여서 UI랑 따로 비동기로 처리하는 거예요.
4️⃣ await가 많은 이유는 Flutter 구조 때문
다시 말해서…
구분설명Dart 언어 비동기 친화적인 언어. Future, Stream, async/await 지원 Flutter 프레임워크 싱글 UI 스레드 기반. 모든 I/O는 비동기로 처리하게 설계됨 → 그래서 플러터 개발하다 보면 await를 안 쓸 수가 없어요.
5️⃣ 무거운 연산은 어떻게 처리하냐고요? → Isolate 사용
Flutter는 멀티스레드를 아예 안 쓰는 건 아니고, 필요할 땐 Isolate를 사용해요.
예: 무거운 연산을 다른 isolate로 보내서 메인 스레드 안 막고 처리할 수 있어요.
Future<String> result = compute(heavyFunction, input);
✅ 정리 한 줄 요약
Flutter는 멀티스레드가 아닌 비동기 처리로 복잡함을 줄이고,
UI는 단일 스레드로 안전하게 유지합니다.개발자는 락(lock)도, 동기화 문제도 걱정할 필요 없이
"비동기로 요청 날리고, UI는 예쁘게 그리고, 끝"
이렇게 심플하게 개발할 수 있어요!728x90반응형'프로그래밍 > flutter로 앱만들기' 카테고리의 다른 글
Firebase 테스트 환경을 만들 때, 꼭 알아야 할 '로컬(mock) 환경' 이야기 (0) 2025.04.28 flutter async 함수 안에서는 await를 여러 번 사용할 수 있을까? (0) 2025.04.22 안드로이드 스튜디오에서 flutter 데모 실행하기 (0) 2024.06.02 flutter 윈도우 개발 환경 세팅 (0) 2024.05.26