Giting.
낮의 Giting
홈 › 스킬 › app-menu
앱 UI 메뉴판 실물 캡처 사전 76항목 · 자체 제작
◆ 도입 후보

ui-menu가 웹 UI에 이름을 붙여 줬다면, app-menu는 같은 일을 모바일 앱에서 한다. 모바일은 이름을 아는 순간 플랫폼 관례가 따라온다. '아래에서 올라오는 판'이 바텀시트인 걸 알면 손잡이·높이 단계·바깥 탭 닫기가 같이 오고, '앱 켜면 뜨는 로고 화면'이 스플래시인 걸 알면 초기화가 끝나면 자동 전환한다는 관례가 온다. 차별점은 네이티브 매핑이다. 정식 명칭을 SwiftUI·Flutter·React Native의 실제 컴포넌트명까지 연결해(탭바 → TabView·BottomNavigationBar·Tab.Navigator), Expo나 Flutter로 앱을 만들 때 바로 시킬 수 있게 했다. 그리고 웹/앱 경계를 짚는다. 모달은 앱에선 아래서 올라오는 풀스크린이고, 셀렉트는 드롭다운이 아니라 시트로 여는 게 관례다. 마지막으로 모바일이 자주 빠뜨리는 것(세이프에어리어·탭 타깃 44pt·엠프티 스테이트)을 체크리스트로 붙였다. 생성기가 아니라 이름·요청 문장·빠짐 점검을 주는 사전이다. 코드는 사람이 짠다. iOS·안드로이드 앱을 AI로 만드는 사람에게 도입 후보.

실물부터, 설치 전에 전부 만져보세요

아래는 이미지가 아니라 이 스킬이 담고 있는 진짜 HTML입니다. 눌러 보세요.
앱 UI 사전 · 76가지

모바일은 이름만 대면
관례가 따라와요

모바일 앱 UI 전용. 웹 UI 는 ui-menu 를 쓴다. 같은 단어라도 앱과 웹의 관례가 다르다. 모달은 앱에선 아래서 올라오는 풀스크린, 셀렉트는 드롭다운이 아니라 시트로 연다. 네이티브 열은 SwiftUI · Flutter · React Native 의 실제 컴포넌트명.

스플래시 Splash

"앱 켜면 뜨는 로고 화면"

앱이 뜨는 동안 잠깐 보이는 로고 화면. 로딩을 가려 준다.

SwiftUI: LaunchScreen · Flutter: flutter_native_splash · Expo: expo-splash-screen

스택 · 푸시/팝 Stack (push / pop)

"화면 쌓기"

화면을 카드처럼 쌓고(push) 한 장씩 빼서(pop) 뒤로 가는 기본 이동 방식.

SwiftUI: NavigationStack · Flutter: Navigator.push/pop · RN: Stack.Navigator

모달 (풀스크린) Modal (fullscreen)

"전체를 덮는 창"

화면 전체를 덮으며 올라오는 창. 모바일에서 '모달'은 보통 이 풀스크린을 뜻한다.

스플래시 화면을 넣어줘. 로고 가운데, 초기화 끝나면 자동으로 첫 화면으로 넘어가게.

AI한테 시키는 공식

플랫폼 관례까지
한 문장에 넣어요

모바일은 이름만 정확히 대면 플랫폼 관례(세이프에어리어·44pt·바텀시트)가 따라옵니다. 웹 UI는 ui-menu를 쓰세요.

[어느 화면][컴포넌트 이름][개수·상태][플랫폼 관례]
✕

설정 화면 만들어줘

○

설정 화면을 그룹 리스트로. 세이프에어리어 지키고, 로그아웃은 맨 아래 디스트럭티브 버튼, 탭 대상은 44pt 이상으로

이름 찾기

이런 말엔
이런 이름을 써요

오른쪽에 SwiftUI · Flutter · React Native 의 실제 이름까지 붙어 있어요.

헷갈리는 짝

하단 탭바, 이럴 때 써요

↔ 앱 전체 구역이면 탭바, 한 화면 안 전환이면 세그먼티드

하단 탭바를 홈·검색·알림·마이 4개로. 현재 탭은 강조, 아이콘 위 라벨까지.

하단 탭바 Tab Bar · Bottom Nav

"아래 메뉴 4개"

앱 전체를 4~5개 구역으로 나누는 하단 바. 이걸로 앱의 큰 뼈대가 잡힌다.

SwiftUI: TabView · Flutter: BottomNavigationBar / NavigationBar · RN: Tab.Navigator
Claude Code 스킬

AI가 앱 관례를
먼저 챙겨요

스킬로 깔아 두면 세이프에어리어 · 44pt · 시트 같은 관례를 말하지 않아도 넣어요.

/plugin marketplace add hanmariyang/giting-skills

/plugin install app-menu@giting

GitHub에서 오픈소스 보기 ↗

① 화면 뼈대 8

스플래시

Splash
"앱 켜면 뜨는 로고 화면" · "처음 1초 화면" 앱이 뜨는 동안 잠깐 보이는 로고 화면. 로딩을 가려 준다.
스플래시 화면을 넣어줘. 로고 가운데, 초기화 끝나면 자동으로 첫 화면으로 넘어가게.
SwiftUI: LaunchScreen · Flutter: flutter_native_splash · Expo: expo-splash-screen

온보딩

Onboarding
"처음 켰을 때 안내" · "튜토리얼 몇 장" 처음 설치했을 때만 보여 주는 안내 2~4장. 다시는 안 나온다.
온보딩을 3장으로. 마지막 장에 시작하기 버튼, 한 번 본 사람에겐 다시 안 뜨게 저장까지.
↔ 처음 한 번만이면 온보딩, 매번 도움말이면 그냥 안내 화면

앱바

App Bar · Navigation Bar
"맨 위 제목 줄" · "상단 바" 화면 맨 위 제목 줄. 화면마다 제목과 버튼이 바뀐다.
앱바에 가운데 제목, 왼쪽 뒤로가기, 오른쪽 더보기 버튼을 넣어줘.
SwiftUI: .toolbar / navigationTitle · Flutter: AppBar · RN: header

라지 타이틀

Large Title
"큰 제목" · "위에 크게 쓰인 제목" 화면 위쪽에 크게 놓이는 제목. 스크롤하면 작은 앱바 제목으로 접힌다.
설정 화면 위에 라지 타이틀로 제목을 크게, 스크롤하면 앱바로 접히게 해줘.
SwiftUI: navigationBarTitleDisplayMode(.large) · iOS 관례

하단 탭바

Tab Bar · Bottom Nav
"아래 메뉴 4개" · "밑에 탭" 앱 전체를 4~5개 구역으로 나누는 하단 바. 이걸로 앱의 큰 뼈대가 잡힌다.
하단 탭바를 홈·검색·알림·마이 4개로. 현재 탭은 강조, 아이콘 위 라벨까지.
SwiftUI: TabView · Flutter: BottomNavigationBar / NavigationBar · RN: Tab.Navigator ↔ 앱 전체 구역이면 탭바, 한 화면 안 전환이면 세그먼티드

