Ch4. Expo UI — SwiftUI·Compose 선언형 네이티브
JS 없이 네이티브 UI를 선언하는 Expo UI 아키텍처와 실전 패턴
개요
Expo UI는 SwiftUI(iOS)와 Jetpack Compose(Android)의 네이티브 컴포넌트를 JS/TS에서 직접 선언하는 시스템입니다. React Native의 View 트리를 거치지 않고 플랫폼 네이티브 렌더링을 사용하므로, 시스템 UI와의 일관성과 성능이 뛰어납니다.
2026-03-26 기준 상태
- SwiftUI 지원: Stable — 커스텀 SwiftUI View/Modifier 확장 가능
- Jetpack Compose 지원: Alpha → Beta 승격 — 함수형 DSL 패턴, Material Design 3 컴포넌트 확대
- Stable 릴리스 목표: mid-2026
- AI 통합: expo/skills + expo-mcp를 통한 AI 기반 네이티브 UI 생성 지원
SwiftUI 컴포넌트
SDK 55에서 사용 가능한 SwiftUI 기반 컴포넌트:
import { Button, DatePicker, Toggle, Slider, ProgressView } from 'expo-ui/swift';
export default function SettingsScreen() {
return (
<>
<Toggle value={enabled} onValueChange={setEnabled} label="알림" />
<Slider value={volume} onValueChange={setVolume}
minimumValue={0} maximumValue={1} />
<DatePicker value={date} onDateChange={setDate} />
<ProgressView progress={0.7} />
<Button title="저장" onPress={handleSave} />
</>
);
}SwiftUI API 명명 변경 (2026-03-17)
SDK 55.0.7+ 기준으로 다음 SwiftUI 컴포넌트의 API 이름이 변경되었습니다:
DateTimePicker→DatePickerSwitch→ToggleCircularProgress→ProgressView
기존 이름은 deprecated 경고와 함께 당분간 동작하지만, 신규 코드에서는 새 이름을 사용하세요.
Jetpack Compose 컴포넌트 (Beta)
SDK 55에서 Compose 지원이 알파에서 베타로 승격되었습니다. 기존 클래스 기반 패턴 대신 함수형 DSL 패턴이 도입되었습니다.
Material 3 컴포넌트
Beta 승격과 함께 추가된 Material 3 컴포넌트:
| 컴포넌트 | 용도 |
|---|---|
Card | 카드 레이아웃 |
LazyColumn | 효율적 리스트 렌더링 |
ListItem | 리스트 아이템 |
DockedSearchBar | 도킹형 검색 바 |
ModalBottomSheet | 모달 바텀 시트 |
Icon | Material 아이콘 |
PullToRefreshBox | 당겨서 새로고침 |
프로덕션 적용 전략
점진적 도입 권장
- 설정 화면 등 비핵심 UI에서 Expo UI 시작
- SwiftUI는 바로 프로덕션 적용 가능 (Stable)
- Compose는 Beta — 핵심 플로우보다는 보조 화면에 우선 적용
- 커스텀 View/Modifier가 필요하면 Expo Modules API v2로 확장
플랫폼별 분기 패턴
import { Platform } from 'react-native';
const NativeToggle = Platform.select({
ios: () => require('expo-ui/swift').Toggle,
android: () => require('expo-ui/compose').Switch,
default: () => require('react-native').Switch,
})();AI 통합 — expo/skills + expo-mcp
Expo는 AI 에이전트가 네이티브 UI를 생성·수정할 수 있도록 두 가지 도구를 제공합니다:
- expo/skills: AI 모델이 Expo UI 컴포넌트를 올바르게 생성하도록 돕는 프롬프트/스킬 세트
- expo-mcp: MCP(Model Context Protocol) 서버로, AI 에이전트가 Expo 프로젝트 컨텍스트를 읽고 코드를 생성하는 데 활용
이를 통해 Claude, Cursor 등의 AI 도구에서 Expo UI 컴포넌트를 정확한 API로 생성할 수 있습니다.
주의사항
- Expo UI 컴포넌트는 React Native View 트리 외부에서 렌더링 —
onLayout,measure()등 RN 레이아웃 API 미지원 - 커스텀 스타일링은 각 플랫폼의 네이티브 API를 따름 (CSS/StyleSheet 미적용)
- Compose Beta는 API 변경 가능성 있음 — 버전 고정 권장