ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] findViewById ์›๋ฆฌ
    Android 2022. 3. 13. 14:45
    ๋ฐ˜์‘ํ˜•

    findViewById ๋ž€?

      ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์—์„œ findViewById ๋ฉ”์†Œ๋“œ๋Š” ๋ ˆ์ด์•„์›ƒ์— ์žˆ๋Š” ๋ทฐ๋ฅผ ๋ฆฌ์†Œ์Šค id๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ๋ทฐ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ „์— setContentView์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋กœ xml์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ์ง€์ •ํ•œ ์†์„ฑ์— ๋งž๊ฒŒ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. findViewById๋กœ ๋ทฐ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋ฉด ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋งŽ์ด ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๊ณ , ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ๋„ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค์ด ๋‚˜ํƒ€๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ฒด ๋ฐฉ๋ฒ•๋งŒ ์ตํ˜€๋„ ์ข‹์ง€๋งŒ findViewById๊ฐ€ ์–ด๋– ํ•œ ์ด์œ ๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ์•ˆ ์ข‹์€์ง€ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ๋„ ์œ ์ตํ•˜๊ธฐ์— ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

     

    Window.findViewById

      Activitiy์—์„œ findViewById๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ Window ํด๋ž˜์Šค์˜ findViewById๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ getDecorView์˜ findViewById๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

     

    VIew.findViewById

      DecorView๋„ View์ด๊ธฐ์— View ํด๋ž˜์Šค์˜ findViewById๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๊ณ  findViewTraversal์— ์ฐพ๊ณ ์žํ•˜๋Š” ๋ฆฌ์†Œ์Šค id๋ฅผ ๋Œ€์ž…ํ•˜์—ฌ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

     

    ViewGroup.findViewTraversal
    View.findViewTraversal

      ์‚ฌ์‹ค์ƒ DecorView๋Š” setContentView์—์„œ ์„ค์ •ํ•œ ๋ ˆ์ด์•„์›ƒ์˜ ๋ฃจํŠธ ๋ทฐ์ด๊ธฐ์— ViewGroup์— ํ•ด๋‹น๋˜์–ด ViewGroup์˜ findViewTraversal ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ๊ฐ€ findViewById์˜ ์›๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋˜๋Š”๋ฐ, mChildren ์ฆ‰ ์ž์‹ ๋ทฐ๋“ค์„ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•˜์—ฌ id๊ฐ€ ๊ฐ™์€ ๋ทฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋„๋ก ๋กœ์ง์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์ผ mChildren ๋‚ด์— View๊ฐ€ ์•„๋‹Œ ๋˜ ํ•˜๋‚˜์˜ ViewGroup์ด ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ViewGroup์˜ findViewById๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  findViewTraversal๊นŒ์ง€ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ mChildren ๋ทฐ๋“ค์„ ํ•˜๋‚˜์”ฉ ๊นŠ์ด ํƒ์ƒ‰ ํ›„ ํ•˜๋‚˜์”ฉ id๋ฅผ ๋น„๊ตํ•˜๋Š” ๋กœ์ง์œผ๋กœ ํŠธ๋ฆฌ๊ตฌ์กฐ์˜ ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰(DFS)์™€ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ด๋ฆ„๋„ Traversal(์ˆœํšŒ)๋ผ๊ณ  ์ž‘์„ฑ๋œ ์ด์œ ๋„ ์ž˜ ๋ฐ˜์˜๋œ ๊ฑธ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๐Ÿ˜€

     

    ๊ฒฐ๋ก 

      findViewById๋Š” ๋ฃจํŠธ ๋ทฐ์—์„œ ํŠธ๋ฆฌ์ˆœํšŒ๋ฅผ ๊ฑฐ์ณ์„œ ํƒ์ƒ‰์„ ํ•˜๊ธฐ์— ๋ณต์žกํ•œ ๋ทฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ์ž์‹ ๋ทฐ๋“ค์ด ๋งŽ๊ณ  ๋ณต์žกํ•  ์ˆ˜๋ก ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋œ๋‹ค๋Š” ์ ์„ ์ธ์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    ๋ฐ˜์‘ํ˜•
Designed by Tistory.