Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

쨍쨍

[Android Studio] 뷰 바인딩(View Binding) 본문

프로그래밍 코드/Android Studio

[Android Studio] 뷰 바인딩(View Binding)

이선선 2023. 5. 17. 21:24

뷰 바인딩(View Binding)

쉽게 말해 findViewById를 통해 하나하나 뷰를 찾지 않고, 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다.

 

findViewById

findViewById를 사용하면 되는데 굳이 ViewBinding을 사용해야할까? 

뷰 바인딩을 사용하지 않았을 때는 findViewById를 사용해 레이아웃에서 생성한 위젯(버튼, 텍스트 등)을 메인코드에서 하나하나 findViewById()을 사용해 선언해줘야한다.

왼쪽: .xml파일 / 오른쪽: main.java 파일

위 사진에서는 findViewById로 선언해줘도 복잡하지 않은데 findViewById를 써도 되지 않을까? 라고 생각할 수 있지만 지금은 위젯이 3개이기 때문에 findViewById로 선언해줘도 코드가 길어지고 복잡해지지 않는 것이다. 만약, 위젯이 100개라면? 혹은 그 이상이라면? 코드는 더욱 더 길어질 것이다.

 

findViewById()을 사용할 때의 문제점은 크게 3가지이다.

① 코드가 더러워진다. (길어지고 복잡해진다.)

② 없는 id를 사용하면  NULL 오류가 발생한다.

③ 실수로 뷰의 타입을 잘못 적으면 오류가 발생한다.

 

뷰 바인딩(View Binding) 사용방법

 

!)

Gradle Scripts → build.gradle (Module:app)에 들어가서 android {} 코드 안에 아래 코드를 입력한다.

buildFeatures {
    viewBinding = true
}

 

2)

MainActivity.java 코드에 아래 코드를 입력한다.

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        // 뷰 바인딩을 사용하여 activity_main.xml 레이아웃 파일과 액티비티를 연결하는 역할
        setContentView(binding.getRoot());
        // 액티비티의 컨텐트 뷰로 binding 객체의 루트 뷰를 설정
        // 뷰 바인딩을 통해 레이아웃의 모든 View 요소에 접근 가능

        binding.hello.setText("ViewBinding");
        // binding 객체의 hello TextView에 "ViewBinding" 문자열을 설정
        // 뷰 바인딩을 통해 TextView에 직접 접근하여 텍스트를 변경하는 예시
    }

}

 

코드 부가설명

.inflate

inflate() 메서드는 XML 레이아웃 파일을 사용하여 뷰 객체를 생성하는 역할을 한다.

LayoutInflater 클래스의 인스턴스를 사용하여 레이아웃 파일을 파싱하고, 그 결과로 뷰 객체를 생성한다.

주로 해당 레이아웃을 화면에 표시하기 위해 뷰 계층 구조를 구성하는 역할을 한다.

 

LayoutInflater

XML 레이아웃 파일을 실제 뷰 객체로 인스턴스화하는 역할을 한다. XML 레이아웃을 뷰 객체로 인스턴스화하면, 해당 뷰 객체를 프로그래밍적으로 조작하고 화면에 추가할 수 있다. 이를 통해 동적인 UI 생성이 가능하며, 유연하고 다양한 UI 구성이 가능해진다.

 

getLayoutInflater()

LayoutInflater 인스턴스를 반환한다.

주로 액티비티나 컨텍스트에서 XML 레이아웃을 인플레이션하여 동적인 UI 구성에 활용됩니다.

 

setContentView()

현재 액티비티의 컨텐트 뷰를 설정하는 역할을 한다.

setContentView() 메서드를 통해 액티비티의 레이아웃을 지정하고 화면에 그려질 내용을 설정한다.

 

 

 

뷰 바인딩(View Binding)의 xml 객체 이름

레이아웃의 이름에서 언더바(_)를 제거하고, 단어의 앞글자를 대문자로 바꾼다.

activity_main ActivityMainBinding
haha_hoho HahaHohoBinding
a__bc_d ABcDBinding