질문 정리

editText에 setText로 값을 넣어야하는 이유가 뭘까?

five2week 2023. 3. 15. 14:47

 

최근 안드로이드 앱 개발을 하다가 궁금한 것이 생겨서 정리했습니다.

TextView에 String 값을 대입할 때는 binding.textView.text = "String"을 넣고, EditText에 String 값을 대입할 때는 binding.editText.setText("String")의 형식으로 넣고 있었습니다. 평소 너무 당연하게 사용하고 있었지만, 왜 이렇게 다른 방식을 사용하는 지는 모르고 있었습니다.

 

TextView와 같은 방식으로 EditTextView에 대입을 하려고 하면 오류가 발생합니다.

binding.editText.text = "String"

 

binding.editText.text는 Editable 객체이고, "String"은 문자열(String) 타입입니다. 따라서, 두 개의 타입이 서로 다르기 때문에 타입 불일치(type mismatch) 오류가 발생합니다.

binding.editText.setText("String")

위와 같이 작성한다면, setText()로 들어온 문자열이 EditText에 표시됩니다. setText 메서드는 String 타입을 받아서 Editable 객체로 변환하여 EditText에 설정합니다. 따라서 setter가 아닌 형변환을 의미합니다.

 

Editable이란?

Editable은 안드로이드에서 사용되는 텍스트 편집용 인터페이스입니다. Editable은 CharSequence 인터페이스를 상속하며, 추가적인 텍스트 편집을 지원하기 위한 메서드와 속성을 제공합니다. Editable은 EditText와 같은 편집 가능한 위젯에서 사용됩니다. 예를 들어, EditText에서 사용자가 입력한 텍스트를 가져오거나, 새로운 텍스트를 설정하려면 Editable 객체를 사용해야 합니다.

 

Editable 객체는 텍스트를 변경할 수 있는 메서드들을 제공합니다. 예를 들어, append() 메서드를 사용하면 Editable 객체의 끝에 새로운 텍스트를 추가할 수 있습니다. 또한, replace() 메서드를 사용하면 지정한 범위 내의 텍스트를 다른 텍스트로 변경할 수 있습니다. 다음은 Editable 인터페이스에서 제공하는 메서드들의 예시입니다

interface Editable : CharSequence {

    // 문자열의 지정된 위치에 문자를 추가합니다.
    fun insert(where: Int, text: CharSequence): Editable

    // 문자열의 지정된 위치에 문자를 삽입합니다.
    fun replace(start: Int, end: Int, text: CharSequence, startText: Int, endText: Int): Editable

    // 문자열의 끝에 문자열을 추가합니다.
    fun append(text: CharSequence?): Editable

    // 문자열의 지정된 범위의 문자를 삭제합니다.
    fun delete(start: Int, end: Int): Editable

    // 문자열을 모두 삭제합니다.
    fun clear(): Unit

    // 문자열을 Spannable로 변환합니다.
    fun toSpannable(): Spannable
}

Editable 객체는 편집 가능한 텍스트를 다룰 때 매우 유용합니다. 따라서, 안드로이드 애플리케이션에서 텍스트를 다루는 작업을 할 때 자주 사용됩니다.

 

결론

String과 Editable은 타입이 다르기 때문에 setText를 통해서 Editable 객체로 변환하여 넣는다. 따라서 그 변환을 위해서 setText를 사용하며, setter와는 직접적인 연관이 없다.

 

참고링크

https://developer.android.com/reference/android/text/Editable

 

Editable  |  Android Developers

 

developer.android.com

https://developer.android.com/reference/java/lang/CharSequence

 

CharSequence  |  Android Developers

 

developer.android.com

https://developer.android.com/reference/java/lang/String

 

String  |  Android Developers

 

developer.android.com

https://developer.android.com/reference/android/widget/EditText

 

EditText  |  Android Developers

 

developer.android.com