์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ UI/UX ๋””์ž์ธ ์™„์ „์ •๋ณต: Material Design & Human Interface Guidelines ์‹ค์ „ ์ ์šฉ ๊ฐ€์ด๋“œ

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ UI/UX ๋””์ž์ธ ์™„์ „์ •๋ณต: Material Design & Human Interface Guidelines ์‹ค์ „ ์ ์šฉ ๊ฐ€์ด๋“œ

์•ฑ ๋””์ž์ธ์˜ ๋‘ ๊ฑฐ์ธ โ€” ๊ตฌ๊ธ€ Material Design๊ณผ ์• ํ”Œ HIG๋ฅผ ์นœ๊ตฌ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ ํŒŒํ—ค์ณ๋ณด์ž! ๐ŸŽจโœจ

์•ผ, ์†”์งํžˆ ๋งํ•ด๋ด. ์•ฑ ๋งŒ๋“ค๋‹ค๊ฐ€ "์ด๊ฑฐ ์–ด๋–ป๊ฒŒ ๋””์ž์ธํ•ด์•ผ ํ•˜์ง€?" ํ•˜๊ณ  ๋ฉ๋•Œ๋ฆฐ ์  ์žˆ์ง€ ์•Š์•„? ๐Ÿ˜…
๋ฒ„ํŠผ ํฌ๊ธฐ๋Š” ์–ผ๋งˆ๋กœ ํ•ด์•ผ ํ•˜๊ณ , ์ƒ‰์ƒ์€ ์–ด๋–ป๊ฒŒ ๊ณจ๋ผ์•ผ ํ•˜๊ณ , ๋„ค๋น„๊ฒŒ์ด์…˜์€ ์–ด๋””๋‹ค ๋†“์•„์•ผ ํ•˜๊ณ โ€ฆ
์ด๋Ÿฐ ๊ณ ๋ฏผ๋“ค, ์‚ฌ์‹ค ๊ตฌ๊ธ€์ด๋ž‘ ์• ํ”Œ์ด ์ด๋ฏธ ๋‹ค ์ •๋ฆฌํ•ด๋†จ์–ด. ๊ทธ๊ฒŒ ๋ฐ”๋กœ Material Design์ด๋ž‘ Human Interface Guidelines(HIG)์•ผ.

์˜ค๋Š˜์€ ์ด ๋‘ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์™„์ „ํžˆ ๋œฏ์–ด๋ณด๋ฉด์„œ, ์‹ค์ œ ์•ฑ ๊ฐœ๋ฐœ์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ๋‚ฑ๋‚ฑ์ด ํŒŒํ—ค์ณ๋ณผ ๊ฑฐ์•ผ.
์ปคํ”ผ ํ•œ ์ž” ๋“ค๊ณ  ํŽธํ•˜๊ฒŒ ์•‰์•„๋ด. ๊ธธ์ง€๋งŒ ์ฝ๊ณ  ๋‚˜๋ฉด ์ง„์งœ ๋‹ฌ๋ผ์งˆ ๊ฑฐ์•ผ! โ˜•


๐ŸŒ 1. UI/UX ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ผ์ธ์ด ์™œ ํ•„์š”ํ•œ๊ฐ€?

์•ฑ์„ ๋งŒ๋“ค ๋•Œ ๋””์ž์ธ์„ "๊ฐ"์œผ๋กœ๋งŒ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์†”์งํžˆ ๋งํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ๋งํ•ด. ๐Ÿ˜‚
์‚ฌ์šฉ์ž๋“ค์€ ์ด๋ฏธ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์•ฑ์„ ์จ๋ดค๊ณ , ๊ทธ ๊ฒฝํ—˜์—์„œ "์ด ๋ฒ„ํŠผ์€ ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์œผ๋ฉด ์ด๋Ÿฐ ๋™์ž‘์„ ํ•˜๊ฒ ์ง€"๋ผ๋Š” ๊ธฐ๋Œ€๊ฐ’์ด ์ƒ๊ฒจ์žˆ์–ด.
์ด๊ฑธ ๋ฉ˜ํƒˆ ๋ชจ๋ธ(Mental Model)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ด ๊ธฐ๋Œ€๋ฅผ ๊นจ๋ฒ„๋ฆฌ๋ฉด ์‚ฌ์šฉ์ž๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜๊ณ  ์•ฑ์„ ๋– ๋‚˜๋ฒ„๋ ค.

๐Ÿ’ก ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ผ์ธ์˜ ํ•ต์‹ฌ ์—ญํ• 
์ผ๊ด€์„ฑ(Consistency) ยท ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ(Predictability) ยท ์ ‘๊ทผ์„ฑ(Accessibility) ยท ํšจ์œจ์„ฑ(Efficiency)์„ ๋™์‹œ์— ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ!

๊ตฌ๊ธ€๊ณผ ์• ํ”Œ์€ ๊ฐ์ž์˜ ํ”Œ๋žซํผ์—์„œ ์ˆ˜์–ต ๋ช…์˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•ด์„œ "์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์ œ์ผ ํŽธํ•˜๊ฒŒ ์“ด๋‹ค"๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์–ด.
๊ทธ๊ฒŒ ๋ฐ”๋กœ Material Design(๊ตฌ๊ธ€, Android)๊ณผ Human Interface Guidelines(์• ํ”Œ, iOS/macOS)์•ผ.

์ด ๋‘ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ดํ•ดํ•˜๋ฉด ๋‹จ์ˆœํžˆ "์˜ˆ์œ ์•ฑ"์ด ์•„๋‹ˆ๋ผ "์‚ฌ์šฉ์ž๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ์•ฑ"์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด.

๋ชจ๋ฐ”์ผ ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ผ์ธ ์ƒํƒœ๊ณ„ ๐Ÿค– Material Design Google ยท Android ยท Web ๐Ÿ“ ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ & ์—ฌ๋ฐฑ ๊ทœ์น™ ๐ŸŽจ ์ƒ‰์ƒ & ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์‹œ์Šคํ…œ โœจ ๋ชจ์…˜ & ์• ๋‹ˆ๋ฉ”์ด์…˜ ์›์น™ ๐Ÿงฉ ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๐ŸŽ Human Interface Guidelines Apple ยท iOS ยท macOS ยท watchOS ๐Ÿ– ์ œ์Šค์ฒ˜ & ํ„ฐ์น˜ ์ธํ„ฐ๋ž™์…˜ ๐Ÿ”ค SF ํฐํŠธ & ํƒ€์ดํฌ ์‹œ์Šคํ…œ ๐ŸŒ™ ๋‹คํฌ๋ชจ๋“œ & ์ ‘๊ทผ์„ฑ ๐Ÿ“ฑ ๋„ค์ดํ‹ฐ๋ธŒ UI ์ปดํฌ๋„ŒํŠธ VS ๊ณตํ†ต ๋ชฉํ‘œ: ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์ตœ์ ํ™” ยท ์ผ๊ด€์„ฑ ยท ์ ‘๊ทผ์„ฑ

๐Ÿค– 2. Material Design ์™„์ „ ํ•ด๋ถ€

Material Design์€ 2014๋…„ ๊ตฌ๊ธ€์ด ๋ฐœํ‘œํ•œ ๋””์ž์ธ ์–ธ์–ด์•ผ. ์ฒ˜์Œ์—” "์ข…์ด์™€ ์ž‰ํฌ"์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ง€๊ธˆ์€ Material Design 3 (Material You)๊นŒ์ง€ ๋ฐœ์ „ํ–ˆ์–ด.
ํ•ต์‹ฌ ์ฒ ํ•™์€ "๋ฌผ๋ฆฌ์  ์„ธ๊ณ„์˜ ๋ฒ•์น™์„ ๋””์ง€ํ„ธ์— ์ ์šฉํ•˜์ž"์•ผ. ๊ทธ๋ฆผ์ž, ๊นŠ์ด๊ฐ, ์›€์ง์ž„ โ€” ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ๋‹ค ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฌผ๋ฆฌ ๋ฒ•์น™์—์„œ ์™”์–ด.

