๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Android][Flutter] ํ”Œ๋Ÿฌํ„ฐ์˜ ๋ Œ๋”๋ง ๋ฐฉ์‹

์ถœ์ฒ˜

Gemini

 

 

์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ํ”Œ๋Ÿฌํ„ฐ๋Š” ๊ณ ์„ฑ๋Šฅ 2D ๋ Œ๋”๋ง ์—”์ง„์ธ Skia๋ฅผ ์‚ฌ์šฉํ•ด UI๋ฅผ ์ง์ ‘ ๋ Œ๋”๋งํ•œ๋‹ค.

 

Skia

๊ตฌ๊ธ€์—์„œ ์˜คํ”ˆ์†Œ์Šค๋กœ ์ œ๊ณตํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

์›น, ๋ชจ๋ฐ”์ผ, ๋ฐ์Šคํฌํƒ‘ ๋“ฑ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

Skia์˜ ํ•ต์‹ฌ ๋ Œ๋”๋ง ๊ธฐ์ˆ 

1. ์œ„์ ฏ ํŠธ๋ฆฌ

ํ”Œ๋Ÿฌํ„ฐ๋Š” ๋ชจ๋“  UI ์š”์†Œ๋ฅผ ์œ„์ ฏ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. ์œ„์ ฏ ํŠธ๋ฆฌ๋Š” ๋ถ€๋ชจ ์œ„์ ฏ๊ณผ ์ž์‹ ์œ„์ ฏ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์œ„์ ฏ์€ ์ž์ฒด์ ์ธ ๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŒ… ๋กœ์ง์„ ๊ฐ€์ง„๋‹ค.

 

1-1.์œ„์ ฏ ํŠธ๋ฆฌ์˜ ์—ญํ• 

 

  • UI ์š”์†Œ๋ฅผ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
  • ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ณ  ์ ์šฉํ•œ๋‹ค.
  • ํŽ˜์ธํŒ… ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

2. ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ

ํ”Œ๋Ÿฌํ„ฐ๋Š” ๋‹ค์–‘ํ•œ ๋ ˆ์ด์•„์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•ด ์œ„์ ฏ ํŠธ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.

๋”๋ณด๊ธฐ

ํ”Œ๋Ÿฌํ„ฐ ๋ ˆ์ด์•„์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”Œ๋Ÿฌํ„ฐ๋Š” ๋‹ค์–‘ํ•œ ๋ ˆ์ด์•„์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•ด ์œ„์ ฏ ํŠธ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค. ์ฃผ์š” ๋ ˆ์ด์•„์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. Constrain-based layout

  • ๋ถ€๋ชจ ์œ„์ ฏ์ด ์ž์‹ ์œ„์ ฏ์—๊ฒŒ ํฌ๊ธฐ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ œ๊ณตํ•˜๊ณ , ์ž์‹ ์œ„์ ฏ์€ ๋ถ€๋ชจ์˜ ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ž์‹ ์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ ˆ์ด์•„์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ, Column, Row, Stack, SizedBox ๋“ฑ ๋‹ค์–‘ํ•œ ์œ„์ ฏ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์˜ˆ์‹œ: Column ์œ„์ ฏ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Row ์œ„์ ฏ์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ Row ์œ„์ ฏ์€ Column ์œ„์ ฏ์˜ ๊ฐ€๋กœ ๊ธธ์ด์— ๋งž์ถฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•œ๋‹ค.

2. Size-based layout:

2. Size-based layout

 

  • ์ž์‹ ์œ„์ ฏ์˜ ํฌ๊ธฐ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • Constrain-based layout์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์‹œ: SizedBox ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ์œ„์ ฏ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

3. Custom layout

 

  • ์œ„์ ฏ ํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ณ„์‚ฐํ•˜๊ณ  ๋ฐฐ์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ ˆ์ด์•„์›ƒ์ด๋‹ค.
  • ๋” ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.
  • LayoutBuilder, CustomSingleChildLayout, CustomMultiChildLayout ๋“ฑ์˜ ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์‹œ: ํ™”๋ฉด์„ ๋Œ€๊ฐ์„ ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด Custom layout์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

4. Flexible layout

 

  • Constrain-based layout์˜ ํ™•์žฅ ๋ฒ„์ „์œผ๋กœ, ์ž์‹ ์œ„์ ฏ๋“ค์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์„ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐฐ๋ถ„ํ•˜๋„๋ก ํ•œ๋‹ค.
  • Row, Column, Wrap ๋“ฑ์˜ ์œ„์ ฏ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์˜ˆ์‹œ: Row ์œ„์ ฏ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Text ์œ„์ ฏ์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ, Text ์œ„์ ฏ๋“ค์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์— ๋”ฐ๋ผ ํฌ๊ธฐ๋ฅผ ์กฐ์ •๋œ๋‹ค.

 

5. Positioning

 

  • ์œ„์ ฏ์„ ํŠน์ • ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • Stack, Positioned ๋“ฑ์˜ ์œ„์ ฏ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์˜ˆ์‹œ: Stack ์œ„์ ฏ ์œ„์— Positioned ์œ„์ ฏ์„ ๋ฐฐ์น˜ํ•˜์—ฌ ์œ„์ ฏ์˜ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

6. Alignment

 

  • ์œ„์ ฏ์„ ์ •๋ ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • Center, Align, SafeArea ๋“ฑ์˜ ์œ„์ ฏ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์˜ˆ์‹œ: Column ์œ„์ ฏ ์•ˆ์˜ Text ์œ„์ ฏ์„ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๋ ค๋ฉด Center ์œ„์ ฏ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

3. ํŽ˜์ธํŒ… ์‹œ์Šคํ…œ

ํ”Œ๋Ÿฌํ„ฐ๋Š” Canvas API๋ฅผ ์ œ๊ณตํ•ด ์œ„์ ฏ์„ ์ง์ ‘ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. Canvas API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๋„ํ˜•, ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ ๋“ฑ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์ •์˜ ์…ฐ์ด๋”๋ฅผ ์‚ฌ์šฉํ•ด ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”ฝ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

4. ํ•˜๋“œ์›จ์–ด ๊ฐ€์†

ํ”Œ๋Ÿฌํ„ฐ๋Š” GPU๋ฅผ ์‚ฌ์šฉํ•ด ๋ Œ๋”๋ง ์ž‘์—…์„ ๊ฐ€์†ํ™”ํ•œ๋‹ค. GPU๋Š” CPU๋ณด๋‹ค ๊ทธ๋ž˜ํ”ฝ ์ž‘์—… ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ํ”Œ๋Ÿฌํ„ฐ๋Š” ๋ถ€๋“œ๋Ÿฝ๊ณ  ๋น ๋ฅธ UI๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ”Œ๋Ÿฌํ„ฐ ๋ Œ๋”๋ง ๋ฐฉ์‹์˜ ์žฅ์ 

 

1. ๊ณ ์„ฑ๋Šฅ

Skia์™€ ๊ฐ™์€ ๊ณ ์„ฑ๋Šฅ ๋ Œ๋”๋ง ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋“œ๋Ÿฝ๊ณ  ๋น ๋ฅธ UI๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

2. ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ

Skia๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”Œ๋Ÿฌํ„ฐ ์•ฑ์€ ๋ณ„๋„์˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

3. ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅ

Canvas API์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.