세이프 에어리어

Safe Area
"노치 피하기" · "위아래 안 가리게" 노치·상태바·홈 인디케이터에 가리면 안 되는 여백. 모바일에서 가장 자주 빠뜨리는 것.
모든 화면을 세이프 에어리어 안에 배치해줘. 하단 버튼이 홈 인디케이터에 안 가리게.
SwiftUI: safeAreaInset / ignoresSafeArea · Flutter: SafeArea · RN: SafeAreaView

스크롤 뷰

Scroll View
"가운데 스크롤 영역" · "내용 부분" 내용이 화면보다 길면 세로로 스크롤되는 가운데 영역.
본문을 스크롤 뷰로. 앱바와 탭바는 고정, 가운데만 스크롤되게.
SwiftUI: ScrollView · Flutter: SingleChildScrollView / ListView · RN: ScrollView

하단 고정 바

Bottom Bar
"맨 아래 붙은 버튼" · "고정 결제 바" 화면 아래 고정되는 영역. 보통 대표 버튼(구매·다음)이 산다.
상세 화면 맨 아래에 고정 바를 두고, 그 안에 구매하기 프라이머리 버튼을 넣어줘. 세이프 에어리어 지키게.
↔ 앱 구역 이동이면 탭바, 이 화면의 행동 버튼이면 하단 고정 바
한글영문네이티브이렇게 말해도AI에게 이렇게
스플래시 Splash SwiftUI: LaunchScreen · Flutter: flutter_native_splash · Expo: expo-splash-screen "앱 켜면 뜨는 로고 화면" 스플래시 화면을 넣어줘. 로고 가운데, 초기화 끝나면 자동으로 첫 화면으로 넘어가게.
온보딩 Onboarding · "처음 켰을 때 안내" 온보딩을 3장으로. 마지막 장에 시작하기 버튼, 한 번 본 사람에겐 다시 안 뜨게 저장까지.
앱바 App Bar · Navigation Bar SwiftUI: .toolbar / navigationTitle · Flutter: AppBar · RN: header "맨 위 제목 줄" 앱바에 가운데 제목, 왼쪽 뒤로가기, 오른쪽 더보기 버튼을 넣어줘.
라지 타이틀 Large Title SwiftUI: navigationBarTitleDisplayMode(.large) · iOS 관례 "큰 제목" 설정 화면 위에 라지 타이틀로 제목을 크게, 스크롤하면 앱바로 접히게 해줘.
하단 탭바 Tab Bar · Bottom Nav SwiftUI: TabView · Flutter: BottomNavigationBar / NavigationBar · RN: Tab.Navigator "아래 메뉴 4개" 하단 탭바를 홈·검색·알림·마이 4개로. 현재 탭은 강조, 아이콘 위 라벨까지.
세이프 에어리어 Safe Area SwiftUI: safeAreaInset / ignoresSafeArea · Flutter: SafeArea · RN: SafeAreaView "노치 피하기" 모든 화면을 세이프 에어리어 안에 배치해줘. 하단 버튼이 홈 인디케이터에 안 가리게.
스크롤 뷰 Scroll View SwiftUI: ScrollView · Flutter: SingleChildScrollView / ListView · RN: ScrollView "가운데 스크롤 영역" 본문을 스크롤 뷰로. 앱바와 탭바는 고정, 가운데만 스크롤되게.
하단 고정 바 Bottom Bar · "맨 아래 붙은 버튼" 상세 화면 맨 아래에 고정 바를 두고, 그 안에 구매하기 프라이머리 버튼을 넣어줘. 세이프 에어리어 지키게.

② 화면 이동 8

스택 · 푸시/팝

Stack (push / pop)
"화면 쌓기" · "다음 화면 넘어가기" 화면을 카드처럼 쌓고(push) 한 장씩 빼서(pop) 뒤로 가는 기본 이동 방식.
목록에서 항목을 누르면 상세 화면을 push하고, 상세에서 뒤로가기로 pop되게 해줘.
SwiftUI: NavigationStack · Flutter: Navigator.push/pop · RN: Stack.Navigator

리플레이스

replace
"뒤로 못 가게 넘기기" · "현재 화면 갈아끼우기" 현재 화면을 새 화면으로 통째로 교체. 뒤로 가도 이전 화면이 없다.
로그인 성공하면 홈으로 replace해줘. 뒤로가기로 로그인 화면에 다시 못 돌아오게.
↔ 쌓아서 돌아올 수 있으면 push, 갈아끼워 못 돌아오면 replace

모달 프레젠트

present / sheet
"아래에서 올라오는 화면" · "새 작업 창" 아래에서 위로 올라오는 화면. 글쓰기·설정처럼 잠깐 하는 작업에 쓴다.
글쓰기 화면을 모달로 올려줘. 좌상단은 취소, 우상단은 완료 버튼으로.
SwiftUI: .sheet / .fullScreenCover · Flutter: showModalBottomSheet / MaterialPageRoute(fullscreenDialog) · RN: Modal ↔ 흐름을 이어가면 push, 잠깐 곁다리 작업이면 모달 프레젠트

뒤로가기

Back Button
"왼쪽 위 화살표" · "돌아가기" 앱바 왼쪽의 뒤로 버튼. 모달에서는 ✕(닫기)로 바뀐다.
상세 화면 앱바 왼쪽에 뒤로가기, 모달 화면에는 대신 ✕ 닫기 버튼을 넣어줘.

엣지 백 제스처

Back Gesture
"왼쪽 끝에서 밀어 뒤로" · "스와이프 백" 화면 왼쪽 끝에서 오른쪽으로 쓸어 뒤로 가는 제스처. iOS에서 특히 당연히 기대된다.
모든 push 화면에서 왼쪽 엣지 백 제스처가 되게 해줘. 커스텀 헤더 때문에 막히지 않게.
iOS interactivePopGesture · Flutter: 기본 제공 · RN: gestureEnabled

세그먼티드

Segmented Control
"붙어 있는 버튼 2~3개" · "위쪽 전환 탭" 한 화면 안에서 내용을 전환하는, 붙어 있는 버튼 2~4개.
목록 위에 세그먼티드로 전체·진행중·완료 3개를 넣고, 고른 것만 아래에 보이게.
SwiftUI: Picker(.segmented) · Flutter: SegmentedButton · RN: SegmentedControl ↔ 앱 구역 이동이면 탭바, 한 화면 안 내용 전환이면 세그먼티드

드로어