๐Ÿ“ 2-1. ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ๊ณผ ์—ฌ๋ฐฑ (Spacing & Layout)

Material Design์—์„œ ๋ชจ๋“  ์—ฌ๋ฐฑ๊ณผ ํฌ๊ธฐ๋Š” 8dp(density-independent pixel)์˜ ๋ฐฐ์ˆ˜๋กœ ์›€์ง์—ฌ.
์™œ 8์ด๋ƒ๊ณ ? ๋Œ€๋ถ€๋ถ„์˜ ํ™”๋ฉด ํ•ด์ƒ๋„๊ฐ€ 8์˜ ๋ฐฐ์ˆ˜๋กœ ๋‚˜๋ˆ ์ง€๊ธฐ ๋•Œ๋ฌธ์ด์•ผ. 4dp๋„ ํ—ˆ์šฉ๋˜์ง€๋งŒ ๊ธฐ๋ณธ์€ 8dp์•ผ.

๐Ÿ“ 8dp ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ ํ•ต์‹ฌ ๊ทœ์น™

๊ธฐ๋ณธ ์—ฌ๋ฐฑ ๋‹จ์œ„: 8dp (์ตœ์†Œ 4dp)
์ปดํฌ๋„ŒํŠธ ๋†’์ด: 48dp (ํ„ฐ์น˜ ํƒ€๊ฒŸ ์ตœ์†Œ๊ฐ’), 56dp (๊ธฐ๋ณธ ๋ฒ„ํŠผ), 64dp (์•ฑ๋ฐ”)
ํ™”๋ฉด ์ขŒ์šฐ ์—ฌ๋ฐฑ: 16dp (๋ชจ๋ฐ”์ผ), 24dp (ํƒœ๋ธ”๋ฆฟ)
์นด๋“œ ๋‚ด๋ถ€ ํŒจ๋”ฉ: 16dp
์„น์…˜ ๊ฐ„๊ฒฉ: 24dp ~ 32dp

์ด๊ฒŒ ์™œ ์ค‘์š”ํ•˜๋ƒ๋ฉด, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””์ž์ด๋„ˆ์˜ ์‹œ์•ˆ์„ ๋ณด๊ณ  ์ฝ”๋“œ๋กœ ์˜ฎ๊ธธ ๋•Œ "์ด ์—ฌ๋ฐฑ์ด ์ •ํ™•ํžˆ ๋ช‡ ํ”ฝ์…€์ด์•ผ?"๋ผ๋Š” ์งˆ๋ฌธ์ด ์‚ฌ๋ผ์ ธ.
8์˜ ๋ฐฐ์ˆ˜๋ผ๋Š” ๊ทœ์น™๋งŒ ์•Œ๋ฉด ๋Œ€๋ถ€๋ถ„ ๋งž์•„๋–จ์–ด์ง€๊ฑฐ๋“ . ํ˜‘์—… ํšจ์œจ์ด ์—„์ฒญ๋‚˜๊ฒŒ ์˜ฌ๋ผ๊ฐ€!

๐ŸŽจ 2-2. ์ƒ‰์ƒ ์‹œ์Šคํ…œ (Color System)

Material Design 3์—์„œ ์ƒ‰์ƒ ์‹œ์Šคํ…œ์ด ์™„์ „ํžˆ ๋ฐ”๋€Œ์—ˆ์–ด. Dynamic Color๋ผ๋Š” ๊ฐœ๋…์ด ๋„์ž…๋๋Š”๋ฐ, ์‚ฌ์šฉ์ž์˜ ๋ฐฐ๊ฒฝํ™”๋ฉด ์ƒ‰์ƒ์„ ๋ถ„์„ํ•ด์„œ ์•ฑ ์ „์ฒด ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค˜.
์ด๊ฒŒ ๋ฐ”๋กœ "Material You"์˜ ํ•ต์‹ฌ์ด์•ผ!

๐ŸŽฏ
Primary
์ฃผ์š” ์•ก์…˜, ๋ฒ„ํŠผ, ํ™œ์„ฑ ์ƒํƒœ์— ์‚ฌ์šฉ๋˜๋Š” ํ•ต์‹ฌ ์ƒ‰์ƒ
๐ŸŒŠ
Secondary
๋ณด์กฐ ์ •๋ณด, ํ•„ํ„ฐ ์นฉ, ๋œ ๊ฐ•์กฐ๋˜๋Š” ์š”์†Œ์— ์‚ฌ์šฉ
โœจ
Tertiary
๋Œ€๋น„๋ฅผ ์œ„ํ•œ ์„ธ ๋ฒˆ์งธ ์ƒ‰์ƒ, ๊ฐ•์กฐ ํฌ์ธํŠธ

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)

)
โœ๏ธ 2-3. ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์‹œ์Šคํ…œ

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 ๋ฒ„ํŠผ ๋ ˆ์ด๋ธ”, ์บก์…˜, ์˜ค๋ฒ„๋ผ์ธ
๐Ÿ’ก sp vs dp ์ฐจ์ด ์•Œ์•„?
dp(density-independent pixel)๋Š” ํ™”๋ฉด ๋ฐ€๋„์— ๋…๋ฆฝ์ ์ธ ํฌ๊ธฐ ๋‹จ์œ„์•ผ. sp(scale-independent pixel)๋Š” dp์— ์‚ฌ์šฉ์ž์˜ ํฐํŠธ ํฌ๊ธฐ ์„ค์ •๊นŒ์ง€ ๋ฐ˜์˜ํ•ด. ํ…์ŠคํŠธ์—๋Š” ๋ฐ˜๋“œ์‹œ sp๋ฅผ ์จ์•ผ ์ ‘๊ทผ์„ฑ์ด ๋ณด์žฅ๋ผ!
๐Ÿงฉ 2-4. ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋“ค

Material Design์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๊ทธ๋ƒฅ ์˜ˆ์œ UI ์š”์†Œ๊ฐ€ ์•„๋‹ˆ์•ผ. ๊ฐ๊ฐ ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ ๋ชฉ์ ๊ณผ ๊ทœ์น™์ด ์žˆ์–ด.

๐Ÿ”˜ ๋ฒ„ํŠผ (Button) ๊ณ„์ธต ๊ตฌ์กฐ

Filled Button ๊ฐ€์žฅ ๊ฐ•์กฐ๋˜๋Š” ์ฃผ์š” ์•ก์…˜ (ํ™”๋ฉด๋‹น 1๊ฐœ ๊ถŒ์žฅ)

Filled Tonal Button ๋‘ ๋ฒˆ์งธ๋กœ ์ค‘์š”ํ•œ ์•ก์…˜

Outlined Button ์ค‘๊ฐ„ ๊ฐ•์กฐ, ์ทจ์†Œ๋‚˜ ๋ณด์กฐ ์•ก์…˜

Text Button ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ•์กฐ, ์ธ๋ผ์ธ ์•ก์…˜

Elevated Button ๋ฐฐ๊ฒฝ๊ณผ ๊ตฌ๋ถ„์ด ํ•„์š”ํ•  ๋•Œ

๋ฒ„ํŠผ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ง€ํ‚ค๋Š” ๊ฒŒ ์—„์ฒญ ์ค‘์š”ํ•ด. ํ™”๋ฉด์— Filled Button์ด 3๊ฐœ์”ฉ ์žˆ์œผ๋ฉด ์‚ฌ์šฉ์ž๋Š” "๋ญ˜ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜์ง€?" ํ•˜๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•ด.
ํ•œ ํ™”๋ฉด์— ์ฃผ์š” ์•ก์…˜์€ ํ•˜๋‚˜! ์ด๊ฒŒ Material Design์˜ ํ•ต์‹ฌ ์›์น™ ์ค‘ ํ•˜๋‚˜์•ผ.

๐Ÿ“‹ 2-5. FAB (Floating Action Button)

FAB๋Š” Material Design์˜ ์ƒ์ง• ๊ฐ™์€ ์กด์žฌ์•ผ. ํ™”๋ฉด์˜ ์ฃผ์š” ์•ก์…˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ฅ๊ทผ ๋ฒ„ํŠผ์ธ๋ฐ, ๊ทœ์น™์ด ์žˆ์–ด:

