Android 의 activity
는 application
의 entry point
로 기본적으로 하나의 activity class
와 xml
file 이 동시에 존재해야 실제 기기에 화면을 띄울 수 있다는 사실은 개발자라면 알고 있는 상식이다. 하지만 activity
외에도 우리는 fragment
나 custom view
와 같이 동적으로 화면을 변환시키기 위해서는 inflate
라는 method
를 잘 사용해야 한다. view
를 inflate
한다는 것이 무엇을 의미하며, 어떻게 응용할 수 있는지 함께 살펴보자.
inflate
는 implicitly inflate
와 explicitly inflate
라는 두 가지 방법이 존재한다. implicitly inflate
에 대해 먼저 살펴보면 activity class
의 onCreate
callback 함수에 setOnContentView
라는 함수를 쉽게 찾아볼 수 있고 많이들 봐았을 것이다. 바로 이 함수가 implicitly inflate
이다. 즉, 암시적으로 (OS 가 직접) 개발자가 만들어둔 xml
file 을 inflate
한다는 의미이다. 근데 inflate
가 대체 뭘까? inflate
란 View
를 메모리에 객체화 한다는 뜻으로 xml
file 에 있는 모든 View
들을 메모리로 가져다 놓는다고 생각하면 쉽게 이해할 수 있다. 앞서 언급한 implicit
하게 View
를 inflate
한다는 것은 개발자가 따로 View
들을 메모리에 가져다 놓을 필요 없이 OS 가 직접 수행한다는 것이고, activity
의 경우 application 의 시작점이므로 어느 상황에서든 inflate
가 되어야 하기 때문에 OS 에서 관리하는 것 같다.
그렇다면 이제 우리는 explicit
하게 View
를 inflate
하는 방법에 대해 알아보자. View
를 inflate
하기 위해 필요한 준비물들이 몇 가지 있다. 바로 LayoutInflater
를 생성해야 한다. LayoutInflater
를 생성하는 방법은 다양하게 존재한다.
context
에서 LayoutInflater
가져오기val inflater: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
activity
에서 LayoutInflater
가져오기val inflater: LayoutInflater = getLayoutInflater()
LayoutInflater.from()
val inflater: LayoutInflater = LayoutInflater.from(context)
LayoutInflater
를 가져오는 여러 방법에 대해 살펴보았고 이제 가져온LayoutInflater
로 View
를 inflate
하는 방법에 대해 살펴보자.
inflate(resource: Int, root: ViewGroup?, attachToRoot: Boolean)
위의 코드는 fragment
에서 종종 볼 수 있는데, resource
는 xml
file 을 의미하고, root
는 생성될 View
의 parent
를 의미한다. attachToRoot
는 root
아래에 바로 추가를 할 것인지를 판단하는 flag
값이다. return
값은 attachToRoot
값에 따라 달라지는데 true
일 경우 root
가 반환되고, false
일 경우 가장 최상위 View
가 반환된다는데 필자는 최상위 View
를 반환한다는 의미가 잘 와닿지 않아서 좀 더 알아볼 필요가 있다고 생각한다.
LayoutInflater
를 가져와서 inflate
함수를 실행하는 것 외에도 특히 Custom View Class
를 생성해 View
들을 inflate
해야할 때 View
class 에서는 유용한 inflate
함수를 제공해준다.
View.inflate(context, R.layout.my_layout, parent)
위의 코드는 앞서 언급했듯이 LayoutInflater
를 가져와서 inflate
함수를 실행하는 과정을 한번에 할 수 있도록 구현된 코드로 parent
값이 null
이 아니면 자동으로 attach
된다는데 필자의 경우 attach
에 대한 개념이 잘 잡히지 않는다고 생각해 우선은 View
class 에서 쉽게 View
를 inflate
할 수 있는 방법이 있다는 정도만 알고 있어도 좋다고 생각한다.
inflate
가 무엇인지, 어떻게 실행하는 지에 대해서 알아보는 시간을 가졌다. 해당 method
의 속성 또한 잘 활용해야 하기 때문에 속성에 대해서는 추가적으로 포스팅할 계획이 있다. 이렇게 우리가 알아본 inflate
는 동기식 방식으로 비동기식 방식으로도 View
를 inflate
할 수 있어서 공부해야 할 것들이 참 많다고 생각한다.
오늘은 View
를 inflate
하는 방법에 대해서 알게되었으니 오늘도 필자는 성장했다.