์์ฑ์ผ: 2018.03.07
์๋ฌธ: Optimizing Layout Hierarchies์ ๋ฒ์ญํ ๊ธ์ ๋๋ค.
๋ฒ ์ด์ง ๋ ์ด์์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ ์ด์์์ด ๋๋ค๋ ๊ฒ์ ํํ ์คํด์
๋๋ค. ๊ทธ๋ฌ๋, ๋น์ ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ๊ฐํ ๊ฐ ์์ ฏ๊ณผ ๋ ์ด์์์ ์ด๊ธฐํ, ๋ฐฐ์น, ๊ทธ๋ ค์ง๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ค์ฒฉ๋ LinearLayout์ ์ฌ์ฉํ๋ ๊ฒ์ ์ง๋์น๊ฒ ๊น์ ๋ทฐ ๊ณ์ธต์ ์ด๋ํ ์๋ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ, layout_weight๋ฅผ ์ฌ์ฉํ๋ ๋ช ๊ฐ์ LinearLayout์ ์ค์ฒฉํ๋ ๊ฒ์ ๊ฐ child๊ฐ ํ๋ฒ ๋ ์ธก์ ๋๊ธฐ ๋๋ฌธ์ ํนํ ๋น์ฉ์ด ๋์ต๋๋ค. ListView๋ GridView๋ฅผ ์ฌ์ฉํ ๋์ฒ๋ผ inflate๊ฐ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ ํนํ ์ค์ํฉ๋๋ค.
์ด ๊ธ์ ํตํด ๋ ์ด์์์ ๊ฒํ ํ๊ณ ์ต์ ํํ๊ธฐ ์ํ Hierarchy Viewer์ Lint ์ฌ์ฉ๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
๋ ์ด์์ ๊ฒํ ํ๊ธฐ
Android SDK tools์๋ ์ ํ๋ฆฌ์ผ์ด์
์คํ ๋์ ๋ ์ด์์์ ๋ถ์ํ ์ ์๊ฒ ํด์ฃผ๋ Hierarchy Viewer๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด ํด์ ์ด์ฉํ์ฌ ๋ ์ด์์ ์ฑ๋ฅ์ธก๋ฉด์์์ ๋ณ๋ชฉํ์(bottleneck)์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค.
Hierarchy Viewer๋ ์คํ์ค์ธ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ๋ ์๋ฎฌ๋ ์ดํฐ ์ ํํจ์ผ๋ก์จ ๋์ํ๊ณ , ๋ ์ด์์ ํธ๋ฆฌ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ฐ ๋ธ๋ก์ Measure / Layout / Draw ์ฑ๋ฅ์ ๋ํ๋ด๋ฉฐ, ์ด๋ฅผ ํตํด ์ ์ฌ์ ์ธ ์ด์๋ฅผ ํ์
ํ ์ ์์ต๋๋ค.
์์๋ฅผ ๋ณด๋ฉด, figure 1์ ListView์ item์ผ๋ก ์ฐ์ธ ๋ ์ด์์ ํ๋๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ด ๋ ์ด์์์ ์ผ์ชฝ์ ์์ ๋นํธ๋งต ํ๋์ ์ค๋ฅธ์ชฝ์ ๋ ๊ฐ๋ก ์์ธ ํ ์คํธ ์์ดํ ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด ๋ ์ด์์์ฒ๋ผ ์ฌ๋ฌ๋ฒ inflate๋ ๋ ์ด์์์ด ์ต์ ํํ๋ ๊ฒ์ ์ฑ๋ฅ ์ด๋์ ๋ฐฐ๋ก ๋๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ํนํ ์ค์ํฉ๋๋ค.
Hierarchy Viewer๋ ๊ฐ๋ฅํ ๋๋ฐ์ด์ค์ ๊ทธ๋ค์ ์คํ์ค์ธ ์ปดํฌ๋ํธ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๋๋ค. Windows ํญ์์ ์ปดํฌ๋ํธ๋ฅผ ์ ํํ์ธ์. ๊ทธ๋ฆฌ๊ณ Hierarchy View๋ฅผ ํด๋ฆญํ๋ฉด ์ ํํ ์ปดํฌ๋ํธ์ ๋ ์ด์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, figure 2๋ figure 1์ ๋ ์ด์์์ ๋ณด์ฌ์ค๋๋ค.
๋ ์ด์์ ๊ฐ์ ํ๊ธฐ
์ ์์์ ๋ ์ด์์ ์ฑ๋ฅ์ ์ค์ฒฉ๋ LinearLayout์ผ๋ก ์ธํด ๋๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋ ์ด์์์ ์ค์ฒฉ์ ์ค์ฌ(flattening;ํํํ๊ฒ ํ๋ค) ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋คใ ก๋ ์ด์์์ ์ข๊ณ ๊น๊ฒ ๋ง๋ค๊ธฐ๋ณด๋ค, ์๊ณ ๋๊ฒ ๋ง๋์ธ์. Root ๋ ธ๋๋ก์ RelativeLayout์ ๊ทธ๋ฐ ๋ ์ด์์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๊ทธ๋ผ ์ด ๋์์ธ์ RelativeLayout์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ํํ์ ๋, ๋ ์ด์์์ด 2-level ๊ณ์ธต์ผ๋ก ๋ฐ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์๋ก์ด ๋ ์ด์์์ ๊ฒฐ๊ณผ๋ ์ด๋ ๊ฒ:
์ด ๋ ์ด์์์ ๋ชฉ๋ก์ ๋ชจ๋ ํญ๋ชฉ์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ์์ ์ด์ ์ด ๋ช ๋ฐฐ๊ฐ ๋ ๊ฒ์
๋๋ค.
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ LinearLayout ์ค๊ณ์์ layout_weight ์ฌ์ฉ์ ์ธก์ ์๋๋ฅผ ๋๋ฆฌ๊ฒ ํ ์ ์๋ค๋ ์ ์
๋๋ค. ์ด๊ฑด ๊ฐ ๋ ์ด์์์ ์ผ๋ง๋ ์ ์ ํ ์ฌ์ฉํ๋์ง์ ๋ํ ํ ๊ฐ์ง ์์์ด๊ณ , ์ฐ๋ฆฌ๋ layout weight๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ง ํ์์ ์ธ์ง ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ช๋ช ๋ณต์กํ ๋ ์ด์์์ ๊ฒฝ์ฐ, ์์คํ ์ด ๊ฐ์ UI ์์๋ฅผ ์ค๋ณต์ผ๋ก ์ธก์ ํ๋๋ผ ์ฑ๋ฅ์ ๋ญ๋นํ ์๋ ์์ต๋๋ค. ์ด ํ์์ double taxation์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. double taxation์ ๋ํ ๋ ๋ง์ ์ ๋ณด์ ์ด๋ฅผ ์ด๋ป๊ฒ ๋ฐฉ์งํ๋์ง๋ Performance and View Hierarchies๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Lint ์ฌ์ฉ
๊ฐ๋ฅํ ๋ทฐ ๊ณ์ธต ์ต์ ํ๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ ์ด์์ ํ์ผ์ ๋ํด lint tool์ ์คํํ๋ ๊ฒ์ ํญ์ ์ข์ ์ต๊ด์
๋๋ค. Lint๋ Layoutopt tool์ ๋์ฒดํ๊ณ , ๋ ์ข์ ๊ธฐ๋ฅ์ฑ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. lint ๋ฃฐ์ ๋ํ ๋ช ๊ฐ์ ์์์
๋๋ค: Compound Drawable์ ์ฌ์ฉํ์ธ์ - ํ๋์ ImageView์ ํ๋์ TextView๋ฅผ ๊ฐ๋ LinearLayout์ ํ compound drawable๋ก ๋ค๋ฃจ๋ฉด ๋์ฑ ํจ์จ์ ์ผ ๊ฒ์
๋๋ค.
- root ํ๋ ์์ ํฉ์น์ธ์ - ๋ง์ฝ ๋ ์ด์์์ root๊ฐ FrameLayout์ด๊ณ background๋ padding ๋ฑ์ ์ฃผ์ง ์์๋ค๋ฉด, ์กฐ๊ธ ๋ ํจ์จ์ ์ธ merge ํ๊ทธ๋ก ๋์ฒด๋ ์ ์์ต๋๋ค.
- ์ฌ์ฉํ์ง ์๋ leaf - ์์์ด ์๊ฑฐ๋ background๊ฐ ์๋ ๋ ์ด์์์ ์ค์ฒฉ์ ์์ ๊ณ ๋ ํจ์จ์ ์ธ ๋ ์ด์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ํด์ ๊ฑฐ์ ์ญ์ ๊ฐ๋ฅํฉ๋๋ค.(์ ๋ณด์ด๊ธฐ ๋๋ฌธ์)
- ์ฌ์ฉํ์ง ์๋ ๋ถ๋ชจ - background๊ฐ ๋ฐ๋ก ์๊ณ , ScrollView๋ ๋ฃจํธ ๋ ์ด์์์ด ์๋๋ฐ๋ ์์ ๋ทฐ ํ๋๋ฅผ ๊ฐ๋ ๋ ์ด์์์ ์ค์ฒฉ ์ ๊ฑฐ์ ํจ์จ์ ์ธ ๋ ์ด์์ ๊ณ์ธต์ ์ํด ์ญ์ ๊ฐ๋ฅํ๊ณ ๊ทธ ์์ ๋ทฐ๋ฅผ ๋ถ๋ชจ ๋ทฐ๋ก ๋ฐ๋ก ์ฎ๊ฒจ๋ ๋ฉ๋๋ค.
- ๊น์ ๋ ์ด์์๋ค - ๋๋ฌด ๋ง์ด ์ค์ฒฉ๋ ๋ ์ด์์์ ์ฑ๋ฅ์ ์ข์ง ์์ต๋๋ค. ์ฑ๋ฅ ํฅ์์ ์ํด RelativeLayout์ด๋ GridLayout๊ฐ์ ์ค์ฒฉ์ด ๋ง์ด ํ์์๋ ๋ ์ด์์์ ๊ณ ๋ คํด๋ณด์ธ์. depth์ ๊ธฐ๋ณธ ์ต๋์น๋ 10์ ๋๋ค.
Lint์ ๋ ๋ค๋ฅธ ์ฅ์ ์ Android Studio์ ํตํฉ๋์ด ์๋ค๋ ์ ์
๋๋ค. Lint๋ ์ฌ๋ฌ๋ถ์ด ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ๋๋ง๋ค ์๋์ผ๋ก ์คํ๋ฉ๋๋ค. Android Studio๋ฅผ ์ด๋ค๋ฉด, ์ฌ๋ฌ๋ถ์ ๋ํ ํน์ ๋น๋ ํ์
๋๋ ๋ชจ๋ ๋น๋ ํ์
์ ๋ํด lint ๊ฒ์ฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Android Studio์ File>Settings>Project Settings ์ต์
์์ ๊ฒ์ฌ์ profile๊ณผ ์์ฑ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ง์๋๋ ๊ฒ์ฌ์ ํจ๊ป inspection configuration ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
'๊ฐ๋ฐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Kotlin Extension Function์ ์ฌ์ฉํ์ฌ ๋๋ธ ํด๋ฆญ ๋ฐฉ์งํ๊ธฐ (0) | 2021.04.08 |
---|---|
[Android] Jetpack - LiveData (0) | 2021.04.08 |
[Android] 100% ์ด๋ณด์๋ฅผ ์ํ RxJava(RxJava for 100% beginners)-part 1 (0) | 2021.04.08 |
[Android] Bitmap์ ์์ ์ ํ๊ธฐ (0) | 2021.04.08 |
[Android] Live Data (0) | 2021.04.08 |