2023๋…„ 12์›” 13์ผยท8๋ถ„ ์ฝ๊ธฐ

Jetpack Compose ์‹œ์ž‘ํ•˜๊ธฐ: ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ

Jetpack Compose์— ๋Œ€ํ•œ ์ด ํฌ๊ด„์ ์ธ ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ์ตœ์‹  Android UI ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋ฅผ ์•Œ์•„๋ณด์„ธ์š”. ์ด ์„ ์–ธ์  ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ• ๋ฐฉ์‹์„ ์–ด๋–ป๊ฒŒ ํ˜์‹ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์„ธ์š”.

Jetpack Compose ์‹œ์ž‘ํ•˜๊ธฐ: ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ

Android ์•ฑ ๊ฐœ๋ฐœ ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๋„๊ตฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Jetpack Compose ๋ทฐ ์ฒ˜๋ฆฌ์˜ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ์ง๊ด€์ ์ด๊ณ  ํšจ์œจ์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ–ฅํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๋Š” ์‹ ์„ ํ•œ ๊ณต๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Jetpack Compose ๊ธฐ๋ณธ Android UI๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ Google์˜ ์ตœ์‹  ๋„๊ตฌ ํ‚คํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๊ณ , ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ , Android ๋ฒ„์ „๊ณผ ๊ธฐ๊ธฐ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ผ๊ด€๋˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Jetpack ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œํ’ˆ๊ตฐ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

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

Jetpack Compose ์‚ฌ์šฉ์˜ ๋˜ ๋‹ค๋ฅธ ์žฅ์ ์€ 2017๋…„๋ถ€ํ„ฐ Android์—์„œ ๊ถŒ์žฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ Kotlin ๊ณผ์˜ ๊ธด๋ฐ€ํ•œ ํ†ตํ•ฉ์ž…๋‹ˆ๋‹ค. Kotlin์˜ ๊ฐ„๊ฒฐํ•œ ๊ตฌ๋ฌธ๊ณผ ๊ธฐ๋Šฅ์  ๊ธฐ๋Šฅ์€ Compose์˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ–ฅ์ƒ์‹œ์ผœ ์šฐ์•„ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ๋ชจ๋“ˆ์‹ ์ฝ”๋“œ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋Š” Compose์— ๋‚ด์žฅ๋œ ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ ๊ตฌ์„ฑ์š”์†Œ ๋ฐ ํ’๋ถ€ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฒฐํ•ฉ๋˜์–ด ํ˜„๋Œ€์ ์ด๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ ๋งค๋ ฅ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋งค๋ ฅ์ ์ธ ๋„๊ตฌ ํ‚คํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Android ๋ทฐ ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด Android ๊ฐœ๋ฐœ์ž์˜ ํ•™์Šต ๊ณก์„ ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ์— UI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ง์ ‘ ํ‘œํ˜„ํ•˜๋ฉด ์–‘์ธก์ด ๋””์ž์ธ์„ ์ž‘๋™ํ•˜๋Š” ์•ฑ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋” ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ๋ณด๋‹ค ์›ํ™œํ•œ ํ˜‘์—…์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ Jetpack Compose ์ „๋ถ€ ์•„๋‹ˆ๋ฉด ์ „๋ฌดํ•œ ์ œ์•ˆ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด Android ๋ทฐ ์‹œ์Šคํ…œ๊ณผ์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์™„์ „ํžˆ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ Compose๋ฅผ ์กฐ๊ธˆ์”ฉ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์—†๋Š” ๊ฒฝํ—˜์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด AppMaster ์™€ ๊ฐ™์€ ํ”Œ๋žซํผ์€ Jetpack Compose ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•˜์—ฌ ๊ท€์ค‘ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” AppMaster ํ”Œ๋žซํผ์˜ drag-and-drop ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋””์ž์ธํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ง€ ์•Š๊ณ ๋„ Compose์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Compose๋ฅผ ํ†ตํ•ด Android UI ๊ฐœ๋ฐœ์€ ๋”์šฑ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋˜๊ณ , ๋Œ€ํ™”ํ˜•์ด๋ฉฐ, ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์šด ์ƒํƒœ๊ณ„๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹ ๊ทœ ์‚ฌ์šฉ์ž์™€ ๋…ธ๋ จํ•œ Android ๋ฒ ํ…Œ๋ž‘ ๋ชจ๋‘๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ ์ฒ ํ•™์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: ProAndroidDev

์„ ์–ธ์  UI ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดํ•ด

Jetpack Compose ๋กœ ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์„ ์–ธ์  UI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจ๋Ÿฌ๋‹ค์ž„์€ Compose์˜ ํ•ต์‹ฌ์ด๋ฉฐ Android ๊ฐœ๋ฐœ์— ์ „ํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ นํ˜• ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ์ค‘์š”ํ•œ ๋ณ€ํ™”๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋‹น์‹ ์—๊ฒŒ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์„ ์–ธ์  UI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ UI ๊ตฌ์„ฑ์˜ ๋‹จ๊ณ„๋ณ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๋Œ€์‹  UI๊ฐ€ ์–ด๋–ค ๋ชจ์Šต์ด์–ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ UI ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๋ฉด ์ƒํƒœ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํ™”๋˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.

DOM(๋ฌธ์„œ ๊ฐœ์ฒด ๋ชจ๋ธ) ์š”์†Œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์กฐ์ž‘ํ•˜๊ณ  UI ์ƒํƒœ ๊ฐ„์˜ ์ •ํ™•ํ•œ ์ „ํ™˜์„ ์ง€์ •ํ•˜๋Š” ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋‹ฌ๋ฆฌ ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์„ ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์—ญํ• ์€ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ์— ๋Œ€ํ•œ UI์˜ ์ตœ์ข… ์ƒํƒœ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

Jetpack Compose ์™€ ๊ฐ™์€ ์„ ์–ธ์  UI ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ UI๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ˜์‘ํ˜• ๋ชจ๋ธ์€ ๋” ์ด์ƒ ๋ณด๊ธฐ ์œ„์ ฏ๊ณผ ๋ณด๊ธฐ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ๋ณต์žก์„ฑ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ณด๋‹ค ์ง๊ด€์ ์ด๊ณ  ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.