Navigation Drawer
"옆에서 나오는 메뉴" · "햄버거 메뉴" 화면 옆에서 밀려 나오는 메뉴 판. ☰(햄버거) 버튼으로 연다.
왼쪽에서 나오는 드로어에 메뉴 목록을 넣고, 앱바 왼쪽 햄버거 버튼으로 열게 해줘.
Flutter: Drawer · RN: Drawer.Navigator · iOS는 탭바를 더 선호
한글영문네이티브이렇게 말해도AI에게 이렇게
스택 · 푸시/팝 Stack (push / pop) SwiftUI: NavigationStack · Flutter: Navigator.push/pop · RN: Stack.Navigator "화면 쌓기" 목록에서 항목을 누르면 상세 화면을 push하고, 상세에서 뒤로가기로 pop되게 해줘.
리플레이스 replace · "뒤로 못 가게 넘기기" 로그인 성공하면 홈으로 replace해줘. 뒤로가기로 로그인 화면에 다시 못 돌아오게.
모달 프레젠트 present / sheet SwiftUI: .sheet / .fullScreenCover · Flutter: showModalBottomSheet / MaterialPageRoute(fullscreenDialog) · RN: Modal "아래에서 올라오는 화면" 글쓰기 화면을 모달로 올려줘. 좌상단은 취소, 우상단은 완료 버튼으로.
뒤로가기 Back Button · "왼쪽 위 화살표" 상세 화면 앱바 왼쪽에 뒤로가기, 모달 화면에는 대신 ✕ 닫기 버튼을 넣어줘.
엣지 백 제스처 Back Gesture iOS interactivePopGesture · Flutter: 기본 제공 · RN: gestureEnabled "왼쪽 끝에서 밀어 뒤로" 모든 push 화면에서 왼쪽 엣지 백 제스처가 되게 해줘. 커스텀 헤더 때문에 막히지 않게.
세그먼티드 Segmented Control SwiftUI: Picker(.segmented) · Flutter: SegmentedButton · RN: SegmentedControl "붙어 있는 버튼 2~3개" 목록 위에 세그먼티드로 전체·진행중·완료 3개를 넣고, 고른 것만 아래에 보이게.
드로어 Navigation Drawer Flutter: Drawer · RN: Drawer.Navigator · iOS는 탭바를 더 선호 "옆에서 나오는 메뉴" 왼쪽에서 나오는 드로어에 메뉴 목록을 넣고, 앱바 왼쪽 햄버거 버튼으로 열게 해줘.
딥링크 Deep Link · "링크 누르면 앱 특정 화면으로" myapp://post/123 딥링크로 바로 그 게시글 상세로 열리게 라우팅을 잡아줘.

③ 목록 10

리스트

List
"세로로 줄줄이" · "목록" 항목을 세로로 쌓아 스크롤하는 목록. 앱 화면의 절반은 이걸로 만든다.
알림을 리스트로. 항목마다 아이콘·제목·시간, 스크롤 부드럽게 재활용되게.
SwiftUI: List / LazyVStack · Flutter: ListView.builder · RN: FlatList

리스트 항목

List Item · ListTile
"목록 한 줄" · "리스트 한 칸" 리스트의 한 줄. 보통 왼쪽 아이콘 + 제목/부제 + 오른쪽 화살표나 값.
설정 리스트 항목을 왼쪽 아이콘, 가운데 제목, 오른쪽 현재 값과 › 화살표로 만들어줘.
SwiftUI: 셀 안 HStack · Flutter: ListTile · RN: 커스텀 row

섹션 헤더

Section Header
"목록 중간 구역 이름" · "그룹 제목" 리스트를 그룹으로 나눌 때 각 묶음 위에 붙는 작은 제목 줄.
설정을 계정·알림·정보 3개 섹션으로 나누고 각 위에 섹션 헤더를 붙여줘.

스와이프 액션

Swipe Action
"밀면 나오는 삭제 버튼" · "옆으로 밀기" 항목을 옆으로 밀면 나오는 버튼(삭제·보관 등).
메일 항목을 왼쪽으로 밀면 삭제(빨강), 오른쪽으로 밀면 읽음 처리 버튼이 나오게 해줘.
SwiftUI: .swipeActions · Flutter: Dismissible / Slidable · RN: Swipeable

드래그 정렬

Reorder · Drag to sort
"꾹 눌러 순서 바꾸기" · "끌어서 정렬" 항목을 꾹 눌러 잡고 끌어 순서를 바꾸는 것.
할 일 리스트를 꾹 눌러 드래그로 순서 바꿀 수 있게 하고, 바뀐 순서를 저장해줘.
SwiftUI: .onMove · Flutter: ReorderableListView · RN: DraggableFlatList

무한 스크롤

Infinite Scroll · Pagination
"끝까지 내리면 더 나옴" · "자동 다음 페이지" 끝에 가까워지면 다음 묶음을 자동으로 불러오는 목록.
피드를 무한 스크롤로. 바닥 근처에서 다음 페이지 불러오고, 로딩 중엔 하단에 스피너.
↔ 자동으로 계속 나오면 무한 스크롤, 버튼 눌러야 나오면 더 보기

당겨서 새로고침

Pull to Refresh
"위에서 당기면 새로고침" · "잡아당겨 갱신" 목록 맨 위에서 아래로 당기면 새로 불러오는 동작.
피드에 당겨서 새로고침을 넣어줘. 당기는 동안 스피너, 끝나면 부드럽게 사라지게.
SwiftUI: .refreshable · Flutter: RefreshIndicator · RN: RefreshControl

카드

Card
"네모 상자로 묶은 것" · "박스" 이미지·제목·설명을 하나의 네모 상자로 묶은 덩어리.
상품을 카드로. 위에 이미지, 아래 제목·가격, 그림자와 둥근 모서리로.
SwiftUI: RoundedRectangle 배경 · Flutter: Card · RN: View + shadow

추천 카드

For You Card
"이번 주 추천" · "나한테 맞춘 목록" 그 사람 기록으로 고른 묶음을 정해진 때마다 새로 채워 주는 카드. 언제 새로 바뀌는지 같이 적는다.
홈 맨 위에 '이번 주 추천' 카드를 넣고, 제목 아래에 '매주 월요일 새로 채워져요'를 적어줘. 카드를 누르면 추천 목록 화면으로 가게 해줘.

추억 카드

