๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘ฉ‍๐Ÿ’ป TECH

[TECH] Android ViewBinding์ด๋ž€?

by yuujoeng 2023. 7. 13.

[ํ‹ฐ๋Œ] ํ‹ฐ๋Œ ์„œ๋น„์Šค์— ์ ์šฉ๋œ Android View Binding ์ด์•ผ๊ธฐ
 
์•ˆ๋…•ํ•˜์„ธ์š” ํ‹ฐํ”Œ์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ๊น€์œ ์ •์ž…๋‹ˆ๋‹ค :D
์˜ค๋Š˜์€ ํ‹ฐํ”Œ ์žฌ์‹œ์ž‘๋ถ€ํ„ฐ ํ‹ฐํ”Œ ์„œ๋น„์Šค์— ์‚ฌ์šฉ๋œ Android View Binding ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
 


๐Ÿ‘ฉ‍๐Ÿ’ปView Binding์ด๋ž€?

 
View Binding์ด๋ž€ Kotlin ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ทฐ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
View Binding์„ ํ—ˆ์šฉํ•˜๋ฉด ๊ฐ ๋ ˆ์ด์•„์›ƒ ๋งˆ๋‹ค ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , 
๋ ˆ์ด์•„์›ƒ ID๊ฐ€ ์žˆ๋Š” ๋ทฐ์—์„œ ์ด๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜์—ฌ findViewById๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๋ฉฐ ํŠน์ง•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Null Safe : ๋ทฐ ๋ฐ”์ธ๋”ฉ์€ ๋ทฐ์˜ ์ง์ ‘ ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ทฐ ID๋กœ ์ธํ•ด null ํฌ์ธํ„ฐ ์˜ˆ์™ธ(NPE)๊ฐ€ ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ์—†๋‹ค. 
  • Type safety : ๊ฐ ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค์— ์žˆ๋Š” ํ•„๋“œ์˜ ์œ ํ˜•์ด XML ํŒŒ์ผ์—์„œ ์ฐธ์กฐํ•˜๋Š” ๋ทฐ์™€ ์ผ์น˜ํ•œ๋‹ค. ์ฆ‰ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋น ๋ฅธ ์ปดํŒŒ์ผ ์†๋„ : ๋”ฐ๋กœ xml ํŒŒ์ผ์— ํƒœ๊ทธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ณ  ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ๊ฐ€์ง„๋‹ค.

 


๐Ÿ‘ฉ‍๐Ÿ’ป์™œ ์‚ฌ์šฉํ• ๊นŒ?

 
์•ž์„œ View Binding์ด findViewById๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ง์”€๋“œ๋ ธ์Šต๋‹ˆ๋‹ค.
findViewById๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋–ค ๋ถˆํŽธํ•จ์ด ์žˆ๋Š”์ง€ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
ํ™”๋ฉด์ƒ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฒ„ํŠผ์„ ๋ฐฐ์น˜ํ–ˆ์„ ๋•Œ Kotlin ํŒŒ์ผ์—์„œ ์ด์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?
 

Android

 
 findViewById๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒ„ํŠผ์„ ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ๋ฒ„ํŠผ์ด ํด๋ฆญ๋˜์—ˆ์„ ๋•Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 

๊ฐœ๋ฐœ

 
๋ฒ„ํŠผ์ด 1๊ฐœ์ผ ๊ฒฝ์šฐ ํฐ ๋ถˆํŽธํ•จ์„ ๋Š๋ผ์ง€ ์•Š์„ ์žˆ์ง€๋งŒ
์•„๋ž˜์™€ ๊ฐ™์ด ๋ฒ„ํŠผ์ด 3๊ฐœ๋กœ ์ฆ๊ฐ€ํ•  ๊ฒฝ์šฐ ๊ฐ๊ฐ์„ ๋ชจ๋‘ findViewById๋กœ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ์ œ์ž‘ํ•˜๋ฉด ํ•˜๋‚˜์˜ View ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์š”์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ธ๋ฐ์š”
View Binding์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ  :)
 

viewBinding

 


๐Ÿ‘ฉ‍๐Ÿ’ป์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

 
์•ž์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ View Binding์„ ์‚ฌ์šฉํ•ด ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
 
1. build.gradle์— View Binding๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 
2. Activity ์ƒ์— ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

 
3. ์ƒ์„ฑ๋œ Binding ํด๋ž˜์Šค์— ํฌํ•จ๋œ inflate() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด Binding ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ๋ฃจํŠธ ๋ทฐ๋ฅผ setContentView()์— ์ „๋‹ฌํ•˜์—ฌ ํ™”๋ฉด์ƒ์˜ ํ™œ์„ฑ ๋ทฐ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 
4. ์ด์ œ ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚ฌ์œผ๋‹ˆ Binding์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๊ฐ์ฒด๋ฅผ findViewById๋ฅผ ์‚ฌ์šฉํ•œ ์ •์˜ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 
5. ์• ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด ๋กœ์ง์ด ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค :D !

ํ‹ฐ๋Œ

 


๐Ÿ‘ฉ‍๐Ÿ’ป๋งˆ์น˜๋ฉฐ

 
์˜ค๋žœ ์‹œ๊ฐ„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์–ด์˜ค๋‹ค ๋ณด๋‹ˆ ํ‹ฐ๋Œ์˜ ์†Œ์Šค ์ฝ”๋“œ์—๋„ ๋‹ค์–‘ํ•œ ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ์š”.
๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ ์šฉ ํ›„ ๊ฐ€์žฅ ๋งŽ์ด ํ™œ์šฉ๋˜๊ณ  ์žˆ๋Š” Binding์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•  ์ˆ˜ ์žˆ์–ด ์ฆ๊ฑฐ์šด ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.
 
๋‹ค์Œ์—” ๊ฐ€์žฅ ์˜ค๋žœ ์‹œ๊ฐ„ ๊ณ ๋ฏผํ–ˆ๋˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์†Œ๊ฐœํ•˜๋Š” ํฌ์ŠคํŠธ์™€ ํ•จ๊ป˜ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :) !



๐Ÿ“ฉ Contact : yuu-jeong@naver.com
๐Ÿ“ฒ SNS : https://instagram.com/yu.eek