안드로이드 어플 만들기 기초 android LayoutInflater 개념 정리
안드로이드 어플 만들기 기초 android LayoutInflater
android 앱 만들기 과정에서 사용되는 View나 위젯들은 액티비티와 함께 화면을 구성하는 레이아웃 xml 파일에서 태그로 감싸져서 만들어지는데 이것들이 실제로 화면에 보이고 작동하기 위해서는 메모리에 올라가서 객체가 되어야 한다. 그리고 이렇게 xml 파일의 내용을 메모리에 올려서 객체로 만드는 역할을 하는 게 LayoutInflater이며 그 과정을 '레이아웃 인플레이션'이라고 한다.
그리고 프로젝트를 생성하는 과정에서 만들어지는 레이아웃 파일인 activity_main.xml의 요소는 앱이 실행되면서 MainActivity.java의 onCreate() 안에 있는 setContentView()에 의해서 내부적으로 인플레이션이 된다. 즉, setContentView()가 실행된 후에는 자동으로 객체가 완성되기 때문에 객체들을 자유롭게 호출할 수 있지만 setContentView() 메서드 시행전에 객체를 호출하면 앱이 실행되지 않게 되는데 이번 글에서는 그 과정을 확인하는 예제를 하나 만들어보고 LayoutInflater의 개념을 잡아보려고 한다.
예제는 activity_main.xml에 버튼을 하나 배치한 후 자바 파일에서 setContentView()가 실행되기 전에... 즉 객체가 되지 않은 상태에서 그 버튼을 찾아서 사용해보려고 하면 에러가 발생하는 과정을 확인해보려는 것이다.
프로젝트를 생성한 후 activity_main.xml에 ID가 button인 버튼을 하나 배치했다.
먼저 정상적으로 객체가 만들어지고 그걸 사용해서 앱이 실행되는 걸 확인하기 위해서 다음과 같은 코드를 작성해봤는데 앱이 실행되면서 내부적으로 레이아웃을 인플레이션 하는 setContentView() 메소드 실행 이후에 Button 객체를 ID로 찾아서 사용하고 있다.
당연히 특이사항 없이 정상적으로 작동하는 걸 확인할 수 있다. 그렇다면 인플레이션이 되기 전.... 즉 setContentView()가 호출되기 전에 객체를 사용하려고 하면 어떤 문제가 발생할까? 이를 확인하기 위해서 다음과 같이 소스 코드를 변경해봤다.
setContentView() 호출전에 Button 객체를 찾아서 setText() 메소드를 사용하고 있다. 객체 생성 전이기 때문에 당연히 앱 실행이 안 될 것이라고 예상하면서 실행을 시켜본다.
역시 예상했던 결과가 나타난다. 이렇게 확인할 수 있듯이 레이아웃에 배치된 요소들이 앱에서 제 역할을 하기 위해서는 메모리에 올라가서 객체가 되어야 하는데 이를 레이아웃 인플레이션이라고 하며.... 프로젝트 생성과정에서 만들어진 기본 레이아웃인 activity_main.xml은 자바 파일의 setContentView()가 실행된 후에야 비로소 그 안에 있는 요소들이 자동으로 객체가 되는 걸 확인해봤다.
그렇다면 'activity_main.xml이 아닌 다른 레이아웃에 배치된 요소들은 어떻게 인플레이션을 해서 객체를 만들어야 할까?'라는 의문이 생기게 되는데 그 역할을 해주는 녀석이 바로 LayoutInflater이다. 이렇게 LayoutInflater의 개념을 잡아봤는데 이번 글은 여기까지 해서 마무리한 후 다음 글에서 LayoutInflater를 사용해 인플레이션 하는 예제를 만들면서 다시 한 번 정리를 해보자.