Memory Card
"1년 전 오늘" · "예전 사진 다시 보기" 예전에 남긴 사진이나 기록을 그날 날짜와 함께 다시 꺼내 보여 주는 카드.
홈에 '1년 전 오늘' 카드를 넣어 그날 사진 한 장과 날짜를 크게 보여 주고, 누르면 그날 사진을 넘겨 볼 수 있게 해줘. 그날 기록이 없으면 카드를 숨겨줘.
한글영문네이티브이렇게 말해도AI에게 이렇게
리스트 List SwiftUI: List / LazyVStack · Flutter: ListView.builder · RN: FlatList "세로로 줄줄이" 알림을 리스트로. 항목마다 아이콘·제목·시간, 스크롤 부드럽게 재활용되게.
리스트 항목 List Item · ListTile SwiftUI: 셀 안 HStack · Flutter: ListTile · RN: 커스텀 row "목록 한 줄" 설정 리스트 항목을 왼쪽 아이콘, 가운데 제목, 오른쪽 현재 값과 › 화살표로 만들어줘.
섹션 헤더 Section Header · "목록 중간 구역 이름" 설정을 계정·알림·정보 3개 섹션으로 나누고 각 위에 섹션 헤더를 붙여줘.
스와이프 액션 Swipe Action SwiftUI: .swipeActions · Flutter: Dismissible / Slidable · RN: Swipeable "밀면 나오는 삭제 버튼" 메일 항목을 왼쪽으로 밀면 삭제(빨강), 오른쪽으로 밀면 읽음 처리 버튼이 나오게 해줘.
드래그 정렬 Reorder · Drag to sort SwiftUI: .onMove · Flutter: ReorderableListView · RN: DraggableFlatList "꾹 눌러 순서 바꾸기" 할 일 리스트를 꾹 눌러 드래그로 순서 바꿀 수 있게 하고, 바뀐 순서를 저장해줘.
무한 스크롤 Infinite Scroll · Pagination · "끝까지 내리면 더 나옴" 피드를 무한 스크롤로. 바닥 근처에서 다음 페이지 불러오고, 로딩 중엔 하단에 스피너.
당겨서 새로고침 Pull to Refresh SwiftUI: .refreshable · Flutter: RefreshIndicator · RN: RefreshControl "위에서 당기면 새로고침" 피드에 당겨서 새로고침을 넣어줘. 당기는 동안 스피너, 끝나면 부드럽게 사라지게.
카드 Card SwiftUI: RoundedRectangle 배경 · Flutter: Card · RN: View + shadow "네모 상자로 묶은 것" 상품을 카드로. 위에 이미지, 아래 제목·가격, 그림자와 둥근 모서리로.
추천 카드 For You Card · "이번 주 추천" 홈 맨 위에 '이번 주 추천' 카드를 넣고, 제목 아래에 '매주 월요일 새로 채워져요'를 적어줘. 카드를 누르면 추천 목록 화면으로 가게 해줘.
추억 카드 Memory Card · "1년 전 오늘" 홈에 '1년 전 오늘' 카드를 넣어 그날 사진 한 장과 날짜를 크게 보여 주고, 누르면 그날 사진을 넘겨 볼 수 있게 해줘. 그날 기록이 없으면 카드를 숨겨줘.

④ 입력받는 것 13

텍스트 필드

Text Field
"한 줄 입력칸" · "글자 넣는 칸" 한 줄 글자를 넣는 입력칸. 키보드가 올라온다.
이메일 텍스트 필드를 만들어줘. 키보드는 이메일 타입, 자동 대문자 끄고, 지우기 ✕ 버튼까지.
SwiftUI: TextField · Flutter: TextField · RN: TextInput

플레이스홀더

Placeholder
"흐리게 미리 쓰인 예시" · "회색 안내 글자" 입력 전 흐리게 보이는 예시 글자. 입력하면 사라진다.
이메일 칸에 플레이스홀더로 'you@example.com'을 흐리게 넣어줘.
↔ 칸 안 흐린 예시면 플레이스홀더, 칸 위 이름표면 라벨

여러 줄 입력

Textarea · Multiline
"긴 글 입력칸" · "여러 줄 쓰는 칸" 여러 줄을 넣는 큰 입력칸. 내용이 길어지면 늘어난다.
후기 입력을 여러 줄 입력으로. 최대 500자, 아래에 글자 수 카운터까지.
SwiftUI: TextField(axis:.vertical) / TextEditor · Flutter: TextField(maxLines) · RN: TextInput(multiline)

키보드 피하기

Keyboard Avoidance
"키보드가 입력칸을 가려" · "키보드 올라오면 같이 올라가게" 키보드가 올라오면 입력칸과 저장 버튼이 그 위로 밀려 올라가야 한다. 시트·모달 안 입력칸이 가장 자주 가려진다.
입력칸이 키보드에 가리지 않게 해줘. 키보드가 올라오면 시트째 그 위로 올라가고, 바깥을 누르면 키보드가 내려가게.
SwiftUI: 기본으로 피함(.ignoresSafeArea(.keyboard) 를 쓰지 말 것) · Flutter: Scaffold(resizeToAvoidBottomInset) · RN: KeyboardAvoidingView(behavior: iOS 는 "padding") ↔ 웹은 브라우저가 알아서 밀어 주지만 앱은 직접 처리해야 한다

OTP 입력

OTP Input
"인증번호 칸" · "한 칸에 숫자 하나" 인증번호를 한 칸에 한 자리씩 넣는 입력. 자동으로 다음 칸으로 넘어간다.
6자리 OTP 입력을 만들어줘. 문자 자동완성 연동, 다 채우면 자동 제출.
iOS: textContentType(.oneTimeCode) 로 자동완성 · 칸 UI는 커스텀

비밀번호 토글

Password Toggle
"눈 아이콘으로 보기" · "비번 가렸다 보기" 비밀번호를 가렸다 보였다 하는 눈 아이콘 버튼.
비밀번호 칸 오른쪽에 눈 아이콘을 넣어 눌러서 보이기/가리기 토글되게 해줘.

셀렉트 (시트)

Select · Picker
"하나 고르는 칸" · "누르면 목록 뜨는 선택" 값 하나를 고르는 입력. 모바일에서는 드롭다운이 아니라 아래에서 시트로 열린다.
국가 선택을 셀렉트로. 누르면 바텀시트로 목록이 뜨고, 고르면 값이 칸에 채워지게.
↔ 웹은 드롭다운, 앱은 시트로 여는 게 관례

체크박스

Checkbox
"여러 개 고르기" · "네모 체크" 여러 개를 동시에 고를 수 있는 네모 체크.
약관 동의를 체크박스로. 전체 동의 하나와 개별 항목들이 연동되게.

라디오

Radio
"딱 하나만 고르기" · "동그라미 선택" 여럿 중 딱 하나만 골라지는 선택. 하나 고르면 나머지는 풀린다.
배송 방법을 라디오로 3개. 하나만 선택되고 기본값은 첫 번째로.
↔ 여러 개 고르면 체크박스, 하나만이면 라디오

토글 스위치

Toggle · Switch
"켰다 껐다" · "온오프 스위치" 켜고 끄는 스위치. 설정 화면의 대표 입력.
알림 설정을 토글 스위치로. 켜면 바로 반영, 실패하면 원래대로 되돌리게.
SwiftUI: Toggle · Flutter: Switch · RN: Switch

유효성 검사

Validation
"조건 안 맞으면 막기" · "형식 검사" 입력이 조건에 맞는지 확인해 안 맞으면 진행을 막는 것. 폼에서 꼭 챙긴다.
회원가입 폼에 유효성 검사를 넣어줘. 이메일 형식·비번 8자 이상, 안 맞으면 제출 막고 칸 아래 에러.

