๋ทฐ ๊ฒฐํฉ View Binding
- findViewById() ๋ฅผ ๋์ฒด ํ๋ฉฐ ๋ณด๋ค ์์ ํ๊ณ ๊ฐ๊ฒฐํ๊ฒ XML ๋ ์ด์์์ ๋ทฐ ์ ๊ทผ ๊ฐ๋ฅ
๋ถํ์ํ ์ฝ๋ ๊ฐ์
- findViewById(), setContentView(R.layout.xxx) ์์ด ๋ฐ๋ก ๋ทฐ์ ์ ๊ทผ ๊ฐ๋ฅ
- ๋ทฐ ๋ฐ์ธ๋ฉ ํด๋์ค์์ ๋ชจ๋ ๋ทฐ๊ฐ ์๋์ผ๋ก ํ๋กํผํฐ๋ก ์์ฑ
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋๋น ๋ฐํ์ ์ฑ๋ฅ ํฅ์
- ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ฒฝ์ฐ XML ๋ด <layout> ํ๊ทธ์ ๋ฐ์ธ๋ฉ ํํ์@{}์ ์ฌ์ฉํ๋ ๋ฐ๋ฉด, ๋ทฐ ๋ฐ์ธ๋ฉ์ ๋จ์ํ ๋ทฐ ๊ฐ์ฒด ์ ๊ทผ์ ์ด์ ์ ๋๊ธฐ ๋๋ฌธ์ ๋น๋ ์๋, ๋ฐํ์ ์ฑ๋ฅ ์ฐ์
Null Safety ๋ณด์ฅ
- ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ฒฝ์ฐ ID ๋ฅผ ์๋ชป์ ์ด๋ ์ปดํ์ผ ์ค๋ฅ ์์ด ๋ฐํ์์์ ๊ทธ๋๋ก NullPointerException ๋ฐ์
- ๋ทฐ ๋ฐ์ธ๋ฉ์ ๊ฒฝ์ฐ XML์ ์ ์๋ ๋ทฐ๋ง ์ ๊ทผ ๊ฐ๋ฅ, ์๋ชป๋ ID๋ NULL ์ ๊ทผ ์์ฒด๊ฐ ๋ถ๊ฐ
- lateinit ํน์ !! ๊ฐ์ ์ธ๋ํ ๊ฑฐ์ ํ์ ์์
๋ชจ๋ ๋ทฐ ํ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅ | |
๊ตฌ์ฑ ์์ | ViewBinding ์ฌ์ฉ |
Activity | ActivityMainBinding |
Fragment | FragmentMainBinding + onCreateView() |
ViewHolder | ItemRowBinding ๋ฑ์ผ๋ก inflate ๊ฐ๋ฅ |
View Binding์ ์ฌ์ฉ ํ๋ ์ด์
์์ ํจ | ์ปดํ์ผ ์์ ์ ์ค๋ฅ ๊ฐ์ง (NullPointer ๋ฐฉ์ง) |
๊ฐ๊ฒฐํจ | ์ฝ๋๋ ๋ํญ ๊ฐ์ (findViewById ์๋ต) |
์ฑ๋ฅ | ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๋ณด๋ค ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ |
์ ์ฐ์ฑ | ์กํฐ๋นํฐ, ํ๋๊ทธ๋จผํธ, ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ๋ฑ ๋ชจ๋ ๊ตฌ์กฐ์ ์ฌ์ฉ ๊ฐ๋ฅ |
โ ViewBinding ํ์ฑํ
- ๐Gradle Scripts -> build.gradle(Moudule:app)
android {
...
buildFeatures {
viewBinding = true
}
}
- ๐ ์ค์ ํ Gradle Sync ( ๐ ์๋จ ๋ฉ๋ด File → Sync Project with Gradle Files )
<!-- MainActivity.kt -->
import com.example.ํ๋ก์ ํธ๋ช
.databinding.ActivityMainBinding
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}//end of onCreate
}//end of class
โ ViewBinding ์ฌ์ฉ ๋ถ๊ฐ ์ ํด๊ฒฐ ๋ฐฉ์
์์ธ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
ViewBinding ๋นํ์ฑํ | build.gradle(:app) → viewBinding true |
XML ์ด๋ฆ ๋ถ์ผ์น | ActivityMainBinding์ ๋ค์๊ณผ ๊ฐ์ ํ์ผ ์ด๋ฆ์์ ์๋ ์์ฑ res/layout/activity_main.xml → ActivityMainBinding activity_main.xml ํ์์ธ์ง ํ์ธ |
๋น๋ ๋ฌธ์ | Clean/Rebuild, IDE ์ฌ์์ |
import ๋ฌธ์ | ์๋์ผ๋ก ActivityMainBinding import |
โ inflate(layoutInflater)
- xml ๋ ์ด์์ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ View ๊ฐ์ฒด๋ก ๋ณํํ๋ ๋ฉ์๋
- binding = ActivityMainBinding.inflate(layoutInflater)
- main.xml ํ์ผ์ ๋ทฐ ๋ฐ์ธ๋ฉ์ด ์๋ ์์ฑํ ActivityMainBinding ํด๋์ค์์ layoutInflater๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค ๊ฐ์ฒด๋ก ๋ณํ
- binding๋ฅผ ํตํด ๊ฐ ๋ทฐ์ ์ ๊ทผ
- setContentView( binding.root ) : ๋ฃจํธ ๋ ์ด์์์ ์กํฐ๋นํฐ ํ๋ฉด์ ํ์
'๐๐ฏ๐ฅ๐ณ๐ฐ๐ช๐ฅ๐๐ต๐ถ๐ฅ๐ช๐ฐ-๐๐ฐ๐ต๐ญ๐ช๐ฏ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์กํฐ๋นํฐ ์๋ช ์ฃผ๊ธฐ (0) | 2025.06.07 |
---|