โœ… ํ™”๋ฉด๋‹น FAB๋Š” ์ตœ๋Œ€ 1๊ฐœ
โœ… ํ™”๋ฉด์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋‹จ์ผ ์•ก์…˜์—๋งŒ ์‚ฌ์šฉ
โœ… ์Šคํฌ๋กค ์‹œ ํ™”๋ฉด์— ๊ณ ์ •๋˜์–ด์•ผ ํ•จ
โŒ ํŒŒ๊ดด์ ์ธ ์•ก์…˜(์‚ญ์ œ ๋“ฑ)์—๋Š” ์‚ฌ์šฉ ๊ธˆ์ง€
โŒ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ธˆ์ง€

โœจ 2-6. ๋ชจ์…˜ & ์• ๋‹ˆ๋ฉ”์ด์…˜ ์›์น™

Material Design์˜ ๋ชจ์…˜์€ ๋‹จ์ˆœํžˆ "์˜ˆ์˜๊ฒŒ ์›€์ง์ด๋Š” ๊ฒƒ"์ด ์•„๋‹ˆ์•ผ. ์˜๋ฏธ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ˆ˜๋‹จ์ด์•ผ.

๐ŸŽฌ Material Design ๋ชจ์…˜์˜ 4๊ฐ€์ง€ ์›์น™
1. Informative(์ •๋ณด์ ): ๊ณต๊ฐ„์  ๊ด€๊ณ„์™€ ๊ณ„์ธต์„ ๋ช…ํ™•ํžˆ ์ „๋‹ฌ
2. Focused(์ง‘์ค‘์ ): ์ค‘์š”ํ•œ ์ฝ˜ํ…์ธ ์— ์ฃผ์˜๋ฅผ ์ง‘์ค‘
3. Expressive(ํ‘œํ˜„์ ): ๋ธŒ๋žœ๋“œ ๊ฐœ์„ฑ๊ณผ ์‚ฌ์šฉ์ž ๊ฐ์ • ๋ฐ˜์˜
4. Responsive(๋ฐ˜์‘์ ): ์ฆ‰๊ฐ์ ์ด๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด ํ”ผ๋“œ๋ฐฑ

Material Design 3์—์„œ๋Š” Easing Curves(์ด์ง• ์ปค๋ธŒ)๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ •์˜๋์–ด:

์ด์ง• ํƒ€์ž… ์ง€์† ์‹œ๊ฐ„ ์‚ฌ์šฉ ์ƒํ™ฉ
Emphasized 500ms ํ™”๋ฉด ์ „ํ™˜, ์ฃผ์š” ์š”์†Œ ๋“ฑ์žฅ
Emphasized Decelerate 400ms ์š”์†Œ๊ฐ€ ํ™”๋ฉด ์•ˆ์œผ๋กœ ๋“ค์–ด์˜ฌ ๋•Œ
Emphasized Accelerate 200ms ์š”์†Œ๊ฐ€ ํ™”๋ฉด ๋ฐ–์œผ๋กœ ๋‚˜๊ฐˆ ๋•Œ
Standard 300ms ์ผ๋ฐ˜์ ์ธ ์ƒํƒœ ๋ณ€ํ™”

๐ŸŽ 3. Human Interface Guidelines (HIG) ์™„์ „ ํ•ด๋ถ€

์• ํ”Œ์˜ HIG๋Š” 1987๋…„์— ์ฒ˜์Œ ๋‚˜์™”์–ด. ๋ฌด๋ ค 37๋…„์˜ ์—ญ์‚ฌ! ๐Ÿ˜ฎ
๊ทธ๋งŒํผ ๊นŠ์ด๊ฐ€ ์žˆ๊ณ , ์ฒ ํ•™์ด ํƒ„ํƒ„ํ•ด. ์• ํ”Œ์˜ ํ•ต์‹ฌ ๋””์ž์ธ ์ฒ ํ•™์€ "๊ธฐ์ˆ ์€ ์ธ๊ฐ„์„ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค"์•ผ.
HIG์˜ ๋ชจ๋“  ์›์น™์€ ์ด ์ฒ ํ•™์—์„œ ์ถœ๋ฐœํ•ด.

๐ŸŽฏ 3-1. HIG์˜ 6๊ฐ€์ง€ ํ•ต์‹ฌ ์›์น™
๐ŸŽ HIG ํ•ต์‹ฌ ์›์น™ 6๊ฐ€์ง€ ๐ŸŽฏ Aesthetic Integrity ๋ฏธ์  ์™„๊ฒฐ์„ฑ ๋””์ž์ธ๊ณผ ๊ธฐ๋Šฅ์˜ ์กฐํ™” ๐Ÿ”„ Consistency ์ผ๊ด€์„ฑ ํ‘œ์ค€ ํŒจํ„ด๊ณผ ์š”์†Œ ์‚ฌ์šฉ ๐Ÿ– Direct Manipulation ์ง์ ‘ ์กฐ์ž‘ ์ฝ˜ํ…์ธ ๋ฅผ ์ง์ ‘ ํ„ฐ์น˜ยท์กฐ์ž‘ ๐Ÿ’ฌ Feedback ํ”ผ๋“œ๋ฐฑ ๋ชจ๋“  ์•ก์…˜์— ์ฆ‰๊ฐ ๋ฐ˜์‘ ๐Ÿ—บ Metaphors ๋ฉ”ํƒ€ํฌ ํ˜„์‹ค ์„ธ๊ณ„ ๊ฐœ๋… ํ™œ์šฉ ๐Ÿ‘ค User Control ์‚ฌ์šฉ์ž ์ œ์–ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•ญ์ƒ ์ฃผ๋„๊ถŒ ๋ณด์œ  ์ด 6๊ฐ€์ง€ ์›์น™์ด ๋ชจ๋“  iOS ์•ฑ ๋””์ž์ธ์˜ ๊ธฐ๋ฐ˜์ด ๋ผ! ์ถœ์ฒ˜: Apple Human Interface Guidelines (developer.apple.com/design)
๐Ÿ“ฑ 3-2. iOS ๋„ค๋น„๊ฒŒ์ด์…˜ ํŒจํ„ด

HIG์—์„œ ์ •์˜ํ•˜๋Š” iOS ๋„ค๋น„๊ฒŒ์ด์…˜์€ ํฌ๊ฒŒ 3๊ฐ€์ง€์•ผ:

1
๊ณ„์ธต์  ๋„ค๋น„๊ฒŒ์ด์…˜ (Hierarchical Navigation)
์„ค์ • ์•ฑ์ฒ˜๋Ÿผ ๋ชฉ๋ก โ†’ ์„ธ๋ถ€ ํ•ญ๋ชฉ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์กฐ. Navigation Controller + Push/Pop ๋ฐฉ์‹. ๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์ด ์™ผ์ชฝ ์ƒ๋‹จ์— ์œ„์น˜.
2
ํ”Œ๋žซ ๋„ค๋น„๊ฒŒ์ด์…˜ (Flat Navigation)
App Store์ฒ˜๋Ÿผ ํƒญ ๋ฐ”๋กœ ๋…๋ฆฝ์ ์ธ ์„น์…˜์„ ์ „ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ. Tab Bar Controller ์‚ฌ์šฉ. ํƒญ์€ ์ตœ๋Œ€ 5๊ฐœ ๊ถŒ์žฅ.
3
์ฝ˜ํ…์ธ  ์ค‘์‹ฌ ๋„ค๋น„๊ฒŒ์ด์…˜ (Content-Driven Navigation)
๊ฒŒ์ž„์ด๋‚˜ ์ฑ… ์•ฑ์ฒ˜๋Ÿผ ์ฝ˜ํ…์ธ  ์ž์ฒด๊ฐ€ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ์กฐ. ์Šค์™€์ดํ”„, ํƒญ ๋“ฑ ์ œ์Šค์ฒ˜ ๊ธฐ๋ฐ˜.
๐Ÿ”ค 3-3. SF Symbols & ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ

์• ํ”Œ์€ 2019๋…„์— SF Symbols๋ฅผ ๋ฐœํ‘œํ–ˆ์–ด. ํ˜„์žฌ 6,000๊ฐœ ์ด์ƒ์˜ ์•„์ด์ฝ˜์ด ์žˆ๋Š”๋ฐ, ์ด๊ฒŒ ๋‹จ์ˆœํ•œ ์•„์ด์ฝ˜ ์„ธํŠธ๊ฐ€ ์•„๋‹ˆ์•ผ.
SF ํฐํŠธ์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ •๋ ฌ๋˜๋„๋ก ์„ค๊ณ„๋๊ณ , ๊ตต๊ธฐ(weight)๋„ ํฐํŠธ์™€ ๋™์ผํ•˜๊ฒŒ 9๋‹จ๊ณ„๋กœ ์กฐ์ ˆ ๊ฐ€๋Šฅํ•ด.

๐Ÿ”ค iOS ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์Šค์ผ€์ผ (Dynamic Type)
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์ด์•ผ. ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ์„ค์ •์—์„œ ํฐํŠธ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊พธ๋ฉด ์•ฑ์˜ ํ…์ŠคํŠธ๋„ ์ž๋™์œผ๋กœ ๋”ฐ๋ผ ๋ฐ”๋€Œ์–ด์•ผ ํ•ด.
์ด๊ฑธ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด ์•ฑ ์‹ฌ์‚ฌ์—์„œ ๊ฑฐ์ ˆ๋‹นํ•  ์ˆ˜๋„ ์žˆ์–ด! ์ ‘๊ทผ์„ฑ์€ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜์•ผ.

๐ŸŒ™ 3-4. ๋‹คํฌ ๋ชจ๋“œ ์ง€์›

iOS 13๋ถ€ํ„ฐ ๋‹คํฌ ๋ชจ๋“œ๊ฐ€ ๋„์ž…๋๊ณ , HIG๋Š” ๋ชจ๋“  ์•ฑ์ด ๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•  ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ด.
์• ํ”Œ์€ ์ด๋ฅผ ์œ„ํ•ด Semantic Colors(์˜๋ฏธ๋ก ์  ์ƒ‰์ƒ)๋ฅผ ์ œ๊ณตํ•ด:

์ƒ‰์ƒ ์ด๋ฆ„ ๋ผ์ดํŠธ ๋ชจ๋“œ ๋‹คํฌ ๋ชจ๋“œ ์šฉ๋„
systemBackground ํฐ์ƒ‰ ๊ฒ€์ • ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ
secondarySystemBackground ์—ฐํ•œ ํšŒ์ƒ‰ ์–ด๋‘์šด ํšŒ์ƒ‰ ๊ทธ๋ฃนํ™”๋œ ์ฝ˜ํ…์ธ  ๋ฐฐ๊ฒฝ
label ๊ฒ€์ • ํฐ์ƒ‰ ๊ธฐ๋ณธ ํ…์ŠคํŠธ
secondaryLabel ํšŒ์ƒ‰ ๋ฐ์€ ํšŒ์ƒ‰ ๋ณด์กฐ ํ…์ŠคํŠธ
systemBlue ํŒŒ๋ž€์ƒ‰ ๋ฐ์€ ํŒŒ๋ž€์ƒ‰ ๋งํฌ, ์•ก์…˜

// SwiftUI์—์„œ ๋‹คํฌ ๋ชจ๋“œ ๋Œ€์‘ ์˜ˆ์‹œ

struct ContentView: View {

var body: some View {

Text("์•ˆ๋…•ํ•˜์„ธ์š”")

.foregroundColor(.primary) // ์ž๋™์œผ๋กœ ๋‹คํฌ/๋ผ์ดํŠธ ๋Œ€์‘

.background(Color(.systemBackground))

}

}
๐Ÿ– 3-5. ์ œ์Šค์ฒ˜ ์ธํ„ฐ๋ž™์…˜

iOS๋Š” ์ œ์Šค์ฒ˜ ๊ธฐ๋ฐ˜ ์ธํ„ฐ๋ž™์…˜์ด ํ•ต์‹ฌ์ด์•ผ. HIG์—์„œ ์ •์˜ํ•˜๋Š” ํ‘œ์ค€ ์ œ์Šค์ฒ˜๋“ค:

์ œ์Šค์ฒ˜ ๋™์ž‘ ์ฃผ์˜์‚ฌํ•ญ
ํƒญ (Tap) ์š”์†Œ ์„ ํƒ, ๋ฒ„ํŠผ ์‹คํ–‰ ํ„ฐ์น˜ ํƒ€๊ฒŸ ์ตœ์†Œ 44ร—44pt
๋”๋ธ” ํƒญ ํ™•๋Œ€/์ถ•์†Œ, ์ข‹์•„์š” ๋‹จ์ผ ํƒญ๊ณผ ์ถฉ๋Œ ์ฃผ์˜
์Šค์™€์ดํ”„ ์Šคํฌ๋กค, ์‚ญ์ œ, ๋’ค๋กœ ๊ฐ€๊ธฐ ์—ฃ์ง€ ์Šค์™€์ดํ”„๋Š” ์‹œ์Šคํ…œ ์˜ˆ์•ฝ
ํ•€์น˜ ํ™•๋Œ€/์ถ•์†Œ ์ง€๋„, ์ด๋ฏธ์ง€ ๋ทฐ์–ด์— ์ ํ•ฉ
๋กฑ ํ”„๋ ˆ์Šค ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด, ํŽธ์ง‘ ๋ชจ๋“œ ์ฆ‰๊ฐ์ ์ธ ์‹œ๊ฐ ํ”ผ๋“œ๋ฐฑ ํ•„์ˆ˜
๋“œ๋ž˜๊ทธ ์ด๋™, ์ •๋ ฌ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ๊ถŒ์žฅ
โš ๏ธ ์ฃผ์˜! ํ™”๋ฉด ์—ฃ์ง€์—์„œ์˜ ์Šค์™€์ดํ”„ ์ œ์Šค์ฒ˜๋Š” ์‹œ์Šคํ…œ์ด ์˜ˆ์•ฝํ•ด๋†จ์–ด. ์™ผ์ชฝ ์—ฃ์ง€ ์Šค์™€์ดํ”„๋Š” ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•„๋ž˜์ชฝ ์—ฃ์ง€ ์Šค์™€์ดํ”„๋Š” ํ™ˆ ํ™”๋ฉด์œผ๋กœ ์ด๋™. ์ด๊ฑธ ์•ฑ์—์„œ ๊ฐ€๋กœ์ฑ„๋ฉด ์•ˆ ๋ผ!

โš”๏ธ 4. Material Design vs HIG: ํ•ต์‹ฌ ์ฐจ์ด์  ๋น„๊ต

์ž, ์ด์ œ ๋‘ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ง์ ‘ ๋น„๊ตํ•ด๋ณด์ž. ๊ฐ™์€ ๊ธฐ๋Šฅ์ด๋ผ๋„ ํ”Œ๋žซํผ๋งˆ๋‹ค ๊ตฌํ˜„ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ!

Material Design vs HIG ํ•ต์‹ฌ ๋น„๊ต ๋น„๊ต ํ•ญ๋ชฉ ๐Ÿค– Material Design ๐ŸŽ HIG (iOS) ๋„ค๋น„๊ฒŒ์ด์…˜ ์œ„์น˜ ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ํ•˜๋‹จ ํƒญ ๋ฐ” (Tab Bar) ๋’ค๋กœ ๊ฐ€๊ธฐ ์ƒ๋‹จ ์ขŒ์ธก ํ™”์‚ดํ‘œ + ์‹œ์Šคํ…œ ๋ฐฑ๋ฒ„ํŠผ ์ขŒ์ธก ์—ฃ์ง€ ์Šค์™€์ดํ”„ + ์ƒ๋‹จ ๋ฒ„ํŠผ ๊ธฐ๋ณธ ๋‹จ์œ„ dp (density-independent pixel) pt (point) ํ„ฐ์น˜ ํƒ€๊ฒŸ ์ตœ์†Œ๊ฐ’ 48ร—48dp 44ร—44pt ์•„์ด์ฝ˜ ์‹œ์Šคํ…œ Material Symbols (2,500+) SF Symbols (6,000+) ํฐํŠธ Roboto (๊ธฐ๋ณธ), ์ปค์Šคํ…€ ๊ฐ€๋Šฅ SF Pro (์‹œ์Šคํ…œ), ์ปค์Šคํ…€ ๊ฐ€๋Šฅ ๋””์ž์ธ ์ฒ ํ•™ ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„ + ๊ฐœ์ธํ™” ๊ธฐ์ˆ ์€ ์ธ๊ฐ„์„ ์œ„ํ•ด
๐Ÿ”” 4-1. ์•Œ๋ฆผ(Alert/Dialog) ๋””์ž์ธ ์ฐจ์ด

