iOS Layout์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. autolayout๋งŒ์ด ์ •๋‹ต์ด๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์˜ค์‚ฐ์ด์—ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์ฃผ๊ธฐ์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

Storyboard

์žฅ์ ์œผ๋กœ๋Š” UI ๊ตฌ์„ฑ์„ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ๋ฐ”๋กœ ์‹œ๊ฐ์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์šฐ์Šค๋กœ ์† ์‰ฝ๊ฒŒ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  autolayout๋„ ๋ณด๋‹ค ์†์‰ฝ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹จ์ ์ด ๋ณด๋‹ค ๋งŽ๋‹ค. ์—ฌ๋Ÿฌ constraint๋ฅผ ๋™์ ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ํ™”๋ฉด์ด ์žˆ๋‹ค๋ฉด constraint๋ฅผ ๋ณ€์ˆ˜๋กœ ๋นผ์„œ ์ž‘์—…ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ history ํŒŒ์•…๋„ ์–ด๋ ต๋‹ค. ๋กœ๋”ฉ ์‹œ๊ฐ„๋„ ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ๋˜ ์žฌ์‚ฌ์šฉ์„ ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ๋„ ์–ด๋ ต๋‹ค. merge ๊ฒฝ์šฐ conflict๊ฐ€ ๋‚˜๋ฉด xml์„ ์—ด์–ด์„œ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ƒ๋‹นํžˆ ๋ณต์žกํ•˜๋‹ค.

  • ์žฅ์ 
    • ๋น ๋ฅธ ์ดˆ๊ธฐํ™”
    • ์‹œ๊ฐํ™”
    • ๋‚ฎ์€ ์ง„์ž…์žฅ๋ฒฝ
    • view code๊ฐ€ ์—†์–ด์ ธ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์งง์•„์ง
  • ๋‹จ์ 
    • ๊ธด ๋กœ๋”ฉ ์‹œ๊ฐ„
    • ์œ ์ง€๋ณด์ˆ˜, ์žฌ์‚ฌ์šฉ ์–ด๋ ค์›€
    • conflict ํ•ด๊ฒฐ ์–ด๋ ค์›€

Frame

๋ทฐ์˜ ํ”„๋ ˆ์ž„์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ •์˜ํ•˜๋ฉด ์œ ์—ฐํ•˜๋‹ค. ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒจ๋„ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค. ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๋‚œ์ด๋„๋„ ๋งŽ์ด ์–ด๋ ค์›Œ์ง„๋‹ค. ํ•˜์ง€๋งŒ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๋‹ค.

  • ์žฅ์ 
    • ์–ด๋– ํ•œ ๋ณ€ํ™”์—๋„ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Œ
    • ์œ„์น˜, ํฌ๊ธฐ๋งŒ์„ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋จ
  • ๋‹จ์ 
    • ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ
    • autolayout ๋Œ€๋น„ ์ถ”๊ฐ€์ ์ธ ๋™์ž‘์ด ์—†๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๋งก๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฆ„

Autolayout

์ œ์•ฝ ์กฐ๊ฑด์„ ํ™œ์šฉํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ด€๊ณ„๋งŒ ์ •์˜ํ•ด๋‘๋ฉด, ์ผ์ข…์˜ ์ˆ˜์‹์„ ํ†ตํ•ด layout์„ ์žฌ๊ณ„์‚ฐํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ž˜ ๊ตฌ์„ฑํ•ด๋‘๋ฉด ํ™”๋ฉด ๋ณ€ํ™”์— ๋Œ€์‘ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ layout์„ ๊ฒฐ๊ตญ์—๋Š” ์žฌ๊ณ„์‚ฐํ•˜๋Š” ๋กœ์ง์ด ์ถ”๊ฐ€์ ์œผ๋กœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ์‹ค์ œ๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ง๊ด€์„ฑ์ด ์กฐ๊ธˆ์€ ๋–จ์–ด์ง„๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ๋‹ค.

  • ์žฅ์ 
    • ์ œ์•ฝ์„ ํ†ตํ•ด ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ• ์ผ์ด ์ค„์–ด๋“ฆ
    • ์ž๋™์œผ๋กœ layout์„ ์žฌ๊ณ„์‚ฐํ•ด์คŒ
  • ๋‹จ์ 
    • ๋Š๋ฆผ
    • ์ฝ”๋“œ๋กœ ์ž‘์„ฑ์‹œ ํ•„์š”์—†๋Š” ๋กœ์ง์ด ๋“ค์–ด๊ฐ
      • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ธˆ ๋‚˜์Œ

cc. ์—ฌ๊ธฐ์„œ stackView๊ฐ€ ์„ฑ๋Šฅ์ด ์•ˆ ์ข‹๋‹ค๋Š” ์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์—ญ์‹œ ๋ญ”๊ฐ€ ๋„ˆ๋ฌด ์‰ฌ์šฐ๋ฉด ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง„๋‹ค.

๋งˆ๋ฌด๋ฆฌ

์ตœ์‹  ๊ธฐ์ˆ ์ด๋ผ ํ•ด์„œ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ข‹์€ ๊ฒƒ์ด ์•„๋‹˜์„ ๋ฐฐ์› ๋‹ค. ๋ฌธ์ œ์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ์‚ฌ๊ณ ๋ฅผ ๊ฐ€์ง„ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค. autolayout์ด ๋Š๋ฆฌ๋‹ค๋Š” ์ ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด ์ข‹์•˜๋‹ค. ๋!

layoutBox/LayoutFrameworkBenchmark

ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ ์œผ๋กœ ์ข‹์ง€ ์•Š๋‹ค.

Reference