Ver3.5 ๐ฑ ๋ชจ๋ฐ์ผ UI/UX ๋์์ธ ์์ ์ ๋ณต: Material Design & Human Interface Guidelines ์ค์ ์ ์ฉ ๊ฐ์ด๋

๐ฑ ๋ชจ๋ฐ์ผ UI/UX ๋์์ธ ์์ ์ ๋ณต: Material Design & Human Interface Guidelines ์ค์ ์ ์ฉ ๊ฐ์ด๋
์ฑ ๋์์ธ์ ๋ ๊ฑฐ์ธ โ ๊ตฌ๊ธ Material Design๊ณผ ์ ํ HIG๋ฅผ ์น๊ตฌ์ฒ๋ผ ์ฝ๊ฒ ํํค์ณ๋ณด์! ๐จโจ
์ผ, ์์งํ ๋งํด๋ด. ์ฑ ๋ง๋ค๋ค๊ฐ "์ด๊ฑฐ ์ด๋ป๊ฒ ๋์์ธํด์ผ ํ์ง?" ํ๊ณ ๋ฉ๋๋ฆฐ ์ ์์ง ์์? ๐
๋ฒํผ ํฌ๊ธฐ๋ ์ผ๋ง๋ก ํด์ผ ํ๊ณ , ์์์ ์ด๋ป๊ฒ ๊ณจ๋ผ์ผ ํ๊ณ , ๋ค๋น๊ฒ์ด์
์ ์ด๋๋ค ๋์์ผ ํ๊ณ โฆ
์ด๋ฐ ๊ณ ๋ฏผ๋ค, ์ฌ์ค ๊ตฌ๊ธ์ด๋ ์ ํ์ด ์ด๋ฏธ ๋ค ์ ๋ฆฌํด๋จ์ด. ๊ทธ๊ฒ ๋ฐ๋ก Material Design์ด๋ Human Interface Guidelines(HIG)์ผ.
์ค๋์ ์ด ๋ ๊ฐ์ด๋๋ผ์ธ์ ์์ ํ ๋ฏ์ด๋ณด๋ฉด์, ์ค์ ์ฑ ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋์ง ๋ฑ๋ฑ์ด ํํค์ณ๋ณผ ๊ฑฐ์ผ.
์ปคํผ ํ ์ ๋ค๊ณ ํธํ๊ฒ ์์๋ด. ๊ธธ์ง๋ง ์ฝ๊ณ ๋๋ฉด ์ง์ง ๋ฌ๋ผ์ง ๊ฑฐ์ผ! โ
์ฑ์ ๋ง๋ค ๋ ๋์์ธ์ "๊ฐ"์ผ๋ก๋ง ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์์งํ ๋งํ๋ฉด ๋๋ถ๋ถ ๋งํด. ๐
์ฌ์ฉ์๋ค์ ์ด๋ฏธ ์๋ฐฑ ๊ฐ์ ์ฑ์ ์จ๋ดค๊ณ , ๊ทธ ๊ฒฝํ์์ "์ด ๋ฒํผ์ ์ด๋ ๊ฒ ์๊ฒผ์ผ๋ฉด ์ด๋ฐ ๋์์ ํ๊ฒ ์ง"๋ผ๋ ๊ธฐ๋๊ฐ์ด ์๊ฒจ์์ด.
์ด๊ฑธ ๋ฉํ ๋ชจ๋ธ(Mental Model)์ด๋ผ๊ณ ํ๋๋ฐ, ์ด ๊ธฐ๋๋ฅผ ๊นจ๋ฒ๋ฆฌ๋ฉด ์ฌ์ฉ์๋ ํผ๋์ค๋ฌ์ํ๊ณ ์ฑ์ ๋ ๋๋ฒ๋ ค.
์ผ๊ด์ฑ(Consistency) ยท ์์ธก ๊ฐ๋ฅ์ฑ(Predictability) ยท ์ ๊ทผ์ฑ(Accessibility) ยท ํจ์จ์ฑ(Efficiency)์ ๋์์ ๋ฌ์ฑํ๋ ๊ฒ!
๊ตฌ๊ธ๊ณผ ์ ํ์ ๊ฐ์์ ํ๋ซํผ์์ ์์ต ๋ช
์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํด์ "์ด๋ ๊ฒ ํ๋ฉด ์ฌ๋๋ค์ด ์ ์ผ ํธํ๊ฒ ์ด๋ค"๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ด.
๊ทธ๊ฒ ๋ฐ๋ก Material Design(๊ตฌ๊ธ, Android)๊ณผ Human Interface Guidelines(์ ํ, iOS/macOS)์ผ.
์ด ๋ ๊ฐ์ด๋๋ผ์ธ์ ์ดํดํ๋ฉด ๋จ์ํ "์์ ์ฑ"์ด ์๋๋ผ "์ฌ์ฉ์๊ฐ ์ง๊ด์ ์ผ๋ก ์ธ ์ ์๋ ์ฑ"์ ๋ง๋ค ์ ์์ด.
Material Design์ 2014๋
๊ตฌ๊ธ์ด ๋ฐํํ ๋์์ธ ์ธ์ด์ผ. ์ฒ์์ "์ข
์ด์ ์ํฌ"์์ ์๊ฐ์ ๋ฐ์๋ค๊ณ ํ๋๋ฐ, ์ง๊ธ์ Material Design 3 (Material You)๊น์ง ๋ฐ์ ํ์ด.
ํต์ฌ ์ฒ ํ์ "๋ฌผ๋ฆฌ์ ์ธ๊ณ์ ๋ฒ์น์ ๋์งํธ์ ์ ์ฉํ์"์ผ. ๊ทธ๋ฆผ์, ๊น์ด๊ฐ, ์์ง์ โ ์ด๋ฐ ๊ฒ๋ค์ด ๋ค ํ์ค ์ธ๊ณ์ ๋ฌผ๋ฆฌ ๋ฒ์น์์ ์์ด.
Material Design์์ ๋ชจ๋ ์ฌ๋ฐฑ๊ณผ ํฌ๊ธฐ๋ 8dp(density-independent pixel)์ ๋ฐฐ์๋ก ์์ง์ฌ.
์ 8์ด๋๊ณ ? ๋๋ถ๋ถ์ ํ๋ฉด ํด์๋๊ฐ 8์ ๋ฐฐ์๋ก ๋๋ ์ง๊ธฐ ๋๋ฌธ์ด์ผ. 4dp๋ ํ์ฉ๋์ง๋ง ๊ธฐ๋ณธ์ 8dp์ผ.
๊ธฐ๋ณธ ์ฌ๋ฐฑ ๋จ์: 8dp (์ต์ 4dp)
์ปดํฌ๋ํธ ๋์ด: 48dp (ํฐ์น ํ๊ฒ ์ต์๊ฐ), 56dp (๊ธฐ๋ณธ ๋ฒํผ), 64dp (์ฑ๋ฐ)
ํ๋ฉด ์ข์ฐ ์ฌ๋ฐฑ: 16dp (๋ชจ๋ฐ์ผ), 24dp (ํ๋ธ๋ฆฟ)
์นด๋ ๋ด๋ถ ํจ๋ฉ: 16dp
์น์
๊ฐ๊ฒฉ: 24dp ~ 32dp
์ด๊ฒ ์ ์ค์ํ๋๋ฉด, ๊ฐ๋ฐ์๊ฐ ๋์์ด๋์ ์์์ ๋ณด๊ณ ์ฝ๋๋ก ์ฎ๊ธธ ๋ "์ด ์ฌ๋ฐฑ์ด ์ ํํ ๋ช ํฝ์
์ด์ผ?"๋ผ๋ ์ง๋ฌธ์ด ์ฌ๋ผ์ ธ.
8์ ๋ฐฐ์๋ผ๋ ๊ท์น๋ง ์๋ฉด ๋๋ถ๋ถ ๋ง์๋จ์ด์ง๊ฑฐ๋ . ํ์
ํจ์จ์ด ์์ฒญ๋๊ฒ ์ฌ๋ผ๊ฐ!
Material Design 3์์ ์์ ์์คํ
์ด ์์ ํ ๋ฐ๋์์ด. Dynamic Color๋ผ๋ ๊ฐ๋
์ด ๋์
๋๋๋ฐ, ์ฌ์ฉ์์ ๋ฐฐ๊ฒฝํ๋ฉด ์์์ ๋ถ์ํด์ ์ฑ ์ ์ฒด ์์ ํ๋ ํธ๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค.
์ด๊ฒ ๋ฐ๋ก "Material You"์ ํต์ฌ์ด์ผ!
์ฃผ์ ์ก์ , ๋ฒํผ, ํ์ฑ ์ํ์ ์ฌ์ฉ๋๋ ํต์ฌ ์์
๋ณด์กฐ ์ ๋ณด, ํํฐ ์นฉ, ๋ ๊ฐ์กฐ๋๋ ์์์ ์ฌ์ฉ
๋๋น๋ฅผ ์ํ ์ธ ๋ฒ์งธ ์์, ๊ฐ์กฐ ํฌ์ธํธ
Material Design 3์ ์์ ์์คํ
์๋ ์ด 5๊ฐ์ง ์์ ์ญํ ์ด ์์ด: Primary, Secondary, Tertiary, Error, Neutral.
๊ฐ ์์๋ง๋ค Container, On-Color ๋ณํ์ด ์์ด์ ์ด 29๊ฐ์ง ์์ ํ ํฐ์ด ์์ฑ๋ผ. ๋ณต์กํด ๋ณด์ด์ง๋ง ์ค์ ๋ก ์ฐ๋ค ๋ณด๋ฉด ์์ฒญ ์ฒด๊ณ์ ์ด์ผ.
// Material Design 3 ์์ ํ ํฐ ์์ (Kotlin/Compose)
val colorScheme = lightColorScheme(
primary = Color(0xFF6750A4),
onPrimary = Color(0xFFFFFFFF),
primaryContainer = Color(0xFFEADDFF),
onPrimaryContainer = Color(0xFF21005D),
secondary = Color(0xFF625B71),
surface = Color(0xFFFFFBFE),
error = Color(0xFFB3261E)
)
Material Design 3์ ํ์ดํฌ๊ทธ๋ํผ๋ 5๊ฐ์ง ์ค์ผ์ผ๋ก ๊ตฌ์ฑ๋ผ: Display, Headline, Title, Body, Label.
๊ฐ ์ค์ผ์ผ๋ง๋ค Large, Medium, Small ๋ณํ์ด ์์ด์ ์ด 15๊ฐ์ง ํ
์คํธ ์คํ์ผ์ด ์์ด.
| ์ค์ผ์ผ | ํฌ๊ธฐ ๋ฒ์ | ์ฃผ์ ์ฉ๋ |
|---|---|---|
| Display | 57sp / 45sp / 36sp | ํ์ด๋ก ํ ์คํธ, ๋๋ฉ ํ์ด์ง ํ์ดํ |
| Headline | 32sp / 28sp / 24sp | ์น์ ์ ๋ชฉ, ๋ค์ด์ผ๋ก๊ทธ ์ ๋ชฉ |
| Title | 22sp / 16sp / 14sp | ์ฑ๋ฐ ์ ๋ชฉ, ์นด๋ ์ ๋ชฉ, ๋ฆฌ์คํธ ํญ๋ชฉ |
| Body | 16sp / 14sp / 12sp | ๋ณธ๋ฌธ ํ ์คํธ, ์ค๋ช ํ ์คํธ |
| Label | 14sp / 12sp / 11sp | ๋ฒํผ ๋ ์ด๋ธ, ์บก์ , ์ค๋ฒ๋ผ์ธ |
dp(density-independent pixel)๋ ํ๋ฉด ๋ฐ๋์ ๋ ๋ฆฝ์ ์ธ ํฌ๊ธฐ ๋จ์์ผ. sp(scale-independent pixel)๋ dp์ ์ฌ์ฉ์์ ํฐํธ ํฌ๊ธฐ ์ค์ ๊น์ง ๋ฐ์ํด. ํ ์คํธ์๋ ๋ฐ๋์ sp๋ฅผ ์จ์ผ ์ ๊ทผ์ฑ์ด ๋ณด์ฅ๋ผ!
Material Design์ ์ปดํฌ๋ํธ๋ค์ ๊ทธ๋ฅ ์์ UI ์์๊ฐ ์๋์ผ. ๊ฐ๊ฐ ๋ช ํํ ์ฌ์ฉ ๋ชฉ์ ๊ณผ ๊ท์น์ด ์์ด.
Filled Button ๊ฐ์ฅ ๊ฐ์กฐ๋๋ ์ฃผ์ ์ก์
(ํ๋ฉด๋น 1๊ฐ ๊ถ์ฅ)
Filled Tonal Button ๋ ๋ฒ์งธ๋ก ์ค์ํ ์ก์
Outlined Button ์ค๊ฐ ๊ฐ์กฐ, ์ทจ์๋ ๋ณด์กฐ ์ก์
Text Button ๊ฐ์ฅ ๋ฎ์ ๊ฐ์กฐ, ์ธ๋ผ์ธ ์ก์
Elevated Button ๋ฐฐ๊ฒฝ๊ณผ ๊ตฌ๋ถ์ด ํ์ํ ๋
๋ฒํผ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์งํค๋ ๊ฒ ์์ฒญ ์ค์ํด. ํ๋ฉด์ Filled Button์ด 3๊ฐ์ฉ ์์ผ๋ฉด ์ฌ์ฉ์๋ "๋ญ ๋๋ฌ์ผ ํ์ง?" ํ๊ณ ํผ๋์ค๋ฌ์ํด.
ํ ํ๋ฉด์ ์ฃผ์ ์ก์
์ ํ๋! ์ด๊ฒ Material Design์ ํต์ฌ ์์น ์ค ํ๋์ผ.
FAB๋ Material Design์ ์์ง ๊ฐ์ ์กด์ฌ์ผ. ํ๋ฉด์ ์ฃผ์ ์ก์ ์ ๋ํ๋ด๋ ๋ฅ๊ทผ ๋ฒํผ์ธ๋ฐ, ๊ท์น์ด ์์ด:
โ
ํ๋ฉด๋น FAB๋ ์ต๋ 1๊ฐ
โ
ํ๋ฉด์ ๊ฐ์ฅ ์ค์ํ ๋จ์ผ ์ก์
์๋ง ์ฌ์ฉ
โ
์คํฌ๋กค ์ ํ๋ฉด์ ๊ณ ์ ๋์ด์ผ ํจ
โ ํ๊ดด์ ์ธ ์ก์
(์ญ์ ๋ฑ)์๋ ์ฌ์ฉ ๊ธ์ง
โ ๋ค๋น๊ฒ์ด์
๋ชฉ์ ์ผ๋ก ์ฌ์ฉ ๊ธ์ง
Material Design์ ๋ชจ์ ์ ๋จ์ํ "์์๊ฒ ์์ง์ด๋ ๊ฒ"์ด ์๋์ผ. ์๋ฏธ ์๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์๋จ์ด์ผ.
1. Informative(์ ๋ณด์ ): ๊ณต๊ฐ์ ๊ด๊ณ์ ๊ณ์ธต์ ๋ช ํํ ์ ๋ฌ
2. Focused(์ง์ค์ ): ์ค์ํ ์ฝํ ์ธ ์ ์ฃผ์๋ฅผ ์ง์ค
3. Expressive(ํํ์ ): ๋ธ๋๋ ๊ฐ์ฑ๊ณผ ์ฌ์ฉ์ ๊ฐ์ ๋ฐ์
4. Responsive(๋ฐ์์ ): ์ฆ๊ฐ์ ์ด๊ณ ์์ฐ์ค๋ฌ์ด ํผ๋๋ฐฑ
Material Design 3์์๋ Easing Curves(์ด์ง ์ปค๋ธ)๊ฐ ์๋กญ๊ฒ ์ ์๋์ด:
| ์ด์ง ํ์ | ์ง์ ์๊ฐ | ์ฌ์ฉ ์ํฉ |
|---|---|---|
| Emphasized | 500ms | ํ๋ฉด ์ ํ, ์ฃผ์ ์์ ๋ฑ์ฅ |
| Emphasized Decelerate | 400ms | ์์๊ฐ ํ๋ฉด ์์ผ๋ก ๋ค์ด์ฌ ๋ |
| Emphasized Accelerate | 200ms | ์์๊ฐ ํ๋ฉด ๋ฐ์ผ๋ก ๋๊ฐ ๋ |
| Standard | 300ms | ์ผ๋ฐ์ ์ธ ์ํ ๋ณํ |
์ ํ์ HIG๋ 1987๋
์ ์ฒ์ ๋์์ด. ๋ฌด๋ ค 37๋
์ ์ญ์ฌ! ๐ฎ
๊ทธ๋งํผ ๊น์ด๊ฐ ์๊ณ , ์ฒ ํ์ด ํํํด. ์ ํ์ ํต์ฌ ๋์์ธ ์ฒ ํ์ "๊ธฐ์ ์ ์ธ๊ฐ์ ์ํด ์กด์ฌํ๋ค"์ผ.
HIG์ ๋ชจ๋ ์์น์ ์ด ์ฒ ํ์์ ์ถ๋ฐํด.
HIG์์ ์ ์ํ๋ iOS ๋ค๋น๊ฒ์ด์ ์ ํฌ๊ฒ 3๊ฐ์ง์ผ:
์ค์ ์ฑ์ฒ๋ผ ๋ชฉ๋ก โ ์ธ๋ถ ํญ๋ชฉ์ผ๋ก ๋ค์ด๊ฐ๋ ๊ตฌ์กฐ. Navigation Controller + Push/Pop ๋ฐฉ์. ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ด ์ผ์ชฝ ์๋จ์ ์์น.
App Store์ฒ๋ผ ํญ ๋ฐ๋ก ๋ ๋ฆฝ์ ์ธ ์น์ ์ ์ ํํ๋ ๊ตฌ์กฐ. Tab Bar Controller ์ฌ์ฉ. ํญ์ ์ต๋ 5๊ฐ ๊ถ์ฅ.
๊ฒ์์ด๋ ์ฑ ์ฑ์ฒ๋ผ ์ฝํ ์ธ ์์ฒด๊ฐ ๋ค๋น๊ฒ์ด์ ์ ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ. ์ค์์ดํ, ํญ ๋ฑ ์ ์ค์ฒ ๊ธฐ๋ฐ.
์ ํ์ 2019๋
์ SF Symbols๋ฅผ ๋ฐํํ์ด. ํ์ฌ 6,000๊ฐ ์ด์์ ์์ด์ฝ์ด ์๋๋ฐ, ์ด๊ฒ ๋จ์ํ ์์ด์ฝ ์ธํธ๊ฐ ์๋์ผ.
SF ํฐํธ์ ์๋ฒฝํ๊ฒ ์ ๋ ฌ๋๋๋ก ์ค๊ณ๋๊ณ , ๊ตต๊ธฐ(weight)๋ ํฐํธ์ ๋์ผํ๊ฒ 9๋จ๊ณ๋ก ์กฐ์ ๊ฐ๋ฅํด.
Large Title: 34pt ยท Title 1: 28pt ยท Title 2: 22pt ยท Title 3: 20pt
Headline: 17pt (semibold) ยท Body: 17pt ยท Callout: 16pt
Subhead: 15pt ยท Footnote: 13pt ยท Caption 1: 12pt ยท Caption 2: 11pt
์ค์ํ ๊ฑด Dynamic Type์ด์ผ. ์ฌ์ฉ์๊ฐ ์์คํ
์ค์ ์์ ํฐํธ ํฌ๊ธฐ๋ฅผ ๋ฐ๊พธ๋ฉด ์ฑ์ ํ
์คํธ๋ ์๋์ผ๋ก ๋ฐ๋ผ ๋ฐ๋์ด์ผ ํด.
์ด๊ฑธ ์ง์ํ์ง ์์ผ๋ฉด ์ฑ ์ฌ์ฌ์์ ๊ฑฐ์ ๋นํ ์๋ ์์ด! ์ ๊ทผ์ฑ์ ์ ํ์ด ์๋๋ผ ํ์์ผ.
iOS 13๋ถํฐ ๋คํฌ ๋ชจ๋๊ฐ ๋์
๋๊ณ , HIG๋ ๋ชจ๋ ์ฑ์ด ๋คํฌ ๋ชจ๋๋ฅผ ์ง์ํ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํด.
์ ํ์ ์ด๋ฅผ ์ํด Semantic Colors(์๋ฏธ๋ก ์ ์์)๋ฅผ ์ ๊ณตํด:
| ์์ ์ด๋ฆ | ๋ผ์ดํธ ๋ชจ๋ | ๋คํฌ ๋ชจ๋ | ์ฉ๋ |
|---|---|---|---|
| systemBackground | ํฐ์ | ๊ฒ์ | ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ |
| secondarySystemBackground | ์ฐํ ํ์ | ์ด๋์ด ํ์ | ๊ทธ๋ฃนํ๋ ์ฝํ ์ธ ๋ฐฐ๊ฒฝ |
| label | ๊ฒ์ | ํฐ์ | ๊ธฐ๋ณธ ํ ์คํธ |
| secondaryLabel | ํ์ | ๋ฐ์ ํ์ | ๋ณด์กฐ ํ ์คํธ |
| systemBlue | ํ๋์ | ๋ฐ์ ํ๋์ | ๋งํฌ, ์ก์ |
// SwiftUI์์ ๋คํฌ ๋ชจ๋ ๋์ ์์
struct ContentView: View {
var body: some View {
Text("์๋
ํ์ธ์")
.foregroundColor(.primary) // ์๋์ผ๋ก ๋คํฌ/๋ผ์ดํธ ๋์
.background(Color(.systemBackground))
}
}
iOS๋ ์ ์ค์ฒ ๊ธฐ๋ฐ ์ธํฐ๋์ ์ด ํต์ฌ์ด์ผ. HIG์์ ์ ์ํ๋ ํ์ค ์ ์ค์ฒ๋ค:
| ์ ์ค์ฒ | ๋์ | ์ฃผ์์ฌํญ |
|---|---|---|
| ํญ (Tap) | ์์ ์ ํ, ๋ฒํผ ์คํ | ํฐ์น ํ๊ฒ ์ต์ 44ร44pt |
| ๋๋ธ ํญ | ํ๋/์ถ์, ์ข์์ | ๋จ์ผ ํญ๊ณผ ์ถฉ๋ ์ฃผ์ |
| ์ค์์ดํ | ์คํฌ๋กค, ์ญ์ , ๋ค๋ก ๊ฐ๊ธฐ | ์ฃ์ง ์ค์์ดํ๋ ์์คํ ์์ฝ |
| ํ์น | ํ๋/์ถ์ | ์ง๋, ์ด๋ฏธ์ง ๋ทฐ์ด์ ์ ํฉ |
| ๋กฑ ํ๋ ์ค | ์ปจํ ์คํธ ๋ฉ๋ด, ํธ์ง ๋ชจ๋ | ์ฆ๊ฐ์ ์ธ ์๊ฐ ํผ๋๋ฐฑ ํ์ |
| ๋๋๊ทธ | ์ด๋, ์ ๋ ฌ | ํ ํฑ ํผ๋๋ฐฑ ๊ถ์ฅ |
์, ์ด์ ๋ ๊ฐ์ด๋๋ผ์ธ์ ์ง์ ๋น๊ตํด๋ณด์. ๊ฐ์ ๊ธฐ๋ฅ์ด๋ผ๋ ํ๋ซํผ๋ง๋ค ๊ตฌํ ๋ฐฉ์์ด ๋ฌ๋ผ!
๊ฐ์ "๊ฒฝ๊ณ ๋ฉ์์ง"๋ ํ๋ซํผ๋ง๋ค ์์ ํ ๋ฌ๋ผ:
โข ๋ค์ด์ผ๋ก๊ทธ ์ ๋ชฉ: ์ผ์ชฝ ์ ๋ ฌ
โข ๋ฒํผ: ์ค๋ฅธ์ชฝ ์ ๋ ฌ, ํ ์คํธ ๋ฒํผ
โข ์ต๋ 3๊ฐ ๋ฒํผ (Positive/Negative/Neutral)
โข ๋ฐฐ๊ฒฝ ๋ค ์ฒ๋ฆฌ
โข ๋ฅ๊ทผ ๋ชจ์๋ฆฌ (28dp)
โข ์ ๋ชฉ: ๊ฐ์ด๋ฐ ์ ๋ ฌ
โข ๋ฒํผ: ๊ฐ๋ก ๋๋ ์ธ๋ก ๋ฐฐ์น
โข ์ต๋ 2๊ฐ ๋ฒํผ ๊ถ์ฅ
โข ๋ธ๋ฌ ๋ฐฐ๊ฒฝ ์ฒ๋ฆฌ
โข ๋ฅ๊ทผ ๋ชจ์๋ฆฌ (13pt)
๋ฆฌ์คํธ ์์ดํ ๋์ด๋ ๋ฌ๋ผ:
Material Design: ๋จ์ผ ๋ผ์ธ 56dp, 2๋ผ์ธ 72dp, 3๋ผ์ธ 88dp
HIG: ๊ธฐ๋ณธ 44pt, ์๋ธํ์ดํ ์์ผ๋ฉด ์๋ ์กฐ์ (Auto Layout ๊ธฐ๋ฐ)
React Native๋ Flutter๋ก ํฌ๋ก์ค ํ๋ซํผ ์ฑ์ ๋ง๋ค ๋, ๊ฐ ํ๋ซํผ์ ๊ฐ์ด๋๋ผ์ธ์ ๋ชจ๋ ๋ฐ๋ฅด๋ ค๋ฉด ํ๋ซํผ๋ณ ๋ถ๊ธฐ ์ฒ๋ฆฌ๊ฐ ํ์ํด. Flutter์ ๊ฒฝ์ฐ
Platform.isIOS๋ก ๋ถ๊ธฐํ๊ฑฐ๋, Cupertino ์์ ฏ(iOS)๊ณผ Material ์์ ฏ(Android)์ ๊ฐ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์จ.
์ ๊ทผ์ฑ์ "์ฅ์ ์ธ์ ์ํ ๊ฒ"์ด๋ผ๊ณ ์๊ฐํ๋ ์ฌ๋๋ค์ด ๋ง์๋ฐ, ๊ทธ๊ฑด ๋ฐ๋ง ๋ง์.
์ ๊ทผ์ฑ์ ์ ๊ตฌํํ๋ฉด ๋ชจ๋ ์ฌ์ฉ์์ ๊ฒฝํ์ด ์ข์์ ธ. ๋ฐ์ ํ๋น ์๋์ ํ๋ฉด ๋ณด๊ธฐ, ํ ์์ผ๋ก ํฐ ์ฌ์ฉํ๊ธฐ, ๋
ธ์ด์ฆ ์บ์ฌ๋ง ์ด์ดํฐ ๋ผ๊ณ ์๋ฆฌ ๋ชป ๋ฃ๋ ์ํฉ โ ์ด๋ฐ ๊ฒ๋ค๋ ๋ค ์ ๊ทผ์ฑ ๋ฌธ์ ์ผ.
์์ ๋๋น๋น: ์ผ๋ฐ ํ
์คํธ 4.5:1 ์ด์, ํฐ ํ
์คํธ(18sp+) 3:1 ์ด์
ํฐ์น ํ๊ฒ: ์ต์ 48ร48dp, ์์ ๊ฐ ๊ฐ๊ฒฉ 8dp ์ด์
์ฝํ
์ธ ๋ ์ด๋ธ: ๋ชจ๋ ์ด๋ฏธ์ง์ ์์ด์ฝ์ contentDescription ํ์
ํฌ์ปค์ค ์์: ๋
ผ๋ฆฌ์ ์ธ ํค๋ณด๋/์ค์์น ํฌ์ปค์ค ์์ ์ ์ง
// Android ์ ๊ทผ์ฑ ์์
<ImageButton
android:contentDescription="๊ฒ์ ๋ฒํผ"
android:minWidth="48dp"
android:minHeight="48dp"
android:src="@drawable/ic_search" />
// Jetpack Compose ์ ๊ทผ์ฑ
Icon(
imageVector = Icons.Default.Search,
contentDescription = "๊ฒ์",
modifier = Modifier.semantics {
contentDescription = "๊ฒ์ ๋ฒํผ"
}
)
์ ํ์ ์ ๊ทผ์ฑ์ ํนํ ๊ฐํด. VoiceOver(ํ๋ฉด ์ฝ๊ธฐ), Switch Control, Dynamic Type, Reduce Motion ๋ฑ ๋ค์ํ ์ ๊ทผ์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํด.
VoiceOver ์ง์: ๋ชจ๋ UI ์์์ accessibilityLabel ์ค์
Dynamic Type: ํ
์คํธ ํฌ๊ธฐ ๋ณ๊ฒฝ์ ๋ ์ด์์์ด ๊นจ์ง์ง ์์์ผ ํจ
Reduce Motion: ์ ๋๋ฉ์ด์
์ค์ด๊ธฐ ์ค์ ์ ๋์ ์ ๊ณต
์์ ๋๋น: WCAG 2.1 AA ๊ธฐ์ค ์ค์ (4.5:1)
// SwiftUI ์ ๊ทผ์ฑ ์์
Button(action: { search() }) {
Image(systemName: "magnifyingglass")
}
.accessibilityLabel("๊ฒ์")
.accessibilityHint("ํญํ๋ฉด ๊ฒ์ ํ๋ฉด์ด ์ด๋ฆฝ๋๋ค")
.frame(minWidth: 44, minHeight: 44) // ์ต์ ํฐ์น ํ๊ฒ
์ ํ ์ฑ ์ฌ์ฌ์์ ์ ๊ทผ์ฑ ๋ฌธ์ ๋ก ๊ฑฐ์ ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฐ๋ณด๋ค ๋ง์. ํนํ VoiceOver ์ง์์ด ์ ๋๊ฑฐ๋, ํฐ์น ํ๊ฒ์ด ๋๋ฌด ์๊ฑฐ๋, Dynamic Type์ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ. ๊ฐ๋ฐ ์ด๊ธฐ๋ถํฐ ์ ๊ทผ์ฑ์ ๊ณ ๋ คํด์ผ ํด!
์ด๋ก ์ ์ถฉ๋ถํ ๋ดค์ผ๋, ์ด์ ์ค์ ์ฑ ํ๋ฉด์ ๋ง๋ค ๋ ์ด๋ป๊ฒ ์ ์ฉํ๋์ง ๋ณด์!
๋ก๊ทธ์ธ, ํ์๊ฐ์ , ์ค์ ํ๋ฉด ๊ฐ์ ํผ ํ๋ฉด์ ๋ ํ๋ซํผ์์ ์ ๊ทผ ๋ฐฉ์์ด ๋ฌ๋ผ:
โข Outlined TextField: ํ ๋๋ฆฌ๊ฐ ์๋ ์ ๋ ฅ ํ๋
โข Filled TextField: ๋ฐฐ๊ฒฝ์ด ์ฑ์์ง ์ ๋ ฅ ํ๋
โข ๋ผ๋ฒจ์ด ํฌ์ปค์ค ์ ์๋ก ์ฌ๋ผ๊ฐ๋ ์ ๋๋ฉ์ด์
โข ์๋ฌ ๋ฉ์์ง๋ ํ๋ ์๋ ๋นจ๊ฐ์์ผ๋ก
โข ๋์๋ง ํ ์คํธ๋ ํ๋ ์๋ ํ์์ผ๋ก
โข Grouped Table View: ์น์ ๋ณ๋ก ๊ทธ๋ฃนํ
โข Inset Grouped: ๋ฅ๊ทผ ๋ชจ์๋ฆฌ์ ๊ทธ๋ฃน ์คํ์ผ
โข ํ๋ ์ด์คํ๋ ํ ์คํธ๋ก ํํธ ์ ๊ณต
โข ์๋ฌ๋ Alert ๋๋ ์ธ๋ผ์ธ ๋ฉ์์ง
โข ํค๋ณด๋ ํ์ ์๋ ์ง์ (์ด๋ฉ์ผ, ์ซ์ ๋ฑ)
// Material Design TextField (Jetpack Compose)
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("์ด๋ฉ์ผ") },
isError = !isValidEmail,
supportingText = {
if (!isValidEmail) Text("์ฌ๋ฐ๋ฅธ ์ด๋ฉ์ผ ํ์์ด ์๋๋๋ค")
},
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email)
)
// HIG TextField (SwiftUI)
TextField("์ด๋ฉ์ผ", text: $email)
.keyboardType(.emailAddress)
.textContentType(.emailAddress)
.autocapitalization(.none)
์๋ฌ ํ๋ฉด๊ณผ ๋น ์ํ(Empty State) ํ๋ฉด๋ ์ค์ํด. ์ฌ์ฉ์๊ฐ ๋งํ์ ๋ ์ด๋ป๊ฒ ์๋ดํ๋๋๊ฐ UX์ ํต์ฌ์ด์ผ.
1. ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ๋ช ํํ๊ฒ ์ค๋ช (๊ธฐ์ ์ ์ฉ์ด ๊ธ์ง!)
2. ์ ์ด๋ฐ ์ํฉ์ด ๋๋์ง ๊ฐ๋จํ ์ค๋ช
3. ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง ๋ช ํํ ์ก์ ๋ฒํผ ์ ๊ณต
์๋ฅผ ๋ค์ด "Error 404" ๋์ "ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์์ด์. ์ฃผ์๋ฅผ ๋ค์ ํ์ธํด์ฃผ์ธ์." ์ด๋ฐ ์์ผ๋ก!
๊ทธ๋ฆฌ๊ณ ๋น ์ํ ํ๋ฉด์๋ ์ผ๋ฌ์คํธ๋ ์์ด์ฝ์ ๋ฃ์ด์ ์๊ฐ์ ์ผ๋ก ํ์ฑํ๊ฒ ๋ง๋ค์ด์ค.
์ด์ ์ข ๋ ์ฌํ ๋ด์ฉ์ผ๋ก ๋ค์ด๊ฐ๋ณด์. ์ค์ ํ์์ ์ผํ๋ค ๋ณด๋ฉด ๋์์ด๋์ ๊ฐ๋ฐ์ ์ฌ์ด์ "์ด ์์์ด ์ ํํ ๋ญ์ผ?", "์ด ์ฌ๋ฐฑ์ด ๋ช ํฝ์
์ด์ผ?" ๊ฐ์ ์ํต ๋ฌธ์ ๊ฐ ์๊ฒจ.
์ด๊ฑธ ํด๊ฒฐํ๋ ๊ฒ ๋ฐ๋ก ๋์์ธ ํ ํฐ(Design Token)์ด์ผ.
๋์์ธ ํ ํฐ์ ์์, ํ์ดํฌ๊ทธ๋ํผ, ์ฌ๋ฐฑ, ๊ทธ๋ฆผ์ ๋ฑ์ ๋์์ธ ๊ฒฐ์ ์ ์ด๋ฆ ์๋ ๋ณ์๋ก ์ ์ฅํ ๊ฒ์ด์ผ.
"#6750A4" ๋์ "color-primary"๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฑฐ์ผ. ์ด๋ ๊ฒ ํ๋ฉด:
โ
๋์์ด๋์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ์ธ์ด๋ก ์ํต
โ
ํ
๋ง ๋ณ๊ฒฝ ์ ํ ๊ณณ๋ง ์์ ํ๋ฉด ์ ์ฒด ์ ์ฉ
โ
๋คํฌ ๋ชจ๋, ๋ธ๋๋ ๋ณ๊ฒฝ ๋ฑ ์ ์ฐํ๊ฒ ๋์
โ
ํ๋ซํผ ๊ฐ ์ผ๊ด์ฑ ์ ์ง
// ๋์์ธ ํ ํฐ ์์ (JSON ํ์)
{
"color": {
"primary": { "value": "#6750A4" },
"primary-container": { "value": "#EADDFF" },
"on-primary": { "value": "#FFFFFF" },
"surface": { "value": "#FFFBFE" }
},
"spacing": {
"xs": { "value": "4dp" },
"sm": { "value": "8dp" },
"md": { "value": "16dp" },
"lg": { "value": "24dp" },
"xl": { "value": "32dp" }
}
}
์์ ํ๋ ํธ, ํ์ดํฌ๊ทธ๋ํผ ์ค์ผ์ผ, ์ฌ๋ฐฑ ์์คํ , ๊ทธ๋ฆผ์ ๋ ๋ฒจ ๋ฑ ๊ธฐ๋ณธ ๊ฐ๋ค์ ์ ์ํด.
๊ธฐ๋ฐ ํ ํฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํด. "color-blue-500" โ "color-primary", "spacing-16" โ "spacing-card-padding"
ํน์ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ ํ ํฐ. "button-primary-background", "card-border-radius" ๋ฑ
ํ ํฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ค์ ๋ง๋ค์ด. Figma ์ปดํฌ๋ํธ + ์ฝ๋ ์ปดํฌ๋ํธ ๋๊ธฐํ.
์ธ์ , ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๋ช ํํ ๊ฐ์ด๋๋ผ์ธ ๋ฌธ์ํ. ๋ณ๊ฒฝ ์ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค ์๋ฆฝ.
๋ชจ๋ฐ์ผ ์ฑ์ด๋ผ๊ณ ํด์ ์ค๋งํธํฐ๋ง ์๊ฐํ๋ฉด ์ ๋ผ. ํ๋ธ๋ฆฟ, ํด๋๋ธ ํฐ, ์ฌ์ง์ด TV๊น์ง ๊ณ ๋ คํด์ผ ํด.
Material Design๊ณผ HIG ๋ชจ๋ ์ด์ ๋ํ ๊ฐ์ด๋๋ผ์ธ์ด ์์ด.
Material Design 3๋ Canonical Layouts(ํ์ค ๋ ์ด์์)์ ์ ๊ณตํด:
| ํ๋ฉด ํฌ๊ธฐ | ๋๋น | ๋ ์ด์์ ํจํด |
|---|---|---|
| Compact (์ค๋งํธํฐ) | 0 ~ 599dp | ๋จ์ผ ์ปฌ๋ผ, ํ๋จ ๋ค๋น๊ฒ์ด์ |
| Medium (ํด๋๋ธ/์ํ ํ๋ธ๋ฆฟ) | 600 ~ 839dp | 2์ปฌ๋ผ, ๋ค๋น๊ฒ์ด์ ๋ ์ผ |
| Expanded (ํ๋ธ๋ฆฟ/๋ฐ์คํฌํฑ) | 840dp+ | 3์ปฌ๋ผ, ์๊ตฌ ๋ค๋น๊ฒ์ด์ ๋๋ก์ด |
ํนํ Navigation Rail์ ํ๋ธ๋ฆฟ์์ ํ๋จ ๋ค๋น๊ฒ์ด์ ๋ฐ๋ฅผ ๋์ฒดํ๋ ์์์ผ. ํ๋ฉด ์ผ์ชฝ์ ์ธ๋ก๋ก ๋ฐฐ์น๋๋ ๋ค๋น๊ฒ์ด์ ์ด์ผ.
iOS๋ Size Classes๋ก ๋ ์ด์์์ ๊ด๋ฆฌํด:
Compact Width + Compact Height: iPhone ๊ฐ๋ก ๋ชจ๋
Compact Width + Regular Height: iPhone ์ธ๋ก ๋ชจ๋
Regular Width + Compact Height: iPad ๋ถํ ํ๋ฉด (1/3)
Regular Width + Regular Height: iPad ์ ์ฒด ํ๋ฉด
// SwiftUI Size Class ๋์
@Environment(\.horizontalSizeClass) var horizontalSizeClass
var body: some View {
if horizontalSizeClass == .compact {
// iPhone ๋ ์ด์์
VStack { ... }
} else {
// iPad ๋ ์ด์์
HStack { ... }
}
}
์ด๋ก ์ ์์๋ ์ค๋ฌด์์ ์๊พธ ๊ฐ์ ์ค์๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์. ๋ด๊ฐ ์์ฃผ ๋ณด๋ ์ค์๋ค์ ์ ๋ฆฌํด๋ดค์ด!
1. ์คํฌ๋กค ๊ฐ๋ฅ ์ฌ๋ถ ๋ถ๋ช
ํ: ์คํฌ๋กค์ด ๊ฐ๋ฅํ ์์ญ์ธ์ง ์๋์ง ์๊ฐ์ ํํธ๊ฐ ์์ด์ ์ฌ์ฉ์๊ฐ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ
โ ์ฝํ
์ธ ๊ฐ ์๋ฆฌ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ฑฐ๋, ์คํฌ๋กค ์ธ๋์ผ์ดํฐ๋ฅผ ํ์ฉํด
2. ํค๋ณด๋๊ฐ ์
๋ ฅ ํ๋๋ฅผ ๊ฐ๋ฆฌ๋ ๋ฌธ์ : ํผ ํ๋ฉด์์ ํค๋ณด๋๊ฐ ์ฌ๋ผ์ค๋ฉด ์
๋ ฅ ํ๋๊ฐ ๊ฐ๋ ค์ง๋ ๊ฒฝ์ฐ
โ KeyboardAvoidingView(RN), WindowInsets(Compose), adjustResize(Android) ์ฒ๋ฆฌ ํ์
3. ๋
ธ์น/๋ค์ด๋๋ฏน ์์ผ๋๋ ๋ฌด์: iPhone X ์ดํ ๋
ธ์น ์์ญ์ ๊ณ ๋ คํ์ง ์์ UI๊ฐ ๊ฐ๋ ค์ง๋ ๊ฒฝ์ฐ
โ Safe Area Insets ๋ฐ๋์ ์ ์ฉ
4. ํ
์คํธ ์๋ฆผ ์ฒ๋ฆฌ ๋ฏธํก: ๊ธด ํ
์คํธ๊ฐ ์๋ฆด ๋ "..." ์ฒ๋ฆฌ ์์ด ๊ทธ๋ฅ ์๋ฆฌ๋ ๊ฒฝ์ฐ
โ ellipsis ์ฒ๋ฆฌ + ์ต๋ ๋ผ์ธ ์ ์ค์
์ด๋ก ์ ์ค์ ๋ก ์ ์ฉํ๋ ค๋ฉด ์ข์ ๋๊ตฌ๊ฐ ํ์ํด. ํ์ ์์ ๋ง์ด ์ฐ๋ ๋๊ตฌ๋ค์ ์ ๋ฆฌํด๋ดค์ด!
| ๋๊ตฌ | ํน์ง | ์ถ์ฒ ๋์ |
|---|---|---|
| Figma | ํ์ ์ต๊ฐ, Material Design 3 ํคํธ ๊ณต์ ์ ๊ณต, ๋ฌด๋ฃ ํ๋ ์์ | ํ ํ์ , ํ๋กํ ํ์ดํ |
| Sketch | macOS ์ ์ฉ, iOS ๋์์ธ์ ์ต์ ํ, ํ๋ฌ๊ทธ์ธ ์ํ๊ณ ํ๋ถ | iOS ์ฑ ๋์์ด๋ |
| Adobe XD | Adobe ์ํ๊ณ ์ฐ๋, ์๋ ์ ๋๋ฉ์ด์ ๊ธฐ๋ฅ | Adobe ์ฌ์ฉ์ |
| Framer | ์ฝ๋ ๊ธฐ๋ฐ ํ๋กํ ํ์ดํ, ์ค์ ์ฑ์ ๊ฐ๊น์ด ์ธํฐ๋์ | ๊ณ ๊ธ ํ๋กํ ํ์ดํ |
Jetpack Compose Android ๋ค์ดํฐ๋ธ UI, Material Design 3 ์๋ฒฝ ์ง์
SwiftUI iOS ๋ค์ดํฐ๋ธ UI, HIG ์๋ฒฝ ์ง์, ์ ์ธํ ๋ฌธ๋ฒ
Flutter ํฌ๋ก์ค ํ๋ซํผ, Material + Cupertino ์์ ฏ ๋ชจ๋ ์ ๊ณต
React Native ํฌ๋ก์ค ํ๋ซํผ, ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ ์ ๊ทผ ๊ฐ๋ฅ
Material UI (MUI) React ์น์ฉ Material Design ๊ตฌํ์ฒด
๐ Material Design ๊ณต์ ์ฌ์ดํธ: m3.material.io
๐ Apple HIG ๊ณต์ ์ฌ์ดํธ: developer.apple.com/design/human-interface-guidelines
๐ Material Theme Builder: ์์ ํ๋ ํธ ์๋ ์์ฑ ๋๊ตฌ
๐ SF Symbols ์ฑ: Mac App Store์์ ๋ฌด๋ฃ ๋ค์ด๋ก๋
๐ Figma Material Design 3 Kit: Figma Community์์ ๋ฌด๋ฃ ์ ๊ณต
๋ง์ง๋ง์ผ๋ก ์์ผ๋ก์ ํธ๋ ๋๋ฅผ ์ดํด๋ณด์. ๋์์ธ ๊ฐ์ด๋๋ผ์ธ๋ ๊ณ์ ์งํํ๊ณ ์์ด!
Dynamic Color์ ํ์ฅ: ๋ ๋ง์ ์ฑ์์ ์ฌ์ฉ์ ๋ง์ถคํ ์์ ์ ์ฉ
Adaptive Components: ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ์๋์ผ๋ก ๋ณํ๋๋ ์ปดํฌ๋ํธ
Expressive Motion: ๋ ํ๋ถํ๊ณ ๊ฐ์ฑ ์๋ ์ ๋๋ฉ์ด์
์ง์
AI ํตํฉ UI ํจํด: AI ๊ธฐ๋ฅ์ ์ํ ์๋ก์ด UI ์ปดํฌ๋ํธ (๋ก๋ฉ ์ํ, ์์ฑ ์ค ํ์ ๋ฑ)
visionOS ๊ฐ์ด๋๋ผ์ธ: Apple Vision Pro๋ฅผ ์ํ ๊ณต๊ฐ ์ปดํจํ
UI ํจํด
AI/ML ํตํฉ: Core ML ๊ธฐ๋ฐ ๊ธฐ๋ฅ์ ์ํ UI ํจํด
Live Activities: Dynamic Island์ ์ ๊ธ ํ๋ฉด ์์ ฏ ๋์์ธ
Interactive Widgets: ํ ํ๋ฉด ์์ ฏ์์ ์ง์ ์ธํฐ๋์
๊ฐ๋ฅ
AI ์๋ต ์คํธ๋ฆฌ๋ฐ, ์์ฑ ์ค ์ํ, ๋ถํ์ค์ฑ ํํ์ ์ํ ์๋ก์ด UI ํจํด
๋ฒ์ ์๊ตฌ์ฌํญ ๊ฐํ๋ก ์ ๊ทผ์ฑ์ด ์ ํ์ด ์๋ ํ์๊ฐ ๋๋ ์ถ์ธ
๋คํฌ ๋ชจ๋, ๋ฐฐํฐ๋ฆฌ ์ ์ฝ ๋ชจ๋ ๋ฑ ์๋์ง ํจ์จ์ ๊ณ ๋ คํ ๋์์ธ
์, ์ฌ๊ธฐ๊น์ง ์ฝ์๋ค๋ฉด ์ง์ง ๋๋จํ ๊ฑฐ์ผ! ๐ ๋ง์ง๋ง์ผ๋ก ํต์ฌ์ ์ ๋ฆฌํด๋ณผ๊ฒ.
1๏ธโฃ ๊ฐ์ด๋๋ผ์ธ์ ์ ์ฝ์ด ์๋๋ผ ๋๊ตฌ์ผ. ์ฐฝ์์ฑ์ ์ ํํ๋ ๊ฒ ์๋๋ผ, ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๊ธฐ๋ฐ์ด์ผ.
2๏ธโฃ ํ๋ซํผ ๋ค์ดํฐ๋ธ ํจํด์ ์กด์คํด. Android ์ฑ์ Material Design, iOS ์ฑ์ HIG๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ ์ฌ์ฉ์ ๊ธฐ๋์ ๋ง์.
3๏ธโฃ ์ ๊ทผ์ฑ์ ์ฒ์๋ถํฐ ๊ณ ๋ คํด์ผ ํด. ๋์ค์ ์ถ๊ฐํ๋ ค๋ฉด ๋น์ฉ์ด 10๋ฐฐ์ผ.
4๏ธโฃ 8dp/pt ๊ทธ๋ฆฌ๋ ์์คํ ์ ์ง์ผ. ์ฌ๋ฐฑ๊ณผ ํฌ๊ธฐ์ ์ผ๊ด์ฑ์ด ์ ๋ฌธ์ ์ธ ์ฑ์ ๋ง๋ค์ด.
5๏ธโฃ ๋์์ธ ํ ํฐ์ผ๋ก ์์คํ ์ ๊ตฌ์ถํด. ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฑ์ ๊ธฐ๋ฐ์ด์ผ.
6๏ธโฃ ๊ณต์ ๋ฌธ์๋ฅผ ์์ฃผ ํ์ธํด. ๋ ๊ฐ์ด๋๋ผ์ธ ๋ชจ๋ ๊ณ์ ์ ๋ฐ์ดํธ๋๊ณ ์์ด!
Material Design๊ณผ HIG, ์ฒ์์ ๋ณต์กํด ๋ณด์ด์ง๋ง ํ๋์ฉ ์ ์ฉํ๋ค ๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋ชธ์ ๋ฐฐ๊ฒ ๋ผ.
์ค๋ ๋ฐฐ์ด ๋ด์ฉ ์ค ํ๋๋ผ๋ ๋ฐ๋ก ํ๋ก์ ํธ์ ์ ์ฉํด๋ด. ์์ ๋ณํ๊ฐ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด! ๐ช
์ฑ ๊ฐ๋ฐํ๋ค๊ฐ ๋งํ๋ ๋ถ๋ถ ์์ผ๋ฉด ์ธ์ ๋ ์ง ๊ณต์ ๋ฌธ์ ๋จผ์ ์ฐพ์๋ด. ๊ตฌ๊ธ์ด๋ ์ ํ์ด ์ด๋ฏธ ๋ค ๋ต์ ์จ๋จ๊ฑฐ๋ . ๐
Material Design + HIG = ์ฌ์ฉ์๊ฐ ์ฌ๋ํ๋ ์ฑ์ ๋น๋ฐ ๊ณต์ โจ
๊ด๋ จ ํค์๋
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.

๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.