코틀린 안드로이드 TextView 설정

1. 기본 구조 이해하기 — TextView는 어디서 정의될까

TextView는 대부분 XML 레이아웃 파일에 먼저 정의됩니다.
다음은 가장 기본적인 형태의 TextView 예시입니다.

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello Kotlin!"
    android:textSize="18sp"
    android:textColor="@android:color/black"
/>

이렇게 XML에서 정의하면, @+id/myTextView를 통해 코틀린 코드에서 접근할 수 있습니다.


2. 코틀린 코드에서 텍스트 설정하기

XML에서 정의한 TextView를 코드로 가져와 텍스트를 변경하려면, findViewById 또는 View Binding을 사용합니다.

findViewById를 사용하는 전통적인 방법

val myTextView = findViewById<TextView>(R.id.myTextView)
myTextView.text = "새로운 텍스트입니다!"
  • findViewById뷰 ID를 직접 참조하여 가져오는 기본적인 방법입니다.
  • 하지만 프로젝트가 커질수록 NullPointerException이나 타입 캐스팅 오류가 발생할 수 있습니다.

3. 더 안전한 방법 — View Binding 활용하기

최근 안드로이드에서는 findViewById보다 View Binding을 권장합니다.
View Binding은 레이아웃 파일과 코드 간 연결을 타입 안전하게 처리해줍니다.

예를 들어, 레이아웃 파일이 activity_main.xml이라면 자동으로 ActivityMainBinding 클래스가 생성됩니다.

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // TextView에 텍스트 설정
        binding.myTextView.text = "View Binding으로 설정된 텍스트!"
    }
}

장점

  • Null 안전성 보장 (NullPointerException 방지)
  • 코드 자동 완성 지원
  • 뷰 ID 오타 방지

4. setText()와 text 속성의 차이

자바에서는 주로 setText("문자열") 메서드를 사용했지만,
Kotlin에서는 text 프로퍼티 접근이 더 자연스럽습니다.

// Java 스타일
myTextView.setText("안녕하세요")

// Kotlin 스타일
myTextView.text = "안녕하세요"

두 방법 모두 결과는 동일하지만, Kotlin에서는 프로퍼티 방식이 더 간결하고 가독성이 좋습니다.


5. 동적으로 TextView 생성하기

경우에 따라 XML이 아닌 코드에서 직접 TextView를 만들어야 할 때도 있습니다.

val textView = TextView(this).apply {
    text = "코드로 생성된 TextView"
    textSize = 20f
    setTextColor(Color.BLUE)
}

필요하다면 레이아웃에 추가할 수도 있습니다.

val layout = findViewById<LinearLayout>(R.id.container)
layout.addView(textView)

이 방식은 런타임 UI 구성이나 커스텀 뷰 동적 생성에 자주 사용됩니다.


6. 실무에서 자주 하는 실수와 주의점

  1. NullPointerException 주의
    findViewById로 가져온 뷰가 null일 가능성이 있을 경우, 앱이 크래시 날 수 있습니다. → View Binding으로 해결 가능.
  2. 스레드 접근 제한
    UI 변경은 항상 메인 스레드에서만 가능합니다. 백그라운드 스레드에서 TextView에 접근하면 오류가 납니다. runOnUiThread { myTextView.text = "UI 안전하게 변경" }
  3. 리소스 문자열 활용하기
    하드코딩된 문자열 대신 strings.xml을 사용하는 것이 국제화(i18n)와 유지보수에 유리합니다. myTextView.text = getString(R.string.hello_message)

마무리 — TextView도 ‘스마트하게’ 다루자

단순히 텍스트를 보여주는 UI 컴포넌트라도, 코틀린의 장점을 살리면 코드 품질이 달라집니다.
findViewById 대신 View Binding을, setText() 대신 text 속성을 사용하세요.
그 한 줄의 차이가 앱의 안정성과 가독성을 크게 높여줍니다.


게시됨

카테고리

작성자

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다