EditText는 사용자 인터페이스에서 텍스트를 입력하고 편집하기 위해 설계된 기본 Android 구성 요소입니다. TextView를 상속하며 가상 또는 물리적 키보드를 통해 문자 입력을 지원합니다. EditText는 한 줄 및 여러 줄 텍스트, 비밀번호, 숫자, 이메일 주소 및 전화번호 등 다양한 모드를 지원합니다. Android Developers (2026)에 따르면, EditText는 90% 이상의 Android 앱에서 폼, 검색 필드, 채팅 및 데이터 입력 화면을 만드는 데 사용됩니다.
핵심 사항
EditText는 android.widget 패키지의 클래스로, 사용자 데이터 입력을 위한 대화형 텍스트 필드를 구현합니다. Android 상속 계층 구조에서 EditText는 TextView를 확장하므로 글꼴, 색상 및 정렬 관리를 포함한 텍스트 레이블의 모든 속성을 상속합니다. EditText와 TextView의 주요 차이점은 콘텐츠 편집 기능입니다 — 사용자는 인터페이스에서 직접 텍스트를 입력, 삭제 및 수정할 수 있습니다.
각 EditText는 입력된 텍스트를 저장하고 삽입, 삭제 및 바꾸기 작업을 지원하는 Editable 인스턴스와 연결됩니다. 입력 시 EditText는 자동으로 커서 위치, 텍스트 선택 및 실행 취소/다시 실행을 위한 변경 기록을 관리합니다. Android Developers Guide (2026)에 따르면, EditText는 EditText를 상속하는 AutoCompleteTextView 클래스를 통해 자동 완성도 지원합니다.
EditText의 아키텍처는 모델(Editable), 뷰(TextView) 및 컨트롤러(InputConnection)의 분리를 기반으로 합니다. 포커스를 얻으면 EditText는 InputConnection을 생성하고, 이를 통해 입력 시스템이 문자, 키 누름 및 편집 명령을 전달합니다. 이 메커니즘은 가상 키보드에서 물리적 Bluetooth 키보드 및 음성 입력에 이르기까지 모든 입력 방식과의 호환성을 보장합니다.
val editText = EditText(context).apply {
hint = "텍스트 입력"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText는 동작과 모양을 미세 조정하기 위한 수십 개의 속성을 제공합니다. 이러한 속성은 XML 레이아웃과 Kotlin 또는 Java를 통한 프로그래밍 방식 모두에서 설정할 수 있습니다. 속성은 텍스트 제어, 제약 조건, 시각적 스타일링 및 키보드 상호 작용의 범주로 나뉩니다.
| 속성 | 설명 | 예시 값 |
|---|---|---|
| android:hint | 빈 필드에 표시되는 힌트 텍스트 | "이메일 입력" |
| android:inputType | 입력 모드(텍스트, 숫자, 비밀번호 등) | textEmailAddress |
| android:maxLines | 최대 줄 수 | 3 |
| android:maxLength | 문자 단위 최대 텍스트 길이 | 100 |
| android:textColorHint | 힌트 텍스트 색상 | #999999 |
android:hint 속성은 가장 중요한 속성 중 하나입니다 — 필드에 어떤 데이터가 필요한지 사용자에게 알려줍니다. 텍스트가 입력되면 힌트가 자동으로 숨겨집니다. 힌트는 폼 제출에 참여하지 않으며 필드 값으로 저장되지 않습니다. Material Design은 보다 현대적인 외관을 위해 일반 힌트 대신 플로팅 레이블이 있는 TextInputLayout을 사용할 것을 권장합니다.
<!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />
inputType 속성은 사용자에게 표시될 키보드 유형과 입력에 허용되는 문자를 결정합니다. 입력 클래스(TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE)가 수정자와 결합되는 비트 마스크입니다.
각 입력 모드는 키보드 레이아웃을 변경할 뿐만 아니라 텍스트 처리에도 영향을 줍니다. 숫자 모드에서는 숫자와 소수 구분 기호만 허용되고, 이메일 모드에서는 @ 기호와 도메인 확장자를 사용할 수 있으며, 전화 모드에서는 숫자와 +, #, * 기호가 표시됩니다. 올바른 inputType 선택은 사용자 경험에 큰 영향을 미칩니다 — 부적절한 키보드는 사용자가 모드를 전환하도록 강제하여 폼 작성 시간을 30~50% 증가시킵니다.
Material Design Guidelines (2025)에 따르면 각 필드에 가장 구체적인 inputType을 사용하는 것이 좋습니다: 비밀번호에는 textPassword, 가격에는 numberDecimal, 전화번호에는 phone, 여러 줄 입력에는 textMultiLine. 이렇게 하면 폼 작성 속도가 빨라지고 입력 오류가 줄어듭니다.
// 프로그래밍 방식 inputType 설정
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher는 EditText에서 텍스트 변경을 실시간으로 추적하기 위한 인터페이스입니다. 세 가지 메서드가 포함되어 있습니다. beforeTextChanged는 변경 전에 호출되고, onTextChanged는 변경 중에 호출되고, afterTextChanged는 텍스트 변경 완료 후에 호출됩니다. TextWatcher는 입력 검증, 문자 수 계산, 검색 및 자동 완성에 사용됩니다.
OnEditorActionListener는 키보드에서 사용자 작업을 처리합니다: Done(IME_ACTION_DONE), Search(IME_ACTION_SEARCH), Send(IME_ACTION_SEND), Next(IME_ACTION_NEXT) 등을 누릅니다. 이 리스너는 폼 탐색을 구성하는 데 특히 유용합니다 — Next를 누르면 자동으로 다음 필드로 포커스가 이동하고, Done을 누르면 키보드가 숨겨지고 제출이 수행됩니다.
Android Developers Blog (2025)에 따르면, android:imeOptions 속성과 함께 OnEditorActionListener를 적절히 사용하면 추가 제출 버튼 없이 직관적인 폼을 만들 수 있습니다 — 사용자가 필드를 작성하고 키보드에서 Done을 누르면 저장이나 검색이 트리거됩니다.
// 이메일 검증용 TextWatcher
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
editText.error = if (isValid) null else "Invalid email format"
}
})
// 폼 제출용 OnEditorActionListener
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
이메일 및 비밀번호 입력을 위해 EditText를 사용하여 로그인 화면을 만드는 완전한 예제를 살펴보겠습니다. 이 예제는 inputType 구성, TextWatcher를 통한 검증 및 로그인 버튼 누름 처리를 보여줍니다.
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />
@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />
class LoginFragment : Fragment() {
private lateinit var etEmail: EditText
private lateinit var etPassword: EditText
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
etEmail = view.findViewById(R.id.etLoginEmail)
etPassword = view.findViewById(R.id.etLoginPassword)
etEmail.addTextChangedListener(emailWatcher)
etPassword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
performLogin()
true
} else false
}
}
}
EditText는 XML 속성, 테마 및 스타일을 통한 사용자 지정을 지원합니다. 텍스트 색상, 힌트 색상, 밑줄 색상(backgroundTint), 글꼴 스타일, 텍스트 크기 등을 변경할 수 있습니다. Material Components는 boxStrokeColor, boxBackgroundColor 및 endIconMode를 포함한 사용자 지정 속성이 있는 MaterialComponents.EditText 테마를 제공합니다.
EditText의 밑줄 색상을 변경하려면 android:backgroundTint 속성을 사용합니다. 이 속성은 기본 상태와 포커스 상태의 색상을 설정합니다. Material Design에서 밑줄 색상은 테마의 colorPrimary를 통해 관리됩니다. 완전한 사용자 지정을 위해 res/drawable 폴더에 배경용 사용자 지정 drawable을 만들 수 있습니다.
| 스타일 | 속성 | 결과 |
|---|---|---|
| 텍스트 색상 | android:textColor | 입력된 텍스트 색상 변경 |
| 힌트 색상 | android:textColorHint | 힌트 텍스트 색상 변경 |
| 밑줄 | android:backgroundTint | 필드 아래 선 색상 변경 |
| 글꼴 크기 | android:textSize | sp 단위로 텍스트 크기 설정 |
| 글꼴 | android:fontFamily | 사용자 지정 글꼴 적용 |
앱의 모든 EditText 필드에 일관된 스타일을 만들려면 테마에 전역 스타일을 정의하는 것이 좋습니다. Material Design은 TextInputLayout을 사용하는 모든 입력 필드에 자동으로 적용되는 Widget.MaterialComponents.TextInputLayout.OutlinedBox 스타일을 제공합니다. 이렇게 하면 각 레이아웃에서 속성을 중복하지 않고 일관된 외관을 보장합니다.
자주 묻는 질문
EditText는 TextView를 상속하며 텍스트 편집 기능을 추가합니다. TextView는 텍스트만 표시하는 반면, EditText는 사용자가 콘텐츠를 입력, 삭제 및 수정할 수 있게 합니다. EditText는 또한 inputType, TextWatcher, 커서 관리 및 기타 데이터 입력 관련 기능을 지원합니다.
InputFilter를 사용하세요 — 입력 문자를 필터링하기 위한 인터페이스입니다. EditText는 setFilters() 메서드를 통해 필터 배열 설정을 지원합니다. 예를 들어, InputFilter.LengthFilter는 텍스트 길이를 제한하고, 사용자 지정 InputFilter는 특정 문자, 정규식 또는 유니코드 범위를 제한할 수 있습니다.
Kotlin에서는 editText.text.toString()을, Java에서는 editText.getText().toString()을 호출하세요. text 속성은 Editable을 반환하며, toString()을 통해 String으로 변환됩니다. 특히 필수 필드가 있는 폼에서는 텍스트를 사용하기 전에 항상 null 및 빈 값을 확인하세요.
android:inputType="textMultiLine" 속성을 설정하거나 프로그래밍 방식으로 InputType.TYPE_TEXT_FLAG_MULTI_LINE 플래그를 추가하세요. 여러 줄 모드에서 EditText는 Enter로 줄 바꿈을 허용하고 높이가 자동으로 확장됩니다. 높이를 제한하려면 android:maxLines 또는 android:minLines를 사용하세요.
android:enabled="false" 속성을 설정하거나 코드에서 editText.isEnabled = false를 호출하세요. 비활성화된 EditText는 터치에 반응하지 않고, 포커스를 받을 수 없으며 회색으로 표시됩니다(비활성 상태). 대안으로 android:focusable="false"를 사용하면 입력은 비활성화되지만 일반 모양은 유지됩니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.