인라인 에러

Inline Error
"틀린 칸 아래 빨간 글씨" · "칸 밑 에러 메시지" 틀린 입력칸 바로 아래에 붙는 빨간 안내. 무엇이 왜 틀렸는지 알려준다.
유효성 실패 시 해당 칸 테두리를 빨강으로, 바로 아래 인라인 에러 문구를 띄워줘.
한글영문네이티브이렇게 말해도AI에게 이렇게
텍스트 필드 Text Field SwiftUI: TextField · Flutter: TextField · RN: TextInput "한 줄 입력칸" 이메일 텍스트 필드를 만들어줘. 키보드는 이메일 타입, 자동 대문자 끄고, 지우기 ✕ 버튼까지.
플레이스홀더 Placeholder · "흐리게 미리 쓰인 예시" 이메일 칸에 플레이스홀더로 'you@example.com'을 흐리게 넣어줘.
여러 줄 입력 Textarea · Multiline SwiftUI: TextField(axis:.vertical) / TextEditor · Flutter: TextField(maxLines) · RN: TextInput(multiline) "긴 글 입력칸" 후기 입력을 여러 줄 입력으로. 최대 500자, 아래에 글자 수 카운터까지.
키보드 피하기 Keyboard Avoidance SwiftUI: 기본으로 피함(.ignoresSafeArea(.keyboard) 를 쓰지 말 것) · Flutter: Scaffold(resizeToAvoidBottomInset) · RN: KeyboardAvoidingView(behavior: iOS 는 "padding") "키보드가 입력칸을 가려" 입력칸이 키보드에 가리지 않게 해줘. 키보드가 올라오면 시트째 그 위로 올라가고, 바깥을 누르면 키보드가 내려가게.
OTP 입력 OTP Input iOS: textContentType(.oneTimeCode) 로 자동완성 · 칸 UI는 커스텀 "인증번호 칸" 6자리 OTP 입력을 만들어줘. 문자 자동완성 연동, 다 채우면 자동 제출.
비밀번호 토글 Password Toggle · "눈 아이콘으로 보기" 비밀번호 칸 오른쪽에 눈 아이콘을 넣어 눌러서 보이기/가리기 토글되게 해줘.
검색바 Search Bar SwiftUI: .searchable · Flutter: SearchBar · RN: 커스텀 TextInput "돋보기 검색창" 목록 위에 검색바를 넣고, 입력하면 실시간으로 목록이 걸러지게(디바운스) 해줘.
셀렉트 (시트) Select · Picker · "하나 고르는 칸" 국가 선택을 셀렉트로. 누르면 바텀시트로 목록이 뜨고, 고르면 값이 칸에 채워지게.
체크박스 Checkbox · "여러 개 고르기" 약관 동의를 체크박스로. 전체 동의 하나와 개별 항목들이 연동되게.
라디오 Radio · "딱 하나만 고르기" 배송 방법을 라디오로 3개. 하나만 선택되고 기본값은 첫 번째로.
토글 스위치 Toggle · Switch SwiftUI: Toggle · Flutter: Switch · RN: Switch "켰다 껐다" 알림 설정을 토글 스위치로. 켜면 바로 반영, 실패하면 원래대로 되돌리게.
유효성 검사 Validation · "조건 안 맞으면 막기" 회원가입 폼에 유효성 검사를 넣어줘. 이메일 형식·비번 8자 이상, 안 맞으면 제출 막고 칸 아래 에러.
인라인 에러 Inline Error · "틀린 칸 아래 빨간 글씨" 유효성 실패 시 해당 칸 테두리를 빨강으로, 바로 아래 인라인 에러 문구를 띄워줘.

⑤ 골라 넣는 것 7

슬라이더

Slider
"막대 끌어서 값" · "볼륨 같은 바" 막대를 끌어 값을 정하는 입력. 범위형은 양쪽에 손잡이가 둘.
가격 범위를 슬라이더로. 최소·최대 손잡이 두 개, 현재 값이 위에 말풍선으로.
SwiftUI: Slider · Flutter: Slider / RangeSlider · RN: Slider

데이트 피커

Date Picker
"날짜 고르기" · "달력에서 선택" 날짜를 고르는 입력. 눌러서 달력이나 휠로 연다.
예약 날짜를 데이트 피커로. 오늘 이전은 못 고르게, 고르면 시트가 닫히며 값 반영.
SwiftUI: DatePicker · Flutter: showDatePicker · RN: DateTimePicker

휠 피커

Wheel Picker
"돌돌 굴려 고르기" · "드럼 굴리는 선택" 값이 세로로 돌아가는 드럼식 선택. iOS에서 특히 흔하다.
시간을 휠 피커로. 시·분이 각각 굴러가고 가운데 값이 선택되게.
SwiftUI: Picker(.wheel) · Flutter: CupertinoPicker · RN: Picker

칩

Chip · Tag
"둥근 알약 라벨" · "태그" 둥근 알약 모양의 작은 라벨. 필터나 선택지로도 쓴다.
관심사를 칩으로 여러 개. 누르면 채워지고(선택), 여러 개 고를 수 있게.
Flutter: Chip / FilterChip · SwiftUI·RN 커스텀

별점

Rating
"별 다섯 개" · "평점 매기기" 별 다섯 개로 점수를 주는 입력.
후기 별점을 다섯 개로. 반 개 단위 허용, 탭과 드래그 둘 다로 매기게.

수량 스텝퍼

Stepper
"− 숫자 +" · "개수 늘리고 줄이기" − 와 + 로 숫자를 하나씩 올리고 내리는 입력.
장바구니 수량을 스텝퍼로. 1 미만은 못 내려가게, 재고 넘으면 + 비활성.
SwiftUI: Stepper · Flutter·RN 커스텀

사진 업로드

