-
[Android] findViewById ์๋ฆฌAndroid 2022. 3. 13. 14:45๋ฐ์ํ
findViewById ๋?
์๋๋ก์ด๋ ๊ฐ๋ฐ์์ findViewById ๋ฉ์๋๋ ๋ ์ด์์์ ์๋ ๋ทฐ๋ฅผ ๋ฆฌ์์ค id๋ฅผ ํตํด์ ์ํ๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฉ์๋์ ๋๋ค. ๊ทธ ์ ์ setContentView์ ๊ฐ์ ๋ฉ์๋๋ก xml์ ์๋ ๋ฆฌ์์ค๋ค์ ์ง์ ํ ์์ฑ์ ๋ง๊ฒ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํด์ผ ํฉ๋๋ค. findViewById๋ก ๋ทฐ ๊ฐ์ฒด๋ฅผ ํ๋์ฉ ๊ฐ์ ธ์ค๊ฒ ๋๋ฉด ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋๋ค์ ๋ง์ด ์์ฑํ๊ฒ ๋๊ณ , ์ฑ๋ฅ์์ ์ด์ ๋ก๋ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋์ฒดํ ์ ์๋ ๋ฐฉ๋ฒ๋ค์ด ๋ํ๋๊ณ ์์ต๋๋ค. ๋์ฒด ๋ฐฉ๋ฒ๋ง ์ตํ๋ ์ข์ง๋ง findViewById๊ฐ ์ด๋ ํ ์ด์ ๋ก ์ธํด ์ฑ๋ฅ์ด ์ ์ข์์ง ๊ณต๋ถํ๋ ๊ฒ๋ ์ ์ตํ๊ธฐ์ ๊ธ์ ์์ฑํ์์ต๋๋ค.
Activitiy์์ findViewById๋ฅผ ํธ์ถํ๋ฉด ๋ด๋ถ์ ์ผ๋ก Window ํด๋์ค์ findViewById๋ฅผ ํธ์ถํ๊ฒ ๋ฉ๋๋ค. ์ดํ getDecorView์ findViewById๋ฅผ ํธ์ถํฉ๋๋ค.
DecorView๋ View์ด๊ธฐ์ View ํด๋์ค์ findViewById๋ฅผ ํธ์ถํ๊ฒ ๋๊ณ findViewTraversal์ ์ฐพ๊ณ ์ํ๋ ๋ฆฌ์์ค id๋ฅผ ๋์ ํ์ฌ ํธ์ถํฉ๋๋ค.
์ฌ์ค์ DecorView๋ setContentView์์ ์ค์ ํ ๋ ์ด์์์ ๋ฃจํธ ๋ทฐ์ด๊ธฐ์ ViewGroup์ ํด๋น๋์ด ViewGroup์ findViewTraversal ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ถํฐ๊ฐ findViewById์ ์๋ฆฌ๊ฐ ์ ๋๋ก ๋ํ๋๊ฒ ๋๋๋ฐ, mChildren ์ฆ ์์ ๋ทฐ๋ค์ ํ๋์ฉ ํ์ํ์ฌ id๊ฐ ๊ฐ์ ๋ทฐ๊ฐ ์์ผ๋ฉด ๋ฐํํ๊ณ ์ข ๋ฃํ๋๋ก ๋ก์ง์ด ๊ตฌํ๋์ด ์์ต๋๋ค. ๋ง์ผ mChildren ๋ด์ View๊ฐ ์๋ ๋ ํ๋์ ViewGroup์ด ์กด์ฌํ๋ฉด ํด๋น ViewGroup์ findViewById๋ฅผ ํธ์ถํ๊ณ findViewTraversal๊น์ง ๋ค์ ํธ์ถํ๊ฒ ๋ฉ๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก mChildren ๋ทฐ๋ค์ ํ๋์ฉ ๊น์ด ํ์ ํ ํ๋์ฉ id๋ฅผ ๋น๊ตํ๋ ๋ก์ง์ผ๋ก ํธ๋ฆฌ๊ตฌ์กฐ์ ๊น์ด์ฐ์ ํ์(DFS)์ ๋์ผํ๊ฒ ์ํ๋๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ํจ์ ์ด๋ฆ๋ Traversal(์ํ)๋ผ๊ณ ์์ฑ๋ ์ด์ ๋ ์ ๋ฐ์๋ ๊ฑธ๋ก ๋ณด์ ๋๋ค. ๐
๊ฒฐ๋ก
findViewById๋ ๋ฃจํธ ๋ทฐ์์ ํธ๋ฆฌ์ํ๋ฅผ ๊ฑฐ์ณ์ ํ์์ ํ๊ธฐ์ ๋ณต์กํ ๋ทฐ๊ฐ ์๋๋ผ๋ฉด ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋์ง๋ ์์ง๋ง ์์ ๋ทฐ๋ค์ด ๋ง๊ณ ๋ณต์กํ ์๋ก ์๊ฐ์ด ๋ง์ด ์์๋๋ค๋ ์ ์ ์ธ์งํ๊ณ ์ฌ์ฉํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ์ํ'Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] ViewBinding์ด๋? (0) 2022.03.20 [Android] Storage Access Framework(SAF) ์ด๋? (0) 2022.03.13 [Android] Native Application(C/C++), NDK build ๋ฐ CMake ๊ตฌ์ฑ (0) 2022.02.14 [Android] ContentProvider ๊ตฌํ ๋ฐ ์ฌ์ฉ๋ฒ (0) 2022.02.05 [Android] Room ์ดํด ๋ฐ ํ์ฉ (0) 2022.01.01