๋”์šฑ์ด ์„ ์–ธ์  UI๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ์‰ฝ๊ณ  ๋””๋ฒ„๊น…๋„ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ๋ชจ๋“  ์ƒํƒœ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์–ด๋–ค ๋ชจ์Šต์ด์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž์˜ ์ •์‹ ์  ๋ถ€๋‹ด์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” UI๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ˜์‘์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์„ ์–ธ์  UI๋ฅผ ์ดํ•ดํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์ตœ์‹  ์†Œํ”„ํŠธ์›จ์–ด ๋™ํ–ฅ์„ ์ˆ˜์šฉํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ์„ ์ตœ์ ํ™”ํ•˜๋ฉฐ ์ •๊ตํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…์„ ์ตํžˆ๋ฉด Jetpack Compose ์˜ ์ž ์žฌ๋ ฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ณ  ๋ฏธํ•™์ ์œผ๋กœ ๋งŒ์กฑ์Šค๋Ÿฝ๊ณ  ๊ธฐ๋Šฅ์ ์œผ๋กœ ํ’๋ถ€ํ•œ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊นŠ์ด ํŒŒ๊ณ ๋“ค์ง€ ์•Š๊ณ ๋„ ์‹œ๊ฐ์ ์œผ๋กœ ๋งค๋ ฅ์ ์ธ ์•ฑ์„ ๋””์ž์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” AppMaster ์™€ ๊ฐ™์€ no-code ํ”Œ๋žซํผ์˜ ์ฒ ํ•™๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์„ ์–ธ์  UI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋…ธ๋ จํ•œ ๊ฐœ๋ฐœ์ž์™€ ์ฝ”๋”ฉ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๋ชจ๋‘ ๋Š์ž„์—†์ด ์ง„ํ™”ํ•˜๋Š” ์•ฑ ๊ฐœ๋ฐœ ์„ธ๊ณ„์—์„œ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

Jetpack Compose ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด Android ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Android Studio ์„ค์น˜, Compose๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ, ๊ธฐ๋ณธ ๋นŒ๋“œ ๊ตฌ์„ฑ ์ˆ™์ง€ ๋“ฑ ์ผ๋ จ์˜ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Android Studio ์„ค์น˜

๋จผ์ €, ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ณต์‹ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์ธ Android Studio (Android Studio)๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•˜์„ธ์š”. Jetpack Compose ์ง€์›ํ•˜๋Š” ๋ฒ„์ „์„ ์„ ํƒํ•˜์„ธ์š”. ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ

Android Studio ์‹คํ–‰๋˜๋ฉด ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Compose ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ์„ค์ •์ด ํฌํ•จ๋œ 'Empty Compose Activity' ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ œ๊ณตํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ €์žฅ ์œ„์น˜, ์–ธ์–ด(Kotlin), ์ตœ์†Œ SDK์™€ ๊ฐ™์€ ๊ธฐํƒ€ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

build.gradle ํŒŒ์ผ ๊ตฌ์„ฑ