Photo / File Upload
"사진 올리기" · "갤러리에서 선택" 갤러리나 카메라에서 사진·파일을 올리는 것. 권한 요청이 따라온다.
프로필 사진 업로드를 넣어줘. 갤러리·카메라 선택 시트, 권한 거부 시 안내까지.
iOS: PhotosPicker · Flutter: image_picker · RN: expo-image-picker
한글영문네이티브이렇게 말해도AI에게 이렇게
슬라이더 Slider SwiftUI: Slider · Flutter: Slider / RangeSlider · RN: Slider "막대 끌어서 값" 가격 범위를 슬라이더로. 최소·최대 손잡이 두 개, 현재 값이 위에 말풍선으로.
데이트 피커 Date Picker SwiftUI: DatePicker · Flutter: showDatePicker · RN: DateTimePicker "날짜 고르기" 예약 날짜를 데이트 피커로. 오늘 이전은 못 고르게, 고르면 시트가 닫히며 값 반영.
휠 피커 Wheel Picker SwiftUI: Picker(.wheel) · Flutter: CupertinoPicker · RN: Picker "돌돌 굴려 고르기" 시간을 휠 피커로. 시·분이 각각 굴러가고 가운데 값이 선택되게.
칩 Chip · Tag Flutter: Chip / FilterChip · SwiftUI·RN 커스텀 "둥근 알약 라벨" 관심사를 칩으로 여러 개. 누르면 채워지고(선택), 여러 개 고를 수 있게.
별점 Rating · "별 다섯 개" 후기 별점을 다섯 개로. 반 개 단위 허용, 탭과 드래그 둘 다로 매기게.
수량 스텝퍼 Stepper SwiftUI: Stepper · Flutter·RN 커스텀 "− 숫자 +" 장바구니 수량을 스텝퍼로. 1 미만은 못 내려가게, 재고 넘으면 + 비활성.
사진 업로드 Photo / File Upload iOS: PhotosPicker · Flutter: image_picker · RN: expo-image-picker "사진 올리기" 프로필 사진 업로드를 넣어줘. 갤러리·카메라 선택 시트, 권한 거부 시 안내까지.

⑥ 누르는 것 11

프라이머리 버튼

Primary Button
"꽉 찬 색 버튼" · "제일 중요한 버튼" 색으로 꽉 찬 대표 버튼. 한 화면의 가장 중요한 행동 하나에만 쓴다.
결제 화면 하단 고정 바에 '결제하기' 프라이머리 버튼을 폭 꽉 차게 넣어줘.

세컨더리 버튼

Secondary Button
"테두리만 버튼" · "두 번째 버튼" 테두리만 있는 보조 버튼. 프라이머리 옆 두 번째 선택지.
프라이머리 옆에 '나중에' 세컨더리 버튼을 테두리만으로 나란히 넣어줘.

텍스트 버튼

Text · Ghost Button
"배경 없는 글자 버튼" · "취소 같은 것" 배경 없이 글자만 있는 가벼운 버튼. '취소'·'건너뛰기'에 쓴다.
모달 좌상단에 '취소'를 텍스트 버튼으로 배경 없이 넣어줘.

디스트럭티브 버튼

Destructive Button
"삭제 빨간 버튼" · "위험한 행동" 삭제·탈퇴처럼 되돌리기 어려운 행동에 쓰는 빨간 버튼. 보통 확인을 한 번 더 받는다.
계정 삭제를 디스트럭티브 버튼(빨강)으로, 누르면 액션시트로 한 번 더 확인받게.
SwiftUI: role: .destructive · 확인은 confirmationDialog

아이콘 버튼

Icon Button
"아이콘만 있는 버튼" · "그림 버튼" 글자 없이 아이콘만 있는 버튼. 앱바나 툴바에 흔하다.
앱바 오른쪽에 공유 아이콘 버튼을 넣고, 탭 영역은 44pt 이상 확보해줘.

FAB (플로팅 버튼)

Floating Action Button
"오른쪽 아래 동그란 +" · "떠 있는 버튼" 화면 오른쪽 아래에 떠 있는 대표 행동 버튼. 한 화면에 하나만.
목록 화면 오른쪽 아래에 + FAB을 하나 두고, 누르면 새 글 모달을 올려줘.
Flutter: FloatingActionButton · SwiftUI·RN 커스텀(overlay)

탭 타깃

Tap Target
"누르는 영역 크기" · "너무 작아서 안 눌림" 손가락이 정확히 누를 수 있는 최소 영역. iOS 44pt, Android 48dp(px 아님).
작은 아이콘 버튼들의 탭 타깃을 최소 44pt로 키워줘. 아이콘은 그대로, 눌리는 영역만.
↔ 픽셀이 아니라 pt/dp 기준. 보이는 크기와 눌리는 영역은 다르다

비활성 상태

disabled
"회색으로 못 누르게" · "조건 안 되면 막기" 조건이 안 될 때 못 누르게 하는 회색 상태.
약관 미동의면 다음 버튼을 비활성(회색·안 눌림)으로, 동의하면 활성화되게.

로딩 버튼

loading button
"누르면 스피너 도는 버튼" · "제출 중 잠금" 제출 중에 스피너를 돌리고 다시 못 누르게 잠그는 버튼. 중복 제출을 막는다.
제출 버튼을 누르면 로딩 상태로 잠그고 스피너를 돌려줘. 끝나면 원래대로.
↔ 이걸 빼먹으면 사용자가 두 번 눌러 중복 요청이 나간다

햅틱

Haptic
"누를 때 진동" · "톡 하는 진동" 중요한 행동에 주는 짧은 진동 피드백. 성공·경고·선택마다 세기가 다르다.
결제 성공에 성공 햅틱, 유효성 실패에 경고 햅틱을 넣어줘.
iOS: UIFeedbackGenerator · Flutter: HapticFeedback · RN: Haptics
한글영문네이티브이렇게 말해도AI에게 이렇게
프라이머리 버튼 Primary Button · "꽉 찬 색 버튼" 결제 화면 하단 고정 바에 '결제하기' 프라이머리 버튼을 폭 꽉 차게 넣어줘.
세컨더리 버튼 Secondary Button · "테두리만 버튼" 프라이머리 옆에 '나중에' 세컨더리 버튼을 테두리만으로 나란히 넣어줘.
텍스트 버튼 Text · Ghost Button · "배경 없는 글자 버튼" 모달 좌상단에 '취소'를 텍스트 버튼으로 배경 없이 넣어줘.
디스트럭티브 버튼 Destructive Button SwiftUI: role: .destructive · 확인은 confirmationDialog "삭제 빨간 버튼" 계정 삭제를 디스트럭티브 버튼(빨강)으로, 누르면 액션시트로 한 번 더 확인받게.
아이콘 버튼 Icon Button · "아이콘만 있는 버튼" 앱바 오른쪽에 공유 아이콘 버튼을 넣고, 탭 영역은 44pt 이상 확보해줘.
FAB (플로팅 버튼) Floating Action Button Flutter: FloatingActionButton · SwiftUI·RN 커스텀(overlay) "오른쪽 아래 동그란 +" 목록 화면 오른쪽 아래에 + FAB을 하나 두고, 누르면 새 글 모달을 올려줘.
메뉴 Menu · Context Menu SwiftUI: Menu · Flutter: PopupMenuButton · RN: 커스텀 "더보기 눌러 나오는 목록" 항목 오른쪽 ⋯ 를 누르면 수정·공유·삭제 메뉴가 뜨게. 삭제는 디스트럭티브로.
탭 타깃 Tap Target · "누르는 영역 크기" 작은 아이콘 버튼들의 탭 타깃을 최소 44pt로 키워줘. 아이콘은 그대로, 눌리는 영역만.
비활성 상태 disabled · "회색으로 못 누르게" 약관 미동의면 다음 버튼을 비활성(회색·안 눌림)으로, 동의하면 활성화되게.
로딩 버튼 loading button · "누르면 스피너 도는 버튼" 제출 버튼을 누르면 로딩 상태로 잠그고 스피너를 돌려줘. 끝나면 원래대로.
햅틱 Haptic iOS: UIFeedbackGenerator · Flutter: HapticFeedback · RN: Haptics "누를 때 진동" 결제 성공에 성공 햅틱, 유효성 실패에 경고 햅틱을 넣어줘.