๊ฐ™์€ "๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€"๋„ ํ”Œ๋žซํผ๋งˆ๋‹ค ์™„์ „ํžˆ ๋‹ฌ๋ผ:

๐Ÿค– Android (Material)

โ€ข ๋‹ค์ด์–ผ๋กœ๊ทธ ์ œ๋ชฉ: ์™ผ์ชฝ ์ •๋ ฌ
โ€ข ๋ฒ„ํŠผ: ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ, ํ…์ŠคํŠธ ๋ฒ„ํŠผ
โ€ข ์ตœ๋Œ€ 3๊ฐœ ๋ฒ„ํŠผ (Positive/Negative/Neutral)
โ€ข ๋ฐฐ๊ฒฝ ๋”ค ์ฒ˜๋ฆฌ
โ€ข ๋‘ฅ๊ทผ ๋ชจ์„œ๋ฆฌ (28dp)
๐ŸŽ iOS (HIG)

โ€ข ์ œ๋ชฉ: ๊ฐ€์šด๋ฐ ์ •๋ ฌ
โ€ข ๋ฒ„ํŠผ: ๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ ๋ฐฐ์น˜
โ€ข ์ตœ๋Œ€ 2๊ฐœ ๋ฒ„ํŠผ ๊ถŒ์žฅ
โ€ข ๋ธ”๋Ÿฌ ๋ฐฐ๊ฒฝ ์ฒ˜๋ฆฌ
โ€ข ๋‘ฅ๊ทผ ๋ชจ์„œ๋ฆฌ (13pt)
๐Ÿ“‹ 4-2. ๋ฆฌ์ŠคํŠธ & ์นด๋“œ ํŒจํ„ด ์ฐจ์ด

๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ ๋†’์ด๋„ ๋‹ฌ๋ผ:

Material Design: ๋‹จ์ผ ๋ผ์ธ 56dp, 2๋ผ์ธ 72dp, 3๋ผ์ธ 88dp
HIG: ๊ธฐ๋ณธ 44pt, ์„œ๋ธŒํƒ€์ดํ‹€ ์žˆ์œผ๋ฉด ์ž๋™ ์กฐ์ • (Auto Layout ๊ธฐ๋ฐ˜)

๐Ÿ’ก ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์•ฑ ๋งŒ๋“ค ๋•Œ ํŒ!
React Native๋‚˜ Flutter๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์•ฑ์„ ๋งŒ๋“ค ๋•Œ, ๊ฐ ํ”Œ๋žซํผ์˜ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๋ชจ๋‘ ๋”ฐ๋ฅด๋ ค๋ฉด ํ”Œ๋žซํผ๋ณ„ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด. Flutter์˜ ๊ฒฝ์šฐ Platform.isIOS๋กœ ๋ถ„๊ธฐํ•˜๊ฑฐ๋‚˜, Cupertino ์œ„์ ฏ(iOS)๊ณผ Material ์œ„์ ฏ(Android)์„ ๊ฐ๊ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์จ.

โ™ฟ 5. ์ ‘๊ทผ์„ฑ (Accessibility) โ€” ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜!

์ ‘๊ทผ์„ฑ์€ "์žฅ์• ์ธ์„ ์œ„ํ•œ ๊ฒƒ"์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€๋ฐ, ๊ทธ๊ฑด ๋ฐ˜๋งŒ ๋งž์•„.
์ ‘๊ทผ์„ฑ์„ ์ž˜ ๊ตฌํ˜„ํ•˜๋ฉด ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ๊ฒฝํ—˜์ด ์ข‹์•„์ ธ. ๋ฐ์€ ํ–‡๋น› ์•„๋ž˜์„œ ํ™”๋ฉด ๋ณด๊ธฐ, ํ•œ ์†์œผ๋กœ ํฐ ์‚ฌ์šฉํ•˜๊ธฐ, ๋…ธ์ด์ฆˆ ์บ”์Šฌ๋ง ์ด์–ดํฐ ๋ผ๊ณ  ์†Œ๋ฆฌ ๋ชป ๋“ฃ๋Š” ์ƒํ™ฉ โ€” ์ด๋Ÿฐ ๊ฒƒ๋“ค๋„ ๋‹ค ์ ‘๊ทผ์„ฑ ๋ฌธ์ œ์•ผ.

๐ŸŽฏ 5-1. Material Design ์ ‘๊ทผ์„ฑ ์›์น™

์ƒ‰์ƒ ๋Œ€๋น„๋น„: ์ผ๋ฐ˜ ํ…์ŠคํŠธ 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 = "๊ฒ€์ƒ‰ ๋ฒ„ํŠผ"

}

)
๐ŸŽ 5-2. HIG ์ ‘๊ทผ์„ฑ ์›์น™

์• ํ”Œ์€ ์ ‘๊ทผ์„ฑ์— ํŠนํžˆ ๊ฐ•ํ•ด. 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) // ์ตœ์†Œ ํ„ฐ์น˜ ํƒ€๊ฒŸ
โš ๏ธ ์•ฑ ์‹ฌ์‚ฌ ๊ฑฐ์ ˆ ์‚ฌ์œ  1์œ„!
์• ํ”Œ ์•ฑ ์‹ฌ์‚ฌ์—์„œ ์ ‘๊ทผ์„ฑ ๋ฌธ์ œ๋กœ ๊ฑฐ์ ˆ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์•„. ํŠนํžˆ VoiceOver ์ง€์›์ด ์•ˆ ๋˜๊ฑฐ๋‚˜, ํ„ฐ์น˜ ํƒ€๊ฒŸ์ด ๋„ˆ๋ฌด ์ž‘๊ฑฐ๋‚˜, Dynamic Type์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ. ๊ฐœ๋ฐœ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ด!

๐Ÿš€ 6. ์‹ค์ „ ์ ์šฉ: ์•ฑ ํ™”๋ฉด๋ณ„ ๊ฐ€์ด๋“œ๋ผ์ธ ์ ์šฉ ๋ฐฉ๋ฒ•

์ด๋ก ์€ ์ถฉ๋ถ„ํžˆ ๋ดค์œผ๋‹ˆ, ์ด์ œ ์‹ค์ œ ์•ฑ ํ™”๋ฉด์„ ๋งŒ๋“ค ๋•Œ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ๋ณด์ž!

๐Ÿ  6-1. ํ™ˆ ํ™”๋ฉด ์„ค๊ณ„
ํ™ˆ ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ๋น„๊ต ์•ฑ ์ด๋ฆ„ โ‹ฎ ๐Ÿƒ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ 16dp ์—ฌ๋ฐฑ ยท 8dp ๊ทธ๋ฆฌ๋“œ ์นด๋“œ 1 ์นด๋“œ 2 + ๐Ÿ  ํ™ˆ ๐Ÿ” ๊ฒ€์ƒ‰ ๐Ÿ‘ค ํ”„๋กœํ•„ ๐Ÿค– Android (Material) ์•ฑ ์ด๋ฆ„ ๐Ÿƒ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ 16pt ์—ฌ๋ฐฑ ยท ์ž๋™ ๋ ˆ์ด์•„์›ƒ ์นด๋“œ 1 ์นด๋“œ 2 ๐Ÿ  ํ™ˆ ๐Ÿ” ๊ฒ€์ƒ‰ ๐Ÿ‘ค ํ”„๋กœํ•„ ๐ŸŽ iOS (HIG)
๐Ÿ“ 6-2. ํผ(Form) ํ™”๋ฉด ์„ค๊ณ„

๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ์„ค์ • ํ™”๋ฉด ๊ฐ™์€ ํผ ํ™”๋ฉด์€ ๋‘ ํ”Œ๋žซํผ์—์„œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ:

๐Ÿค– Material Design ํผ

โ€ข Outlined TextField: ํ…Œ๋‘๋ฆฌ๊ฐ€ ์žˆ๋Š” ์ž…๋ ฅ ํ•„๋“œ
โ€ข Filled TextField: ๋ฐฐ๊ฒฝ์ด ์ฑ„์›Œ์ง„ ์ž…๋ ฅ ํ•„๋“œ
โ€ข ๋ผ๋ฒจ์ด ํฌ์ปค์Šค ์‹œ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜
โ€ข ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋Š” ํ•„๋“œ ์•„๋ž˜ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ
โ€ข ๋„์›€๋ง ํ…์ŠคํŠธ๋Š” ํ•„๋“œ ์•„๋ž˜ ํšŒ์ƒ‰์œผ๋กœ
๐ŸŽ HIG ํผ

โ€ข 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)
๐Ÿ”” 6-3. ์—๋Ÿฌ & ๋นˆ ์ƒํƒœ ํ™”๋ฉด

์—๋Ÿฌ ํ™”๋ฉด๊ณผ ๋นˆ ์ƒํƒœ(Empty State) ํ™”๋ฉด๋„ ์ค‘์š”ํ•ด. ์‚ฌ์šฉ์ž๊ฐ€ ๋ง‰ํ˜”์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์•ˆ๋‚ดํ•˜๋А๋ƒ๊ฐ€ UX์˜ ํ•ต์‹ฌ์ด์•ผ.

๐ŸŽฏ ์ข‹์€ ์—๋Ÿฌ/๋นˆ ์ƒํƒœ ํ™”๋ฉด์˜ 3์š”์†Œ
1. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช… (๊ธฐ์ˆ ์  ์šฉ์–ด ๊ธˆ์ง€!)
2. ์™œ ์ด๋Ÿฐ ์ƒํ™ฉ์ด ๋๋Š”์ง€ ๊ฐ„๋‹จํžˆ ์„ค๋ช…
3. ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•œ ์•ก์…˜ ๋ฒ„ํŠผ ์ œ๊ณต

์˜ˆ๋ฅผ ๋“ค์–ด "Error 404" ๋Œ€์‹  "ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์–ด์š”. ์ฃผ์†Œ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด์ฃผ์„ธ์š”." ์ด๋Ÿฐ ์‹์œผ๋กœ!
๊ทธ๋ฆฌ๊ณ  ๋นˆ ์ƒํƒœ ํ™”๋ฉด์—๋Š” ์ผ๋Ÿฌ์ŠคํŠธ๋‚˜ ์•„์ด์ฝ˜์„ ๋„ฃ์–ด์„œ ์‹œ๊ฐ์ ์œผ๋กœ ํ’์„ฑํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค˜.


๐ŸŽจ 7. ๋””์ž์ธ ํ† ํฐ๊ณผ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

์ด์ œ ์ข€ ๋” ์‹ฌํ™” ๋‚ด์šฉ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณด์ž. ์‹ค์ œ ํŒ€์—์„œ ์ผํ•˜๋‹ค ๋ณด๋ฉด ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž ์‚ฌ์ด์— "์ด ์ƒ‰์ƒ์ด ์ •ํ™•ํžˆ ๋ญ์•ผ?", "์ด ์—ฌ๋ฐฑ์ด ๋ช‡ ํ”ฝ์…€์ด์•ผ?" ๊ฐ™์€ ์†Œํ†ต ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ.
์ด๊ฑธ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ ๋””์ž์ธ ํ† ํฐ(Design Token)์ด์•ผ.

๐Ÿ”‘ 7-1. ๋””์ž์ธ ํ† ํฐ์ด๋ž€?

๋””์ž์ธ ํ† ํฐ์€ ์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ์—ฌ๋ฐฑ, ๊ทธ๋ฆผ์ž ๋“ฑ์˜ ๋””์ž์ธ ๊ฒฐ์ •์„ ์ด๋ฆ„ ์žˆ๋Š” ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•œ ๊ฒƒ์ด์•ผ.
"#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" }

}

}
๐Ÿ—๏ธ 7-2. ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ๋‹จ๊ณ„
1
๊ธฐ๋ฐ˜ ํ† ํฐ ์ •์˜ (Foundation Tokens)
์ƒ‰์ƒ ํŒ”๋ ˆํŠธ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์Šค์ผ€์ผ, ์—ฌ๋ฐฑ ์‹œ์Šคํ…œ, ๊ทธ๋ฆผ์ž ๋ ˆ๋ฒจ ๋“ฑ ๊ธฐ๋ณธ ๊ฐ’๋“ค์„ ์ •์˜ํ•ด.
2
์‹œ๋งจํ‹ฑ ํ† ํฐ ์ •์˜ (Semantic Tokens)
๊ธฐ๋ฐ˜ ํ† ํฐ์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•ด. "color-blue-500" โ†’ "color-primary", "spacing-16" โ†’ "spacing-card-padding"
3
์ปดํฌ๋„ŒํŠธ ํ† ํฐ ์ •์˜ (Component Tokens)
ํŠน์ • ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ. "button-primary-background", "card-border-radius" ๋“ฑ
4
์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์ถ•
ํ† ํฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋งŒ๋“ค์–ด. Figma ์ปดํฌ๋„ŒํŠธ + ์ฝ”๋“œ ์ปดํฌ๋„ŒํŠธ ๋™๊ธฐํ™”.
5
๋ฌธ์„œํ™” & ๊ฑฐ๋ฒ„๋„Œ์Šค
์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ ๋ฌธ์„œํ™”. ๋ณ€๊ฒฝ ์‹œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฆฝ.
๐Ÿ’ก ์žฌ๋Šฅ๋„ท์—์„œ๋„ UI/UX ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜‘์—…ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ์–ด. ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๋ฏธ๋ฆฌ ๊ตฌ์ถ•ํ•ด๋‘๋ฉด ํ˜‘์—… ํšจ์œจ์ด 2-3๋ฐฐ๋Š” ์˜ฌ๋ผ๊ฐ€๋‹ˆ๊นŒ, ํ”„๋ฆฌ๋žœ์„œ๋กœ ์ผํ•  ๋•Œ๋„ ๊ผญ ์ œ์•ˆํ•ด๋ด!

๐Ÿ“Š 8. ๋ฐ˜์‘ํ˜• & ์ ์‘ํ˜• ๋ ˆ์ด์•„์›ƒ

๋ชจ๋ฐ”์ผ ์•ฑ์ด๋ผ๊ณ  ํ•ด์„œ ์Šค๋งˆํŠธํฐ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ์•ˆ ๋ผ. ํƒœ๋ธ”๋ฆฟ, ํด๋”๋ธ” ํฐ, ์‹ฌ์ง€์–ด TV๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•ด.
Material Design๊ณผ HIG ๋ชจ๋‘ ์ด์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์ด ์žˆ์–ด.

๐Ÿ“ 8-1. Material Design ์ ์‘ํ˜• ๋ ˆ์ด์•„์›ƒ

Material Design 3๋Š” Canonical Layouts(ํ‘œ์ค€ ๋ ˆ์ด์•„์›ƒ)์„ ์ œ๊ณตํ•ด:

ํ™”๋ฉด ํฌ๊ธฐ ๋„ˆ๋น„ ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด
Compact (์Šค๋งˆํŠธํฐ) 0 ~ 599dp ๋‹จ์ผ ์ปฌ๋Ÿผ, ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜
Medium (ํด๋”๋ธ”/์†Œํ˜• ํƒœ๋ธ”๋ฆฟ) 600 ~ 839dp 2์ปฌ๋Ÿผ, ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ ˆ์ผ
Expanded (ํƒœ๋ธ”๋ฆฟ/๋ฐ์Šคํฌํ†ฑ) 840dp+ 3์ปฌ๋Ÿผ, ์˜๊ตฌ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋“œ๋กœ์–ด

