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. 실무에서 자주 하는 실수와 주의점
- NullPointerException 주의
findViewById로 가져온 뷰가 null일 가능성이 있을 경우, 앱이 크래시 날 수 있습니다. → View Binding으로 해결 가능. - 스레드 접근 제한
UI 변경은 항상 메인 스레드에서만 가능합니다. 백그라운드 스레드에서 TextView에 접근하면 오류가 납니다.runOnUiThread { myTextView.text = "UI 안전하게 변경" } - 리소스 문자열 활용하기
하드코딩된 문자열 대신strings.xml을 사용하는 것이 국제화(i18n)와 유지보수에 유리합니다.myTextView.text = getString(R.string.hello_message)
마무리 — TextView도 ‘스마트하게’ 다루자
단순히 텍스트를 보여주는 UI 컴포넌트라도, 코틀린의 장점을 살리면 코드 품질이 달라집니다.findViewById 대신 View Binding을, setText() 대신 text 속성을 사용하세요.
그 한 줄의 차이가 앱의 안정성과 가독성을 크게 높여줍니다.
답글 남기기