⑦ 위에 띄우는 것 9

바텀시트

Bottom Sheet
"아래에서 반쯤 올라오는 판" · "손잡이 있는 시트" 화면 아래에서 올라오는 판. 위에 손잡이가 있고, 높이를 단계로 조절하기도 한다.
필터를 바텀시트로. 반높이·전체높이 두 단계, 위 손잡이로 끌어 조절, 바깥 탭하면 닫힘. 안에 입력칸이 있으면 키보드가 올라올 때 시트째 그 위로.
SwiftUI: .presentationDetents · Flutter: showModalBottomSheet · RN: BottomSheet

액션시트

Action Sheet
"아래에서 뜨는 선택지 목록" · "삭제할까요 같은 목록" 화면 아래에서 뜨는 선택지 목록. 위험한 행동 확인에 자주 쓴다.
삭제를 누르면 액션시트로 '삭제(빨강)'와 '취소'를 띄워줘.
SwiftUI: confirmationDialog · Flutter: showModalBottomSheet · iOS UIAlertController(.actionSheet)

알럿

Alert Dialog
"가운데 뜨는 확인창" · "예/아니오 창" 화면 가운데 뜨는 작은 확인창. 제목·설명·버튼 1~2개.
저장하지 않고 나갈 때 알럿으로 '변경사항을 버릴까요?' 확인을 받아줘.
SwiftUI: .alert · Flutter: showDialog(AlertDialog) · RN: Alert

팝오버

Popover
"눌러서 여는 작은 판" · "말풍선 판" 누른 요소 옆에 붙어 뜨는 작은 판. 아이패드·큰 화면에서 특히.
정보 아이콘을 누르면 팝오버로 짧은 설명 판이 그 옆에 뜨게 해줘.

툴팁

Tooltip
"꾹 누르면 뜨는 설명" · "작은 도움말" 요소를 꾹 누르면 잠깐 뜨는 작은 설명 말풍선.
낯선 아이콘을 길게 누르면 툴팁으로 이름이 뜨게 해줘.

토스트 · 스낵바

Toast · Snackbar
"잠깐 떴다 사라지는 알림" · "아래 뜨는 메시지" 잠깐 떴다 사라지는 알림. 스낵바는 되돌리기 같은 버튼을 하나 달 수 있다.
삭제하면 스낵바로 '삭제됨'과 '실행취소' 버튼을 3초간 띄워줘.
Flutter: SnackBar · SwiftUI·RN 커스텀 오버레이

로딩 오버레이

Loading Overlay
"화면 전체 막고 기다리기" · "처리 중 막기" 화면 전체를 잠깐 막고 기다리게 하는 층. 남발하면 답답하니 꼭 필요할 때만.
결제 처리 중에만 로딩 오버레이로 화면을 막고 가운데 스피너를 띄워줘.

스크림 · 백드롭

Scrim · Backdrop
"뒤를 어둡게 덮는 층" · "바깥 어두운 부분" 시트나 모달 뒤를 어둡게 덮는 반투명 층. 탭하면 대개 닫힌다.
바텀시트 뒤에 스크림을 깔고, 스크림을 탭하면 시트가 닫히게 해줘.
한글영문네이티브이렇게 말해도AI에게 이렇게
모달 (풀스크린) Modal (fullscreen) · "전체를 덮는 창" 이미지 뷰어를 풀스크린 모달로. 위에서 아래로 쓸어내리면 닫히게.
바텀시트 Bottom Sheet SwiftUI: .presentationDetents · Flutter: showModalBottomSheet · RN: BottomSheet "아래에서 반쯤 올라오는 판" 필터를 바텀시트로. 반높이·전체높이 두 단계, 위 손잡이로 끌어 조절, 바깥 탭하면 닫힘. 안에 입력칸이 있으면 키보드가 올라올 때 시트째 그 위로.
액션시트 Action Sheet SwiftUI: confirmationDialog · Flutter: showModalBottomSheet · iOS UIAlertController(.actionSheet) "아래에서 뜨는 선택지 목록" 삭제를 누르면 액션시트로 '삭제(빨강)'와 '취소'를 띄워줘.
알럿 Alert Dialog SwiftUI: .alert · Flutter: showDialog(AlertDialog) · RN: Alert "가운데 뜨는 확인창" 저장하지 않고 나갈 때 알럿으로 '변경사항을 버릴까요?' 확인을 받아줘.
팝오버 Popover · "눌러서 여는 작은 판" 정보 아이콘을 누르면 팝오버로 짧은 설명 판이 그 옆에 뜨게 해줘.
툴팁 Tooltip · "꾹 누르면 뜨는 설명" 낯선 아이콘을 길게 누르면 툴팁으로 이름이 뜨게 해줘.
토스트 · 스낵바 Toast · Snackbar Flutter: SnackBar · SwiftUI·RN 커스텀 오버레이 "잠깐 떴다 사라지는 알림" 삭제하면 스낵바로 '삭제됨'과 '실행취소' 버튼을 3초간 띄워줘.
로딩 오버레이 Loading Overlay · "화면 전체 막고 기다리기" 결제 처리 중에만 로딩 오버레이로 화면을 막고 가운데 스피너를 띄워줘.
스크림 · 백드롭 Scrim · Backdrop · "뒤를 어둡게 덮는 층" 바텀시트 뒤에 스크림을 깔고, 스크림을 탭하면 시트가 닫히게 해줘.

⑧ 상태 · 표시 10

스피너

Spinner · Activity Indicator
"빙글빙글 도는 것" · "로딩 표시" 빙글빙글 도는 로딩 표시. 짧은 대기에 쓴다.
데이터 불러오는 동안 가운데 스피너를 띄우고, 오면 목록으로 바꿔줘.
SwiftUI: ProgressView · Flutter: CircularProgressIndicator · RN: ActivityIndicator

프로그레스 바

Progress Bar
"차오르는 막대" · "몇 퍼센트 표시" 진행률을 채워지는 막대로 보여 주는 것. 끝을 아는 작업에 쓴다.
업로드 진행을 프로그레스 바로. 퍼센트 숫자도 옆에 같이.
↔ 얼마 남았는지 알면 프로그레스 바, 모르면 스피너

스켈레톤

Skeleton
"회색 네모 반짝" · "내용 자리 미리보기" 내용이 올 자리를 회색 네모로 미리 반짝이게 보여 주는 것. 스피너보다 세련됐다.
목록 로딩 중에 실제 카드 모양의 스켈레톤을 반짝이게 보여주고, 오면 교체해줘.