ํŠนํžˆ Navigation Rail์€ ํƒœ๋ธ”๋ฆฟ์—์„œ ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ์š”์†Œ์•ผ. ํ™”๋ฉด ์™ผ์ชฝ์— ์„ธ๋กœ๋กœ ๋ฐฐ์น˜๋˜๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜์ด์•ผ.

๐Ÿ“ฑ 8-2. HIG ์ ์‘ํ˜• ๋ ˆ์ด์•„์›ƒ

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 { ... }

}

}

๐Ÿ”ง 9. ์‹ค๋ฌด์—์„œ ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜๋“ค

์ด๋ก ์„ ์•Œ์•„๋„ ์‹ค๋ฌด์—์„œ ์ž๊พธ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„. ๋‚ด๊ฐ€ ์ž์ฃผ ๋ณด๋Š” ์‹ค์ˆ˜๋“ค์„ ์ •๋ฆฌํ•ด๋ดค์–ด!

โš ๏ธ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜ vs ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ• โŒ ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ• โœ… ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ• ํ„ฐ์น˜ ํƒ€๊ฒŸ์ด ๋„ˆ๋ฌด ์ž‘์Œ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ์„ 24ร—24dp๋กœ ๋งŒ๋“ค๊ธฐ ์ตœ์†Œ 48ร—48dp ๋ณด์žฅ ์•„์ด์ฝ˜์€ 24dp, ํ„ฐ์น˜ ์˜์—ญ์€ 48dp๋กœ ๋ถ„๋ฆฌ ์ƒ‰์ƒ๋งŒ์œผ๋กœ ์ •๋ณด ์ „๋‹ฌ ๋นจ๊ฐ„์ƒ‰ = ์—๋Ÿฌ, ์ดˆ๋ก์ƒ‰ = ์„ฑ๊ณต๋งŒ์œผ๋กœ ํ‘œ์‹œ ์ƒ‰์ƒ + ์•„์ด์ฝ˜ + ํ…์ŠคํŠธ ์กฐํ•ฉ ์ƒ‰๋งน ์‚ฌ์šฉ์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์ค‘ ์‹ ํ˜ธ ํ”Œ๋žซํผ ํŒจํ„ด ๋ฌด์‹œ iOS ์•ฑ์— Android ์Šคํƒ€์ผ FAB ๋„ฃ๊ธฐ ํ”Œ๋žซํผ ๋„ค์ดํ‹ฐ๋ธŒ ํŒจํ„ด ์ค€์ˆ˜ iOS๋Š” HIG, Android๋Š” Material ํŒจํ„ด ๋”ฐ๋ฅด๊ธฐ ๋กœ๋”ฉ ์ƒํƒœ ๋ฏธ์ฒ˜๋ฆฌ API ํ˜ธ์ถœ ์ค‘ ๋นˆ ํ™”๋ฉด ๋˜๋Š” ๋ฉˆ์ถ˜ UI ์Šค์ผˆ๋ ˆํ†ค UI ๋˜๋Š” ํ”„๋กœ๊ทธ๋ ˆ์Šค ํ‘œ์‹œ ๋กœ๋”ฉ ์ค‘์ž„์„ ๋ช…ํ™•ํžˆ ์•Œ๋ฆฌ๊ณ  ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๊ธฐ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ƒ‰์ƒ๊ฐ’ ์‚ฌ์šฉ (#FF0000) ์‹œ๋งจํ‹ฑ ์ƒ‰์ƒ ํ† ํฐ ์‚ฌ์šฉ (color-error)
๐Ÿšจ 9-1. ์ถ”๊ฐ€๋กœ ์ž์ฃผ ๋ณด์ด๋Š” ์‹ค์ˆ˜๋“ค

1. ์Šคํฌ๋กค ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๋ถˆ๋ช…ํ™•: ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•œ ์˜์—ญ์ธ์ง€ ์•„๋‹Œ์ง€ ์‹œ๊ฐ์  ํžŒํŠธ๊ฐ€ ์—†์–ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ
โ†’ ์ฝ˜ํ…์ธ ๊ฐ€ ์ž˜๋ฆฌ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜, ์Šคํฌ๋กค ์ธ๋””์ผ€์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด

2. ํ‚ค๋ณด๋“œ๊ฐ€ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ๊ฐ€๋ฆฌ๋Š” ๋ฌธ์ œ: ํผ ํ™”๋ฉด์—์„œ ํ‚ค๋ณด๋“œ๊ฐ€ ์˜ฌ๋ผ์˜ค๋ฉด ์ž…๋ ฅ ํ•„๋“œ๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๊ฒฝ์šฐ
โ†’ KeyboardAvoidingView(RN), WindowInsets(Compose), adjustResize(Android) ์ฒ˜๋ฆฌ ํ•„์ˆ˜

3. ๋…ธ์น˜/๋‹ค์ด๋‚˜๋ฏน ์•„์ผ๋žœ๋“œ ๋ฌด์‹œ: iPhone X ์ดํ›„ ๋…ธ์น˜ ์˜์—ญ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„ UI๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๊ฒฝ์šฐ
โ†’ Safe Area Insets ๋ฐ˜๋“œ์‹œ ์ ์šฉ

4. ํ…์ŠคํŠธ ์ž˜๋ฆผ ์ฒ˜๋ฆฌ ๋ฏธํก: ๊ธด ํ…์ŠคํŠธ๊ฐ€ ์ž˜๋ฆด ๋•Œ "..." ์ฒ˜๋ฆฌ ์—†์ด ๊ทธ๋ƒฅ ์ž˜๋ฆฌ๋Š” ๊ฒฝ์šฐ
โ†’ ellipsis ์ฒ˜๋ฆฌ + ์ตœ๋Œ€ ๋ผ์ธ ์ˆ˜ ์„ค์ •


๐Ÿ› ๏ธ 10. ๋„๊ตฌ์™€ ๋ฆฌ์†Œ์Šค ์ด์ •๋ฆฌ

์ด๋ก ์„ ์‹ค์ œ๋กœ ์ ์šฉํ•˜๋ ค๋ฉด ์ข‹์€ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ด. ํ˜„์—…์—์„œ ๋งŽ์ด ์“ฐ๋Š” ๋„๊ตฌ๋“ค์„ ์ •๋ฆฌํ•ด๋ดค์–ด!

๐ŸŽจ 10-1. ๋””์ž์ธ ๋„๊ตฌ
๋„๊ตฌ ํŠน์ง• ์ถ”์ฒœ ๋Œ€์ƒ
Figma ํ˜‘์—… ์ตœ๊ฐ•, Material Design 3 ํ‚คํŠธ ๊ณต์‹ ์ œ๊ณต, ๋ฌด๋ฃŒ ํ”Œ๋žœ ์žˆ์Œ ํŒ€ ํ˜‘์—…, ํ”„๋กœํ† ํƒ€์ดํ•‘
Sketch macOS ์ „์šฉ, iOS ๋””์ž์ธ์— ์ตœ์ ํ™”, ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„ ํ’๋ถ€ iOS ์•ฑ ๋””์ž์ด๋„ˆ
Adobe XD Adobe ์ƒํƒœ๊ณ„ ์—ฐ๋™, ์ž๋™ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธฐ๋Šฅ Adobe ์‚ฌ์šฉ์ž
Framer ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ํƒ€์ดํ•‘, ์‹ค์ œ ์•ฑ์— ๊ฐ€๊นŒ์šด ์ธํ„ฐ๋ž™์…˜ ๊ณ ๊ธ‰ ํ”„๋กœํ† ํƒ€์ดํ•‘
๐Ÿ“ฆ 10-2. ๊ฐœ๋ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Jetpack Compose Android ๋„ค์ดํ‹ฐ๋ธŒ UI, Material Design 3 ์™„๋ฒฝ ์ง€์›

SwiftUI iOS ๋„ค์ดํ‹ฐ๋ธŒ UI, HIG ์™„๋ฒฝ ์ง€์›, ์„ ์–ธํ˜• ๋ฌธ๋ฒ•

Flutter ํฌ๋กœ์Šค ํ”Œ๋žซํผ, Material + Cupertino ์œ„์ ฏ ๋ชจ๋‘ ์ œ๊ณต

React Native ํฌ๋กœ์Šค ํ”Œ๋žซํผ, ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํฌ๋„ŒํŠธ ์ ‘๊ทผ ๊ฐ€๋Šฅ

Material UI (MUI) React ์›น์šฉ Material Design ๊ตฌํ˜„์ฒด

๐Ÿ“š 10-3. ๊ณต์‹ ๋ฆฌ์†Œ์Šค

๐Ÿ”— 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์—์„œ ๋ฌด๋ฃŒ ์ œ๊ณต

๐Ÿ’ก ์žฌ๋Šฅ๋„ท์—์„œ UI/UX ๋””์ž์ธ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•  ๋•Œ, ์ด๋Ÿฐ ๊ณต์‹ ๊ฐ€์ด๋“œ๋ผ์ธ ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ๋ช…์‹œํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์‹ ๋ขฐ๋„๊ฐ€ ํ›จ์”ฌ ์˜ฌ๋ผ๊ฐ€! "Material Design 3 ๊ธฐ๋ฐ˜ Android ์•ฑ ๋””์ž์ธ" ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•ด๋ด.

๐Ÿ”ฎ 11. 2024-2025 ํŠธ๋ Œ๋“œ: ์•ž์œผ๋กœ์˜ ๋ฐฉํ–ฅ

๋งˆ์ง€๋ง‰์œผ๋กœ ์•ž์œผ๋กœ์˜ ํŠธ๋ Œ๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ผ์ธ๋„ ๊ณ„์† ์ง„ํ™”ํ•˜๊ณ  ์žˆ์–ด!

๐ŸŒŸ 11-1. Material Design์˜ ๋ฏธ๋ž˜

Dynamic Color์˜ ํ™•์žฅ: ๋” ๋งŽ์€ ์•ฑ์—์„œ ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ์ƒ‰์ƒ ์ ์šฉ
Adaptive Components: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋ณ€ํ˜•๋˜๋Š” ์ปดํฌ๋„ŒํŠธ
Expressive Motion: ๋” ํ’๋ถ€ํ•˜๊ณ  ๊ฐœ์„ฑ ์žˆ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์›
AI ํ†ตํ•ฉ UI ํŒจํ„ด: AI ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด UI ์ปดํฌ๋„ŒํŠธ (๋กœ๋”ฉ ์ƒํƒœ, ์ƒ์„ฑ ์ค‘ ํ‘œ์‹œ ๋“ฑ)

๐ŸŽ 11-2. HIG์˜ ๋ฏธ๋ž˜

visionOS ๊ฐ€์ด๋“œ๋ผ์ธ: Apple Vision Pro๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„ ์ปดํ“จํŒ… UI ํŒจํ„ด
AI/ML ํ†ตํ•ฉ: Core ML ๊ธฐ๋ฐ˜ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ UI ํŒจํ„ด
Live Activities: Dynamic Island์™€ ์ž ๊ธˆ ํ™”๋ฉด ์œ„์ ฏ ๋””์ž์ธ
Interactive Widgets: ํ™ˆ ํ™”๋ฉด ์œ„์ ฏ์—์„œ ์ง์ ‘ ์ธํ„ฐ๋ž™์…˜ ๊ฐ€๋Šฅ

๐ŸŒ 11-3. ๊ณตํ†ต ํŠธ๋ Œ๋“œ
๐Ÿค–
AI ๋„ค์ดํ‹ฐ๋ธŒ UI
AI ์‘๋‹ต ์ŠคํŠธ๋ฆฌ๋ฐ, ์ƒ์„ฑ ์ค‘ ์ƒํƒœ, ๋ถˆํ™•์‹ค์„ฑ ํ‘œํ˜„์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด UI ํŒจํ„ด
โ™ฟ
์ ‘๊ทผ์„ฑ ์šฐ์„  ์„ค๊ณ„
๋ฒ•์  ์š”๊ตฌ์‚ฌํ•ญ ๊ฐ•ํ™”๋กœ ์ ‘๊ทผ์„ฑ์ด ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜๊ฐ€ ๋˜๋Š” ์ถ”์„ธ
๐ŸŒ
์ง€์†๊ฐ€๋Šฅํ•œ UX
๋‹คํฌ ๋ชจ๋“œ, ๋ฐฐํ„ฐ๋ฆฌ ์ ˆ์•ฝ ๋ชจ๋“œ ๋“ฑ ์—๋„ˆ์ง€ ํšจ์œจ์„ ๊ณ ๋ คํ•œ ๋””์ž์ธ

๐ŸŽฏ ๋งˆ๋ฌด๋ฆฌ: ํ•ต์‹ฌ ์š”์•ฝ

์™€, ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์ง„์งœ ๋Œ€๋‹จํ•œ ๊ฑฐ์•ผ! ๐Ÿ‘ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•ต์‹ฌ์„ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ.

๐Ÿ“Œ Material Design & HIG ํ•ต์‹ฌ ์š”์•ฝ

1๏ธโƒฃ ๊ฐ€์ด๋“œ๋ผ์ธ์€ ์ œ์•ฝ์ด ์•„๋‹ˆ๋ผ ๋„๊ตฌ์•ผ. ์ฐฝ์˜์„ฑ์„ ์ œํ•œํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ณด์žฅํ•˜๋Š” ๊ธฐ๋ฐ˜์ด์•ผ.

2๏ธโƒฃ ํ”Œ๋žซํผ ๋„ค์ดํ‹ฐ๋ธŒ ํŒจํ„ด์„ ์กด์ค‘ํ•ด. Android ์•ฑ์€ Material Design, iOS ์•ฑ์€ HIG๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒŒ ์‚ฌ์šฉ์ž ๊ธฐ๋Œ€์— ๋งž์•„.

3๏ธโƒฃ ์ ‘๊ทผ์„ฑ์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณ ๋ คํ•ด์•ผ ํ•ด. ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋น„์šฉ์ด 10๋ฐฐ์•ผ.

4๏ธโƒฃ 8dp/pt ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ์„ ์ง€์ผœ. ์—ฌ๋ฐฑ๊ณผ ํฌ๊ธฐ์˜ ์ผ๊ด€์„ฑ์ด ์ „๋ฌธ์ ์ธ ์•ฑ์„ ๋งŒ๋“ค์–ด.

5๏ธโƒฃ ๋””์ž์ธ ํ† ํฐ์œผ๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด. ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์•ฑ์˜ ๊ธฐ๋ฐ˜์ด์•ผ.

6๏ธโƒฃ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ž์ฃผ ํ™•์ธํ•ด. ๋‘ ๊ฐ€์ด๋“œ๋ผ์ธ ๋ชจ๋‘ ๊ณ„์† ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ์–ด!

Material Design๊ณผ HIG, ์ฒ˜์Œ์—” ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ ํ•˜๋‚˜์”ฉ ์ ์šฉํ•˜๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ชธ์— ๋ฐฐ๊ฒŒ ๋ผ.
์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ด. ์ž‘์€ ๋ณ€ํ™”๊ฐ€ ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์–ด! ๐Ÿ’ช

์•ฑ ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๊ณต์‹ ๋ฌธ์„œ ๋จผ์ € ์ฐพ์•„๋ด. ๊ตฌ๊ธ€์ด๋ž‘ ์• ํ”Œ์ด ์ด๋ฏธ ๋‹ค ๋‹ต์„ ์จ๋†จ๊ฑฐ๋“ . ๐Ÿ˜„

๐Ÿš€
์ด์ œ ์ง„์งœ ์ข‹์€ ์•ฑ์„ ๋งŒ๋“ค ์ค€๋น„๊ฐ€ ๋์–ด!
Material Design + HIG = ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ๋ž‘ํ•˜๋Š” ์•ฑ์˜ ๋น„๋ฐ€ ๊ณต์‹ โœจ
๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0