Jetpack Compose ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์˜ build.gradle (Module: app) ํŒŒ์ผ์— ํŠน์ • ์ข…์† ํ•ญ๋ชฉ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น Compose ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ UI ์œ„์ ฏ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 dependencies { implementation "androidx.compose.ui:ui:1.xx" // Add more Compose dependencies as needed for UI, Material design etc. kapt "androidx.compose.compiler:compiler:1.xx"}

"1.xx"๋ฅผ Compose ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ํ•ฉํ•œ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”. ๋˜ํ•œ Compose ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ์˜ฌ๋ฐ”๋ฅธ Kotlin ๋ฒ„์ „์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด๋Š” ํ”„๋กœ์ ํŠธ์˜ build.gradle (Project: YourAppName) ํŒŒ์ผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ ๊ตฌ์„ฑ

Jetpack Compose build.gradle (Module: app) ํŒŒ์ผ์—์„œ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” Kotlin ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 android { ... kotlinOptions { jvmTarget = "1.8" useIR = true // Enable the new Kotlin IR compiler } ...}

๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ฃผ์„ ํ™œ์„ฑํ™”

Jetpack ComposeAndroid Studio ์˜ ๋””์ž์ธ ๋ทฐ์—์„œ ์ปดํฌ์ €๋ธ”์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋Šฅ์ด ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด Preferences/Settings -> Experimental๋กœ ์ด๋™ํ•˜๊ณ  'Enable Compose Preview Annotations'๋ฅผ ์„ ํƒํ•˜์—ฌ Android Studio ์—์„œ ์‹คํ—˜์  ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ์ด๋Š” UI ๊ตฌ์„ฑ์š”์†Œ์˜ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์‹คํ–‰

Android Studio ์„ค์น˜ํ•˜๊ณ , Compose ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ํ•„์š”ํ•œ ์ข…์† ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๊ณ , Kotlin ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋‚˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Android Studio ์—์„œ '์‹คํ–‰' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋‚˜ ์‹ค์ œ ๊ธฐ๊ธฐ๋ฅผ ์„ ํƒํ•˜๋ฉด Jetpack Compose ์•ฑ์ด ์‹œ์ž‘๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค. Jetpack Compose ์šฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค!

Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์€ ๋งŽ์€ ์ฝ”๋”ฉ, ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€ํ†  ์ฃผ๊ธฐ๊ฐ€ ํฌํ•จ๋œ ๋ฐ˜๋ณต์ ์ธ ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. ํšจ์œจ์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ž˜ ๊ตฌ์„ฑ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ง€ ์•Š๊ณ  ์•ฑ ๊ฐœ๋ฐœ์„ ํƒ์ƒ‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ Jetpack Compose ์ง€์›ํ•˜๋Š” no-code ํ”Œ๋žซํผ์ธ AppMaster ์‚ดํŽด๋ณด์„ธ์š”. ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ UI๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋””์ž์ธํ•˜๊ณ  Kotlin ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Compose์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ

Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ข…์ข… ๋ฒ„๊ทธ์™€ ๋ณต์žก์„ฑ์˜ ์›์ธ์ด ๋˜์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Jetpack Compose ๊ฐœ๋ฐœ์ž์˜ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋ฐ˜์‘ํ˜• ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Jetpack Compose ์˜ ์ƒํƒœ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜์–ด UI์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด UI๋Š” ์ด ์ƒˆ๋กœ์šด ํ˜„์‹ค์„ ๋ฐ˜์˜ํ•˜๋„๋ก ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด ๋ณด๋‹ค ๊ธฐ๋Šฅ์ ์ด๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ์ˆ˜์šฉํ•ฉ๋‹ˆ๋‹ค.

Jetpack Compose ์—์„œ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด Compose ๋Ÿฐํƒ€์ž„์— ํ†ตํ•ฉ๋œ ๋‹ค์–‘ํ•œ ์ƒํƒœ ํ™€๋”์™€ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ์–ตํ•˜์„ธ์š”: Compose์˜ ์ค‘์ถ”์ ์ธ ๊ธฐ๋Šฅ์€ ๋ฆฌ์ปดํฌ์ง€์…˜ ์ „์ฒด์—์„œ ๊ฐ’์„ ๊ธฐ์–ตํ•˜๋Š” remember ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด๋‚˜ ์Šคํฌ๋กค ๋ชฉ๋ก์˜ ์œ„์น˜์™€ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • MutableState: mutableStateOf ํ•จ์ˆ˜๋Š” Compose ๋Ÿฐํƒ€์ž„์ด ๋ฐ˜์‘ํ•˜๋Š” ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ MutableState ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์žฌ๊ตฌ์„ฑ์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒํƒœ ํ˜ธ์ด์ŠคํŒ…: ์ปดํฌ์ €๋ธ”์„ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒํƒœ ํ˜ธ์ด์ŠคํŒ…์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์—๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ƒ์œ„ ์ปดํฌ์ €๋ธ”๋กœ ์ด๋™ํ•˜๊ณ  ์ƒํƒœ ๋ฐ ์ด๋ฒคํŠธ ์ฝœ๋ฐฑ์„ ํ•˜์œ„ ์ปดํฌ์ €๋ธ”์— ์ „๋‹ฌํ•˜๋Š” ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ViewModel: ๋ณด๋‹ค ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ViewModel ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ํ›„์—๋„ ์œ ์ง€๋˜๋ฉฐ ์ปดํฌ์ €๋ธ” ๊ฐ„์— ๊ณต์œ ๋  ์ˆ˜ ์žˆ์–ด ๊น”๋”ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๋ฉด Compose๋Š” ๋” ์ ์€ ์ฝ”๋“œ๋กœ UI ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋™์‹œ์— ๋ถ€์ž‘์šฉ ์ฒ˜๋ฆฌ๋ฅผ ์ด‰์ง„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Jetpack Compose UI๋ฅผ ์•ฑ ์ƒํƒœ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๊ด€๋ฆฌ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์œผ๋กœ ์ƒ๊ฐํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๊ด€๋ฆฌ์˜ ์˜ˆ

๋ชฉ๋ก์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ„ํŠผ์ด ์žˆ๋Š” ํ™”๋ฉด์ด ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ๋‹ค์Œ์€ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

 val itemList = remember { mutableStateListOf<String>() } Button(onClick = { itemList.add("New Item") }) { Text("Add Item") } LazyColumn { items(itemList) { item -> Text(item) } }

์šฐ๋ฆฌ๋Š” mutableStateListOf ์™€ ํ•จ๊ป˜ remember ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ๋ฌธ์ž์—ด ๋ชฉ๋ก์„ ์ถ”์ ํ•˜๊ณ  ์ด ๋ชฉ๋ก์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ(์˜ˆ: ์ƒˆ ํ•ญ๋ชฉ ์ถ”๊ฐ€)์€ ์ด ์ƒํƒœ๊ฐ€ ์ฐธ์กฐ๋˜๋Š” UI๋ฅผ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์นฉ๋‹ˆ๋‹ค. ์ด ํŒจ๋Ÿฌ๋‹ค์ž„์€ UI ์ƒํƒœ ๋ถˆ์ผ์น˜์˜ ์œ„ํ—˜์„ ์ค„์ด๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ UI ๋””์ž์ธ์˜ ์ฐฝ์˜์ ์ธ ์ธก๋ฉด์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

AppMasterno-code ํ”Œ๋žซํผ ์˜์—ญ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋”์šฑ ์‰ฝ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์˜ ์ •๊ตํ•œ ๋„๊ตฌ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Jetpack Compose ์™€ ์œ ์‚ฌํ•œ ์›์น™์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์‹œ์— ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose ์˜ ์›ํ™œํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฝํ—˜ ์ˆ˜์ค€์— ๊ด€๊ณ„์—†์ด ํ’๋ถ€ํ•˜๊ณ  ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋Œ€ํ™”ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜: ์žฌ์‚ฌ์šฉ์„ฑ ๋ฐ ๊ตฌ์„ฑ

Jetpack Compose ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ธ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” Compose์—์„œ UI์˜ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋“ค์„ ์ฐจ๋ณ„ํ™”ํ•˜๋Š” ์ ์€ ์žฌ์‚ฌ์šฉ ๋ฐ ์ค‘์ฒฉ์ด ๊ฐ€๋Šฅํ•˜์—ฌ Android UI ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋ชจ๋“ˆ์‹์˜ ํšจ์œจ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋Š” ๊ฐ„๋‹จํ•œ ์›์น™์— ๋”ฐ๋ผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ํŠน์ • ์ƒํƒœ์— ๋Œ€ํ•œ UI์˜ ๋ชจ์–‘์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ ์–ธ์  ์Šคํƒ€์ผ์€ ๊ธฐ์กด Android ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ นํ˜• UI ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ์ง๊ด€์ ์ด๊ณ  ์ง์ ‘์ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์œ„๋ ฅ์€ ๊ธฐ๋Šฅ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๋” ์ž‘๊ณ  ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์œผ๋กœ ๋ณต์žกํ•œ UI๋ฅผ ์กฐ๋ฆฝํ•  ๋•Œ ๋น›๋‚ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •๋ฆฌ๋˜๊ณ  ์•ฑ ๋””์ž์ธ์˜ ์ผ๊ด€์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

Jetpack Compose ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ตฌ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ž‘๊ณ  ์ง‘์ค‘์ ์œผ๋กœ ์œ ์ง€ : ํ•œ ๊ฐ€์ง€ ์ž‘์—…์„ ์ž˜ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปดํฌ์ €๋ธ”์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ดํ•ด, ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ์žฌ์‚ฌ์šฉ์ด ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” : ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ์ปดํฌ์ €๋ธ”์„ ๋‹ค์–‘ํ•œ ์ปจํ…์ŠคํŠธ์™€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹ค์–‘์„ฑ์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŠน์„ฑ์„ ๋’ท๋ฐ›์นจํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ๋งˆ ์ง€์ • ๋ฐ ์Šคํƒ€์ผ๋ง : Jetpack Compose ํ…Œ๋งˆ ์ง€์ • ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ปดํฌ์ €๋ธ”์˜ ์Šคํƒ€์ผ์ด ์•ฑ ์ „์ฒด์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์ง€์ •๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ค‘์ฒฉ ์ปดํฌ์ €๋ธ” : Compose๋Š” ์„ค๊ณ„์— ๋”ฐ๋ผ ์ค‘์ฒฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋”ฉ ๋ธ”๋ก ์Œ“๊ธฐ์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ปดํฌ์ €๋ธ”์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜์ •์ž : ์ปดํฌ์ €๋ธ”์˜ ๋ชจ์–‘์ด๋‚˜ ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ์ด๋Š” Compose API์— ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ์ ๊ฒ€ํ•˜์ง€ ์•Š๊ณ ๋„ UI๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ AppMaster ์™€ ๊ฐ™์€ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด Jetpack Compose ๊ธฐ์กด ์•ฑ์ด๋‚˜ ์ƒˆ ํ”„๋กœ์ ํŠธ์— ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. no-code ํ”Œ๋žซํผ์€ Kotlin ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„๋„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ Jetpack Compose ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Compose์™€ no-code ํ”Œ๋žซํผ์˜ ๊ฒฐํ•ฉ์€ ์ „๋ฌธ๊ฐ€์™€ ์ดˆ๋ณด์ž ๋ชจ๋‘๊ฐ€ ์ „ํ†ต์ ์œผ๋กœ ํ•„์š”ํ•œ ๋…ธ๋ ฅ์˜ ์ผ๋ถ€๋งŒ์œผ๋กœ ์šฐ์•„ํ•˜๊ณ  ๊ธฐ๋Šฅ์ ์ธ Android ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์—ด์–ด์ค๋‹ˆ๋‹ค.

๊ฐ•๋ ฅํ•œ ์บก์Аํ™”์™€ ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ UI๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ ๋•๋ถ„์— Jetpack Compose Android UI ๊ฐœ๋ฐœ์˜ ์ตœ์ „์„ ์— ์„œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๊ฒฝ์Ÿ์ด ์น˜์—ดํ•œ ์•ฑ ์‹œ์žฅ์—์„œ ๋ˆˆ์— ๋„๋Š” ์ตœ์‹  ๋ฐ˜์‘ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose ๊ธฐ์กด ์•ฑ๊ณผ ํ†ตํ•ฉ

์›ํ•˜๋Š” ๊ณณ์— ๋ฐฐํฌ
์ค€๋น„๋˜๋ฉด AppMaster Cloud๋‚˜ ์ž์ฒด AWS, Azure, Google Cloud์— ๋ฐฐํฌํ•˜์„ธ์š”.
์•ฑ ๋ฐฐํฌ

Jetpack Compose ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•์— ๋Œ€ํ•œ ์„ ์–ธ์  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜์—ฌ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Jetpack Compose ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์•ฑ์„ ์™„์ „ํžˆ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ Jetpack Compose ๊ธฐ์กด Android ๋ณด๊ธฐ์™€ ๊ณต์กดํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ํ•˜๋‚˜์”ฉ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose ๊ธฐ์กด Android ์•ฑ์— ํ†ตํ•ฉํ•˜๋ ค๋ฉด ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด์„ธ์š”. ๋จผ์ € Android Studio ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•„์š”ํ•œ ์ข…์† ํ•ญ๋ชฉ๊ณผ Kotlin ์ง€์›์œผ๋กœ ์•ฑ์˜ build.gradle ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ Compose๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

๋‹ค์Œ์œผ๋กœ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ ๊ฐœ๋ณ„ ํ™”๋ฉด์ด๋‚˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Android์˜ ComposeView XML ๋ ˆ์ด์•„์›ƒ์—์„œ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋ฅผ ์บก์Аํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์œ„ํ•ด Compose๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด RecyclerView๋ฅผ ์ปดํฌ์ €๋ธ” ๋ชฉ๋ก์œผ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ComposeView ๋‚ด์— ์ปดํฌ์ €๋ธ” ์œ„์ ฏ์„ ์‚ฝ์ž…ํ•˜์—ฌ ๊ธฐ์กด XML ๋ ˆ์ด์•„์›ƒ ๋‚ด์—์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, Observable์„ Compose๊ฐ€ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด observeAsState() ์‚ฌ์šฉํ•˜์—ฌ LiveData ๋ฐ ViewModel์ด Composable ํ•จ์ˆ˜์™€ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์•ฑ ์ „์ฒด์—์„œ ์ผ๊ด€๋œ ๋””์ž์ธ๊ณผ ๋А๋‚Œ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์Šคํƒ€์ผ ๋ฐ ํ…Œ๋งˆ ์ธก๋ฉด์—์„œ ์ปดํฌ์ €๋ธ”๊ณผ ๊ธฐ์กด ๋ทฐ๋ฅผ ํ˜ผํ•ฉํ•˜๋„๋ก ๊ณ„ํšํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์กด ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ ๊ตฌ์„ฑ์š”์†Œ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” Compose์˜ MaterialTheme๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํƒ์ƒ‰ ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ Compose์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ธฐ์กด ์ฝ”๋“œ์™€ ๋”์šฑ ์ง‘์ค‘์ ์œผ๋กœ ํ†ตํ•ฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์„ธ์š”. Jetpack Compose Navigation์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹จ์ผ ํ™œ๋™ ์•ฑ์—์„œ ๋” ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•˜๊ณ  ๋” ์ง๊ด€์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ์กด ํƒ์ƒ‰ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Jetpack Compose ์ฑ„ํƒํ•˜๋ฉด ๊ฐœ๋ฐœ ์ค‘ ์ค‘๋‹จ์ด ์ ์ง„์ ์œผ๋กœ ์ตœ์†Œํ™”๋˜๊ณ  ์ œ์–ด๋˜๊ณ  ์นœ์ˆ™ํ•œ ์ปจํ…์ŠคํŠธ์—์„œ Compose ๊ฐœ๋…์„ ์ ์šฉํ•˜๋Š” ํ•™์Šต ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋” ๋งŽ์€ ๊ตฌ์„ฑ์š”์†Œ์™€ ํ™”๋ฉด์„ ๋ณ€ํ™˜ํ•˜๋ฉด Jetpack Compose ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ UI ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ฐ€์†ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ AppMaster ์™€ ๊ฐ™์€ no-code ํ”Œ๋žซํผ์˜ ๋งฅ๋ฝ์—์„œ Jetpack Compose ์˜ ํ†ตํ•ฉ์€ ๋Œ€๋ถ€๋ถ„ ์ถ”์ƒํ™”๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ์˜ ์‚ฌ์šฉ์ž๋Š” ์ˆ˜๋™ ํ†ตํ•ฉ์˜ ๋ณต์žก์„ฑ์„ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์ตœ์‹  UI ๋””์ž์ธ ์˜ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Compose๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋ฉด Compose๋ฅผ ์ง€์›ํ•˜๋Š” ํ”Œ๋žซํผ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝํ—˜์ด ํ–ฅ์ƒ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ์—†๊ฑฐ๋‚˜ low-code ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์œผ๋กœ ๋” ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose ์‚ฌ์šฉํ•˜์—ฌ Android ์•ฑ์„ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ๊ธธ์€ ๋ณด๋žŒ ์žˆ๊ณ  ๋” ์œ ์—ฐํ•˜๊ณ  ๋ฐ˜์‘์ ์ด๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋กœ ์ง์ ‘ ์ž‘์—…ํ•˜๋“  no-code ํ”Œ๋žซํผ์„ ํ™œ์šฉํ•˜๋“  Jetpack Compose ์™€ ๊ธฐ์กด Android ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์€ Android UI ๋””์ž์ธ์˜ ๋ฏธ๋ž˜๋กœ ๋”์šฑ ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜ ํ…Œ์ŠคํŠธ

์ฒซ ํ™”๋ฉด ํ”„๋กœํ† ํƒ€์ž… ๋งŒ๋“ค๊ธฐ
๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์†์ฝ”๋”ฉํ•˜์ง€ ์•Š๊ณ ๋„ Compose ๋ ˆ์ด์•„์›ƒ์„ ์ž‘๋™ํ•˜๋Š” ์•ฑ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.
๋งŒ๋“ค๊ธฐ ์‹œ์ž‘

ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. Jetpack Compose ์‚ฌ์šฉํ•œ ์ตœ์‹  UI ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํŒจ๋Ÿฌ๋‹ค์ž„์€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์„ ์–ธ์  ํŠน์„ฑ์„ ์ˆ˜์šฉํ•˜๋„๋ก ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ๋Š” ์ฃผ๋กœ ComposeTestRule ์ค‘์‹ฌ์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ํ…Œ์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด UI ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•˜๊ณ  ์›ํ™œํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” androidx.ui.test ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ Junit 4 ๋˜๋Š” Junit 5 ์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •

๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋จผ์ € ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” Gradle ํŒŒ์ผ์— ๊ด€๋ จ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. Jetpack Compose ์˜ ์ „์šฉ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ตฌ์„ฑ์— androidx.compose.ui:ui-test-junit4 ๋ฐ ๊ด€๋ จ ์ข…์†์„ฑ์„ ํฌํ•จํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Compose ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

Jetpack Compose ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • ํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์™€ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ค‘์ธ ์ปดํฌ์ €๋ธ”์„ ๋ฐฐ์น˜ํ•˜๋Š” composeTestRule ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ปดํฌ์ง€์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ด๋ฒคํŠธ ํ›„ UI ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • ์–ด์„ค์…˜์„ ํ™•์ธํ•˜์—ฌ ์ปดํฌ์ €๋ธ”์ด ์ƒํ˜ธ์ž‘์šฉ์ด๋‚˜ ์ƒํƒœ ๋ณ€๊ฒฝ์— ์˜ˆ์ƒ๋Œ€๋กœ ๋ฐ˜์‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

Compose์˜ ์œ ์šฉํ•œ ํ…Œ์ŠคํŠธ API

Jetpack Compose ์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ํด๋ฆญ, ์Šคํฌ๋กค, ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฐ€์‹œ์„ฑ ๋ฐ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ์™€ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ API ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” API๋กœ๋Š” onNode , performClick ๋ฐ assertTextEquals ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster ์˜ No-Code ํ”Œ๋žซํผ๊ณผ ํ†ตํ•ฉ

Jetpack Compose ์ˆ˜๋™์œผ๋กœ ์ฝ”๋”ฉ๋œ Android ๊ฐœ๋ฐœ์— ํ˜๋ช…์„ ์ผ์œผ์ผฐ๋‹ค๋ฉด AppMaster ์™€ ๊ฐ™์€ ํ”Œ๋žซํผ์€ ์ด๋Ÿฌํ•œ ์ตœ์‹  ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ no-code ํ™˜๊ฒฝ์— ํ†ตํ•ฉํ•˜์—ฌ ์ด๋ฅผ ๋”์šฑ ๋ฐœ์ „์‹œํ‚ต๋‹ˆ๋‹ค. AppMaster ์‚ฌ์šฉํ•˜๋ฉด ๋‹จ์ˆœํžˆ UI๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋””์ž์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ Jetpack Compose ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์ €์žฅ์†Œ, ํ•ธ๋“ค๋Ÿฌ, ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”Œ๋žซํผ์€ ์ƒ์„ฑํ•œ ์‹œ๊ฐ์  ๋ชจ๋ธ์—์„œ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์ƒ์„ฑ์„ ์ˆ˜์šฉํ•˜๋ฏ€๋กœ ํ•„์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ๋ฐœ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค.

Jetpack Compose ์—์„œ์˜ ํ…Œ์ŠคํŠธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด๋งŒํผ์ด๋‚˜ ๊นŠ์€ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ๋žŒ๋‹ค ์‹คํ–‰ ์บก์ฒ˜ ๋ฐ ํ™•์ธ๋ถ€ํ„ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ๋™์ž‘ ์ฒ˜๋ฆฌ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์‚ดํŽด๋ณผ ๋‚ด์šฉ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ปดํฌ์ €๋ธ” ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ์™€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋ฉด Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ๊ณผ ๋ฐ˜๋ณต์ ์ธ ๊ฐœ์„ ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ทธ ์ด์ƒ: ๊ณ ๊ธ‰ ์ž‘์„ฑ ๊ธฐ์ˆ 

Jetpack Compose ์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์ˆ™์ง€ํ–ˆ๋‹ค๋ฉด ์ด์ œ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ๋กœ UI ๋„๊ตฌ ํ‚คํŠธ๋ฅผ ๊ฐ•ํ™”ํ•˜์—ฌ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋ฐœ์ „์‹œํ‚ฌ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜๋ถ€ํ„ฐ ๋งž์ถค ๋ ˆ์ด์•„์›ƒ๊นŒ์ง€ Jetpack Compose ๋ณต์žกํ•œ UI ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์ถฉ์กฑํ•˜๋Š” ํ’๋ถ€ํ•œ API ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Compose UI๋ฅผ ๋‹๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ๊ณผ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Jetpack Compose ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜

์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋งค๋ ฅ์ ์ด๊ณ  ๋Œ€ํ™”ํ˜• UI๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์žˆ์–ด ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. Jetpack Compose ๋ชจ์…˜์„ ๊ตฌ์„ฑ์š”์†Œ์— ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์Šคํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ „ํ™˜ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์„ฑ, ์ƒํƒœ ๋ณ€๊ฒฝ์€ ๋ฌผ๋ก  ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ๊นŒ์ง€ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด:

  • ์ปดํฌ์ €๋ธ” ์†์„ฑ์˜ ์ดˆ๊ธฐ ๋ฐ ๋Œ€์ƒ ์ƒํƒœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • animateFloatAsState ๋˜๋Š” animateContentSize ์™€ ๊ฐ™์€ animate* ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ ๊ฐ„์„ ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋” ๋ณต์žกํ•œ ์‹œํ€€์Šค๋ฅผ ์œ„ํ•ด Transition API๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์—ฌ๋Ÿฌ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ•จ๊ป˜ ์•ˆ๋ฌดํ•ฉ๋‹ˆ๋‹ค.

๊ณผ๋„ํ•œ ๋ชจ์…˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ชฉ์ ์— ๋งž๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋งž์ถค ๋ ˆ์ด์•„์›ƒ

ํ‘œ์ค€ Compose ๋ ˆ์ด์•„์›ƒ์ด ๋””์ž์ธ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ๋ ˆ์ด์•„์›ƒ์ด ์ž‘๋™ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Layout ์ปดํฌ์ €๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜๋งŒ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด UI์—์„œ ์ปดํฌ์ €๋ธ”์„ ๋ฐฐ์—ดํ•˜๋Š” ๋ฐ ์™„์ „ํ•œ ์œ ์—ฐ์„ฑ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ๋งž์ถค ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”.
  • ์ œ๊ณต๋œ MeasurePolicy ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„ ์ปดํฌ์ €๋ธ”์„ ์ธก์ •ํ•˜๊ณ  ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • Modifier.layout ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ํ•˜์œ„ ํ•ญ๋ชฉ์˜ ์ธก์ • ๋ฐ ๋ฐฐ์น˜ ๋‹จ๊ณ„์— ๊ณ ์œ ํ•˜๊ฒŒ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

๋งž์ถค ๋ ˆ์ด์•„์›ƒ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด Compose์˜ ๋ ˆ์ด์•„์›ƒ ๋ชจ๋ธ์„ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์ต์ˆ™ํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ง€์—ฐ ์ปดํฌ์ €๋ธ”

ํฐ ๋ชฉ๋ก์ด๋‚˜ ๊ทธ๋ฆฌ๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ UI ๊ฐœ๋ฐœ์—์„œ ์ผ๋ฐ˜์ ์ธ ๊ณผ์ œ์ž…๋‹ˆ๋‹ค. Jetpack Compose ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— LazyColumn ๋ฐ LazyRow ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด Android ๋ทฐ์˜ RecyclerView์™€ ์œ ์‚ฌํ•˜๊ฒŒ ํ˜„์žฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์š”์†Œ๋งŒ ๊ตฌ์„ฑํ•˜๊ณ  ์žฌํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์„ธ๋กœ ๋ชฉ๋ก์—๋Š” LazyColumn ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ€๋กœ ๋ชฉ๋ก์—๋Š” LazyRow ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • items , itemsIndexed ๋ฐ ๊ธฐํƒ€ Lazy DSL ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๋ชฉ๋ก ์ฝ˜ํ…์ธ ๋ฅผ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.
  • ์ž์ฒด Lazy ๋ชฉ๋ก ์ƒํƒœ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋”์šฑ ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ํ•ญ๋ชฉ ํ‚ค๋ฅผ ์ •์˜ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์žฌ๊ตฌ์„ฑ์„ ๋ฐฉ์ง€ํ•˜์„ธ์š”.

์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ํšจ๊ณผ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋ฉด ๊ด‘๋ฒ”์œ„ํ•œ ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ์žˆ์–ด๋„ ๋ถ€๋“œ๋Ÿฝ๊ณ  ๋งค๋„๋Ÿฌ์šด UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๋ทฐ ์‹œ์Šคํ…œ๊ณผ์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ

๋งŽ์€ ์•ฑ์ด ์—ฌ์ „ํžˆ ๊ธฐ์กด Android ๋ณด๊ธฐ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Compose์—์„œ ์•„์ง ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ†ตํ•ฉ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ Compose๋Š” ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ์กด ๋ทฐ์—์„œ Compose UI๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ComposeView ์‚ฌ์šฉํ•˜์—ฌ ๋ž˜ํ•‘ํ•˜์„ธ์š”.
  • Compose ๋ ˆ์ด์•„์›ƒ ๋‚ด์— ๊ธฐ์กด ๋ทฐ๋ฅผ ํฌํ•จํ•˜๋ ค๋ฉด AndroidView ์ปดํฌ์ €๋ธ”์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ViewInterop ์‚ฌ์šฉํ•˜์—ฌ Compose์™€ ๊ธฐ์กด Android ๋ทฐ ์‹œ์Šคํ…œ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์ˆ˜๋ช… ์ฃผ๊ธฐ์™€ ์ปจํ…์ŠคํŠธ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด UI ๋„๊ตฌ ํ‚คํŠธ์™€ ์ตœ์‹  UI ๋„๊ตฌ ํ‚คํŠธ ๊ฐ„์— ์ „ํ™˜ํ•˜๋ฉด ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํŒจํ„ด์„ ๊ณ„์† ํ™œ์šฉํ•˜๋ฉด์„œ Compose๋กœ ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ๋งˆ ๋ฐ ์Šคํƒ€์ผ๋ง

Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ด‘๋ฒ”์œ„ํ•œ ํ…Œ๋งˆ ์„ค์ • ๋ฐ ์Šคํƒ€์ผ๋ง ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๋ธŒ๋žœ๋“œ ์ผ๊ด€์„ฑ๊ณผ ๋””์ž์ธ ์ถฉ์‹ค๋„๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ…Œ๋งˆ ์™ธ์—๋„ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ •์˜ ํ…Œ๋งˆ ์†์„ฑ์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฏธ๋ฆฌ ์ •์˜๋œ MaterialTheme ์•ฑ์˜ ๊ณ ์œ ํ•œ ๋””์ž์ธ ์–ธ์–ด์— ๋งž๊ฒŒ ํ™•์žฅํ•˜์„ธ์š”.
  • ํ†ต์ผ๋œ ๋ชจ์–‘๊ณผ ๋А๋‚Œ์„ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ๋ชจ์–‘ ๋ฐ ์ƒ‰์ƒ ๊ตฌ์„ฑํ‘œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Compose์˜ ํ…Œ๋งˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ์–ด๋‘์šด ๋ชจ๋“œ ์ง€์›์„ ๊ตฌํ˜„ํ•˜์„ธ์š”.

ํšจ๊ณผ์ ์ธ ํ…Œ๋งˆ ์ง€์ •์€ ์‹œ๊ฐ์  ๋งค๋ ฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์šฉ์„ฑ๋„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Jetpack Compose ์™€ ํ•จ๊ป˜ AppMaster ์˜ No-Code ํ”Œ๋žซํผ ์‚ฌ์šฉ

์ฝ”๋“œ์— ๋Œ€ํ•œ ์‹ฌ์ธต์ ์ธ ๋ถ„์„ ์—†์ด ๋ชจ๋ฐ”์ผ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด AppMasterJetpack Compose ์ง€์›ํ•˜๋Š” ๊ณ ๊ธ‰ no-code ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. drag-and-drop ํ†ตํ•ด ๋ชจ๋ฐ”์ผ ์•ฑ์˜ UI๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋””์ž์ธํ•˜๊ณ  AppMaster ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•„์š”์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ „ ๊ตฌ์ถ•๋œ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์„ธํŠธ์— ์•ก์„ธ์Šคํ•˜์„ธ์š”.
  • no-code ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์›ํ™œํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜์„ธ์š”.
  • ๊ธฐ๋ณธ ์•ฑ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์ƒ์„ฑ๋œ Kotlin ๋ฐ Jetpack Compose ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์„ธ์š”.

์ด๋Ÿฌํ•œ ํ†ตํ•ฉ์€ ๊ฐ€์†ํ™”๋œ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, Jetpack Compose ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด AppMaster ๊ฐœ๋ฐœ์ž์™€ ๋น„๊ฐœ๋ฐœ์ž ๋ชจ๋‘์—๊ฒŒ ๊ฐ•๋ ฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋” ๋น ๋ฅด๊ฒŒ ์‹œ์žฅ์— ์ถœ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ •๊ตํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

AppMaster ์˜ No-Code ํ”Œ๋žซํผ๊ณผ ํ•จ๊ป˜ Jetpack Compose ์‚ฌ์šฉ

์ƒํƒœ ๋ณ€๊ฒฝ์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ
๋ณต์žกํ•œ ์ƒํƒœ ์—ฐ๊ฒฐ ๋Œ€์‹  ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ํ”„๋กœ์„ธ์Šค ํŽธ์ง‘๊ธฐ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
์ง€๊ธˆ ์ฒดํ—˜ํ•˜๊ธฐ

Jetpack Compose Android ์•ฑ ๊ฐœ๋ฐœ ์„ธ๊ณ„์— ๋›ฐ์–ด๋“œ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋ณด๋‹ค ์ง๊ด€์ ์ด๊ณ  ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•œ UI ๋””์ž์ธ์„ ํ–ฅํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๊ฒฝ๋กœ๋Š” ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ฝ”๋”ฉ ๊ฒฝํ—˜์ด ์ œํ•œ์ ์ด๊ฑฐ๋‚˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์—ฌ๊ธฐ์— no-code ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์ธ AppMaster ๊ฐ•๋ ฅํ•œ ๋™๋งน์ž๋กœ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

AppMaster ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ ์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋Œ์–ด์„œ ๋†“์•„ ์ •๊ตํ•œ ์•ฑ์„ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ์  ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Jetpack Compose ํ†ตํ•ฉํ•จ์œผ๋กœ์จ AppMasterno-code ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ์ตœ์ฒจ๋‹จ ๊ธฐ์ˆ ์˜ ์›ํ™œํ•œ ์œตํ•ฉ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” no-code ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ Compose์˜ ์ด์ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster ๋‚ด์—์„œ Jetpack Compose ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋Š” Kotlin ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  drag-and-drop ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UI ์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”Œ๋žซํผ์˜ ๋ฐฑ์—”๋“œ๋Š” Jetpack Compose ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„๋Œ€์ ์ธ ์•ฑ ๋””์ž์ธ์„ ๋ฏผ์ฃผํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ํƒ๊ตฌํ•˜์ง€ ์•Š๊ณ ๋„ ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•˜๊ณ  ๋ฏธํ•™์ ์œผ๋กœ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster ์™€ ํ•จ๊ป˜ Jetpack Compose ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • AppMaster ํ”Œ๋žซํผ์— ๋กœ๊ทธ์ธํ•˜๊ณ  ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.
  • ๋ชจ๋ฐ”์ผ ์•ฑ ๋นŒ๋” ์„น์…˜์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„์ฃผ์–ผ ํŽธ์ง‘๊ธฐ๋กœ ์•ฑ ๋””์ž์ธ์„ ์‹œ์ž‘ํ•˜์„ธ์š”.
  • UI ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ”Œ๋žซํผ์—์„œ ์ž๋™์œผ๋กœ Jetpack Compose ์‚ฌ์šฉํ•˜์—ฌ ๋””์ž์ธ์„ Android ์•ฑ์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ Kotlin ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ช…์‹œ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ AppMaster ์˜ ์‹œ๊ฐ์  ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค(BP)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ •์˜ํ•˜์„ธ์š”.
  • ์•ฑ ๋””์ž์ธ์ด ์™„๋ฃŒ๋˜๋ฉด '๊ฒŒ์‹œ' ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋žซํผ ๋‚ด์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์•ฑ์„ ์ปดํŒŒ์ผํ•˜๊ณ , ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•˜์„ธ์š”.
  • ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด๋‚˜ ์†Œ์Šค ์ฝ”๋“œ(Enterprise ๊ตฌ๋…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)๋ฅผ ๊ฐ€์ ธ์™€ ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ ๊ฐœ๋ฐœ์„ ๋” ๋ฐœ์ „์‹œํ‚ค๋ ค๋Š” ๊ฒฝ์šฐ ์ž๋™ ์ƒ์„ฑ๋œ Jetpack Compose ์š”์†Œ์™€ ํ•จ๊ป˜ ๋งž์ถค Kotlin ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ no-code ํ™˜๊ฒฝ์˜ ํšจ์œจ์„ฑ์„ ํฌ์ƒํ•˜์ง€ ์•Š๊ณ  ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๋งž์ถค์„ค์ •์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster Android ๊ฐœ๋ฐœ ์—ฌ์ •์„ ๋‹จ์ˆœํ™”ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋ฐฐ๊ฒฝ์˜ ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ๊ฐ€ Jetpack Compose ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ด๋ฅผ ๋”์šฑ ํ’๋ถ€ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์•ฑ ์ปจ์…‰์„ ์‹คํ˜„ํ•˜๋ ค๋Š” ์ดˆ๋ณด์ž์ด๋“  ์‹ ์†ํ•œ ํ”„๋กœํ† ํƒ€์ดํ•‘ ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ๋…ธ๋ จํ•œ ๊ฐœ๋ฐœ์ž์ด๋“  ๊ด€๊ณ„์—†์ด AppMaster ์™€ Jetpack Compose ์˜ ์‹œ๋„ˆ์ง€ ํšจ๊ณผ๋Š” ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Jetpack Compose๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Jetpack Compose ๋Š” ๊ธฐ๋ณธ Android UI๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์‹  ๋„๊ตฌ ํ‚คํŠธ์ž…๋‹ˆ๋‹ค. ์ ์€ ์ฝ”๋“œ, ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ, Kotlin ๊ธฐ๋ฐ˜์˜ ์ง๊ด€์ ์ธ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ Android์—์„œ UI ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ฐ€์†ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Android ๊ฐœ๋ฐœ์— Jetpack Compose๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

Jetpack Compose UI ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๊ฐ„์†Œํ™”๋˜๊ณ  ์„ ์–ธ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ๋ณต์žกํ•œ UI๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Kotlin์„ ๋ฐฐ์›Œ์•ผ ํ•˜๋‚˜์š”?

์˜ˆ, Jetpack Compose Kotlin์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด Kotlin์— ๋Œ€ํ•œ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Jetpack Compose๋ฅผ ๊ธฐ์กด Android ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์ „์ ์œผ๋กœ! Jetpack Compose ๊ธฐ์กด Android ์•ฑ๊ณผ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋‚˜์š”?

Jetpack Compose ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ชจ๋ธ์„ ํ†ตํ•ด ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Compose ๊ธฐ๋Šฅ์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์— ์ž๋™์œผ๋กœ ์‘๋‹ตํ•˜์—ฌ ์ผ๊ด€๋˜๊ณ  ๋ฒ„๊ทธ ์—†๋Š” UI๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ์ €๋ธ” ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๋Š” ๊ธฐ์กด Android ๋ทฐ ํ…Œ์ŠคํŠธ์™€ ๋‹ค๋ฅธ๊ฐ€์š”?

์˜ˆ, ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ๊ธฐ์กด Android ๋ทฐ ๋Œ€์‹  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์— ํŠน๋ณ„ํžˆ ๋งž๋Š” ComposeTestRule ๋ฐ ๊ด€๋ จ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

AppMaster๋Š” Jetpack Compose๋ฅผ ์ง€์›ํ•˜๋‚˜์š”?

์˜ˆ, AppMaster Jetpack Compose ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ง๊ด€์ ์ธ no-code ํ”Œ๋žซํผ์œผ๋กœ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ UI๋ฅผ ๋””์ž์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Jetpack Compose๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ „์ œ ์กฐ๊ฑด์ด ์žˆ๋‚˜์š”?

Jetpack Compose ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— Android ๊ฐœ๋ฐœ ๋ฐ Kotlin ์–ธ์–ด ๊ตฌ๋ฌธ์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์ˆ™์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋””์ž์ธ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ปดํฌ์ €๋ธ”์„ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

Jetpack Compose ๋Š” ๋งž์ถค์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””์ž์ธ ์‚ฌ์–‘์— ๋งž๋Š” ๊ณ ์œ ํ•œ UI ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jetpack Compose๋กœ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

Jetpack Compose ์‚ฌ์šฉํ•˜๋ฉด ํ˜„๋Œ€์ ์ด๊ณ  ํšจ์œจ์ ์ด๋ฉฐ ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚œ UI์— ์ค‘์ ์„ ๋‘๊ณ  ๋‹จ์ˆœํ•œ ๊ฒƒ๋ถ€ํ„ฐ ๋ณต์žกํ•œ ๊ฒƒ๊นŒ์ง€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  Jetpack Compose ์—…๋ฐ์ดํŠธ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

๊ณต์‹ Android ๊ฐœ๋ฐœ์ž ์›น์‚ฌ์ดํŠธ๋ฅผ ํŒ”๋กœ์šฐํ•˜๊ณ , ๊ด€๋ จ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ , ์ปค๋ฎค๋‹ˆํ‹ฐ ํฌ๋Ÿผ์— ๊ฐ€์ž…ํ•˜์—ฌ ์ตœ์‹  Jetpack Compose ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์ตœ์‹  ์ •๋ณด๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”.

Jetpack Compose๋Š” ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๋‚˜์š”?

์˜ˆ, Jetpack Compose ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๊ณ  Google์—์„œ ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์ตœ์‹  Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํƒ์ž…๋‹ˆ๋‹ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
Jetpack Compose ์‹œ์ž‘ํ•˜๊ธฐ: ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ | AppMaster