배지

Badge
"안 읽은 개수" · "빨간 숫자 점" 아이콘 모서리에 붙는 작은 숫자나 점. 안 읽은 개수 알림에 쓴다.
탭바 알림 아이콘에 안 읽은 개수 배지를, 99 넘으면 99+ 로 표시해줘.
SwiftUI: .badge · Flutter: Badge · RN: 커스텀

스트릭

Streak
"연속 기록" · "며칠째 이어 한 날" 며칠 연속으로 했는지 큰 숫자와 이번 주 요일 칸으로 보여 주는 표시. 끊기기 전에 다시 들어오게 만든다.
홈 위쪽에 연속 일수를 큰 숫자로, 그 아래 일~토 칸을 두고 한 날은 체크로 채운 스트릭을 넣어줘. 오늘 아직 안 했으면 오늘 칸만 비워 둬.
공식 컴포넌트 없음 · 직접 그린다 (iOS 는 WidgetKit 으로 홈 화면 위젯까지)

엠프티 스테이트

Empty State
"내용 없을 때 화면" · "텅 빈 화면" 목록이 비었을 때 보여 주는 화면. 그림·안내 한 줄·행동 버튼으로 다음을 유도한다.
장바구니가 비면 엠프티 스테이트로 그림·'담은 게 없어요'·'구경하러 가기' 버튼을 보여줘.
↔ 이걸 안 만들면 빈 목록이 그냥 흰 화면으로 보여 버그처럼 느껴진다

오프라인 배너

Offline Banner
"인터넷 끊김 안내" · "연결 안 됨 띠" 인터넷이 끊겼을 때 위나 아래에 뜨는 안내 띠. 복구되면 사라진다.
네트워크가 끊기면 상단에 오프라인 배너를, 다시 연결되면 자동으로 내려가게 해줘.

아바타

Avatar
"동그란 프로필" · "프사" 동그란 프로필 이미지. 없으면 이니셜이나 기본 아이콘으로 대체한다.
프로필 아바타를 동그랗게. 이미지 없으면 이름 첫 글자를 배경색과 함께 보여줘.

썸네일

Thumbnail
"작은 미리보기 이미지" · "정사각 작은 사진" 리스트나 그리드에 쓰는 작은 미리보기 이미지. 비율을 고정해 잘라 넣는다.
목록 항목 왼쪽에 정사각 썸네일을. 비율 유지하며 꽉 채워 자르고, 로딩 전엔 회색 자리.

상태 점

Status Dot
"초록 점 빨간 점" · "접속 표시" 살아 있는지·읽었는지를 알려 주는 작은 색 점.
아바타 오른쪽 아래에 온라인이면 초록 상태 점을 겹쳐 보여줘.
한글영문네이티브이렇게 말해도AI에게 이렇게
스피너 Spinner · Activity Indicator SwiftUI: ProgressView · Flutter: CircularProgressIndicator · RN: ActivityIndicator "빙글빙글 도는 것" 데이터 불러오는 동안 가운데 스피너를 띄우고, 오면 목록으로 바꿔줘.
프로그레스 바 Progress Bar · "차오르는 막대" 업로드 진행을 프로그레스 바로. 퍼센트 숫자도 옆에 같이.
스켈레톤 Skeleton · "회색 네모 반짝" 목록 로딩 중에 실제 카드 모양의 스켈레톤을 반짝이게 보여주고, 오면 교체해줘.
배지 Badge SwiftUI: .badge · Flutter: Badge · RN: 커스텀 "안 읽은 개수" 탭바 알림 아이콘에 안 읽은 개수 배지를, 99 넘으면 99+ 로 표시해줘.
스트릭 Streak 공식 컴포넌트 없음 · 직접 그린다 (iOS 는 WidgetKit 으로 홈 화면 위젯까지) "연속 기록" 홈 위쪽에 연속 일수를 큰 숫자로, 그 아래 일~토 칸을 두고 한 날은 체크로 채운 스트릭을 넣어줘. 오늘 아직 안 했으면 오늘 칸만 비워 둬.
엠프티 스테이트 Empty State · "내용 없을 때 화면" 장바구니가 비면 엠프티 스테이트로 그림·'담은 게 없어요'·'구경하러 가기' 버튼을 보여줘.
오프라인 배너 Offline Banner · "인터넷 끊김 안내" 네트워크가 끊기면 상단에 오프라인 배너를, 다시 연결되면 자동으로 내려가게 해줘.
아바타 Avatar · "동그란 프로필" 프로필 아바타를 동그랗게. 이미지 없으면 이름 첫 글자를 배경색과 함께 보여줘.
썸네일 Thumbnail · "작은 미리보기 이미지" 목록 항목 왼쪽에 정사각 썸네일을. 비율 유지하며 꽉 채워 자르고, 로딩 전엔 회색 자리.
상태 점 Status Dot · "초록 점 빨간 점" 아바타 오른쪽 아래에 온라인이면 초록 상태 점을 겹쳐 보여줘.
검수 리포트

"아래에서 올라오는 판"에는 이름이 있다

모바일 앱을 만들다 보면 이런 요청을 하게 된다. "아래에서 반쯤 올라오는 판 만들어줘." AI는 대충 알아듣지만, 그 이름이 바텀시트인 걸 아는 순간 요청이 달라진다. 위에 손잡이, 반높이·전체높이 두 단계, 바깥 탭하면 닫힘까지 한 번에 통한다.

app-menu는 그 말을 정식 명칭으로 옮기는 사전이다. ui-menu의 모바일판. 웹이 아니라 iOS·안드로이드 앱 UI를 다룬다.

웹과 앱은 관례가 다르다

이 사전이 웹용 ui-menu와 갈라지는 지점이다. 같은 단어라도 앱에서는 다르게 동작한다.

그래서 웹 요청을 앱에 그대로 심으면 어색해진다. 이 사전은 그 경계를 짚어 앱 관례로 바꿔 제안한다.

네이티브 이름까지 연결한다

app-menu의 차별점은 네이티브 매핑이다. 76항목 중 39항목에 SwiftUI·Flutter·React Native의 실제 컴포넌트명이 붙어 있다.

Expo나 Flutter로 앱을 만들 때, 이름만 알면 프레임워크 컴포넌트로 바로 이어진다.

모바일이 자주 빠뜨리는 것

앱 UI에는 웹에 없는 관례가 있고, AI가 특히 자주 빠뜨린다. 이 사전은 그것들을 체크리스트로 붙였다.

다시 켜게 만드는 부품

0.3.0에서 셋을 더했다. 사람들이 앱을 다음 날 다시 여는 자리에 쓰는 부품이다.

알림을 눌렀을 때 그 화면으로 바로 여는 딥링크, 안 읽은 개수를 붙이는 배지와 같이 쓴다.

쓰는 법 세 가지