본문 바로가기
~2024.10

[Android] findViewByID 메소드란?(feat. View Binding)

by HJfan 2024. 2. 27.

01. 초급자를 위한 설명

안드로이드에서 UI 컴포넌트(버튼, 텍스트뷰 등)를 자바 코드 내에서 참조하기 위해 사용되는 메소드이다.

findViewByID(R.id.아이디); 형태로 사용하며, 해당 "아이디"를 가진 UI 컴포넌트의 실제 인스턴스에 접근할 수 있다.

이렇게 찾은 View는 변수에 저장되어, 코드 내에서 다양한 작업(이벤트 리스너 추가 등)에 사용될 수 있다.

아이디는 XML 코드에서 자신이 설정한 값에 따라 유동적으로 입력하면 된다.

 


02. 중급자를 위한 설명

findViewByID 메소드는 "View" 클래스의 인스턴스를 반환한다.

따라서 특정 타입의 뷰(Button, TextView 등)를 찾아서 작업하려면 반환된 "View"를 해당 타입으로 형변환해야 한다.

Button btn = (Button)findBiewByID(R.id.아이디); 형태로 사용한다.

 


03. 고급 및 심화 설명

findViewByID는 호출될 때마다 "뷰 트리"를 탐색하여 요청 ID를 가진 "View"를 찾는다.

이는 비용이 많이 드는 연산일 수 있기 때문에, 복잡한 레이아웃에서는 성능에 영향을 주기도 한다.

이를 최적화하기 위해, 뷰 참조는 가능한 한 초기화 시점에 한 번만 수행하고, 필요할 때 재사용하는 것이 좋다.

Android Studio 3.6 이상부터는 findViewByID 대신 "View Binding"을 사용하는 것이 권장된다.

"View Binding"을 사용하면 별도의 타입 캐스팅 없이 직접적으로 "View"에 접근할 수 있고, null 안정성과 타입

안정성이 보장된다. 예를 들어, XML 파일에서 "my_btn"이라는 ID로 버튼을 정의했다면, "binding.myButton"으로

바로 접근할 수 있다.

 

View Binding 사용을 위한 절차

//build.gradle 파일
//Android 3.6 ~
android {
    ...
    viewBinding {
        enabled = true
    }
}

    // Android 4.0 ~
    buildFeatures{
    	viewBinding = true
    }
}

 

//xml 레이아웃

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ... >

    <Button
        android:id="@+id/exampleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Me!" />

</LinearLayout>

 

//JAVA 파일

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.example.myapplication.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // View Binding 초기화
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // 버튼에 클릭 리스너 설정
        binding.exampleButton.setOnClickListener(v -> {
            // 버튼 클릭 시 수행할 작업
        });
    }
}

 

 

 

 

※ 초급, 중급, 고급/심화의 단계는 작성자가 임의로 공부를 위해 구분하여 정리한 글일 뿐입니다.

 

※ 본 게시물은 신입 개발자가 실시간으로 공부를 하며 정리한 글이기에 다소 부정확한 표현 혹은 틀린 정보가 존재할 수도 있습니다. 잘못된 부분에 대한 피드백은 언제나 환영합니다.