InputType — 개요, 입력 속성 및 Android에서의 구성

저자: IT Sectr 게시일: 2026-07-07 읽는 시간: 9 분

InputType은 텍스트 필드의 입력 데이터 특성과 키보드 동작을 결정하는 Android 속성입니다. InputType 값은 입력 클래스(텍스트, 숫자, 전화, 날짜)와 수정자(여러 줄, 자동 수정, 대문자, 숨김 입력)를 결합하는 비트마스크입니다. InputType은 표시되는 키보드 유형, 입력 문자 필터링 및 자동 채우기 동작에 영향을 줍니다. Android Developers (2026)에 따르면 InputType은 올바른 데이터 입력을 보장하는 가장 중요한 속성 중 하나이며 편집 가능한 모든 텍스트 필드에 명시적으로 설정해야 합니다.

핵심 요점

  • InputType — EditText의 입력 클래스와 수정자를 정의하는 비트마스크.
  • 입력 클래스 — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • 수정자 — 동작을 세부 조정하는 플래그: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • 결합 — 클래스와 수정자는 비트별 OR을 통해 결합되어 정확한 구성 가능.
  • 영향 — 올바른 InputType은 입력을 빠르게 하고, 오류를 줄이며, 폼 UX를 향상.

Android에서 InputType이란

InputType은 텍스트 필드의 입력 모드를 인코딩하는 정수 상수(Int)입니다. Android에서는 android.text.InputType 클래스에 정의되어 있습니다. InputType 값은 입력 클래스(비트 0~4)와 수정자(비트 5~31)의 두 부분으로 구성됩니다. 입력 클래스는 기본 데이터 유형(텍스트, 숫자, 전화, 날짜)을 정의합니다. 수정자는 선택된 클래스 내에서 동작을 세부 조정합니다. 예를 들어 텍스트 클래스의 경우 자동 수정, 대문자 또는 여러 줄 입력을 활성화할 수 있습니다.

InputType 메커니즘은 세 가지 수준에서 작동합니다: Android 프레임워크 수준에서는 어떤 InputConnection이 생성될지(EditText와 IME 간 연결) 결정합니다. IME(키보드) 수준에서는 표시할 문자와 입력 처리 방법을 지정합니다. 애플리케이션 수준에서는 EditText에 내장된 InputFilter를 통해 문자를 필터링합니다. Android Source Code (AOSP, 2026)에 따르면 비트마스크는 현재 값을 반환하는 TextView.getInputType() 메서드와 내부 필터 및 IME 연결을 재구성하는 setInputType()에서 처리됩니다.

InputType의 중요한 특징은 보안상의 이유로 다른 프로세스에서 읽을 수 없다는 것입니다. 이는 입력 유형에 대한 접근(예: 필드가 비밀번호인지 확인)을 통한 데이터 도난을 방지합니다. 다른 애플리케이션에서 InputType을 읽으려고 하면 기본적으로 TYPE_CLASS_TEXT가 반환됩니다.

kotlin
// 기본 InputType 상수
InputType.TYPE_CLASS_TEXT       // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER     // 0x0002 = 2
InputType.TYPE_CLASS_PHONE      // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME   // 0x0004 = 4

// 클래스 추출용 마스크
InputType.TYPE_MASK_CLASS       // 0x0000000F

InputType 클래스: TEXT, NUMBER, PHONE, DATETIME

Android는 네 가지 기본 InputType 클래스를 정의합니다. 각 클래스는 특정 데이터 범주에 해당하며 해당 키보드 유형을 활성화합니다. 클래스는 비트마스크의 비트 0~4에 지정되며 TYPE_MASK_CLASS(0x0F) 마스크를 통해 추출할 수 있습니다.

클래스상수키보드용도
TEXTTYPE_CLASS_TEXT (1)QWERTY 키보드텍스트, 댓글, 설명
NUMBERTYPE_CLASS_NUMBER (2)숫자수량, 가격, 나이
PHONETYPE_CLASS_PHONE (3)전화전화번호
DATETIMETYPE_CLASS_DATETIME (4)날짜/시간날짜, 시간

TYPE_CLASS_DATETIME은 직접 거의 사용되지 않습니다. 날짜 입력에는 일반적으로 텍스트 필드 대신 DatePicker 또는 DatePickerDialog가 사용됩니다. 그러나 일부 시나리오(빠른 수동 날짜 입력)에서는 이 클래스가 유용할 수 있습니다. 전용 키보드가 없으며 일반적으로 숫자 키보드를 표시합니다.

각 입력 클래스는 변형(비트 5~7에 지정된 하위 유형)과 결합될 수 있습니다. 예를 들어 TYPE_TEXT_VARIATION_PASSWORD(비트 5)는 TEXT 클래스에 숨김 입력을 추가합니다. 변형 비트: 0x000000E0(TYPE_MASK_VARIATION 마스크).

InputType 수정자 플래그

수정자 플래그(비트 8~31)는 기본 클래스에 추가 기능을 제공합니다. 키보드 유형을 변경하지는 않지만 입력 동작을 수정합니다. 플래그는 각 클래스에 따라 다릅니다. TEXT 플래그는 NUMBER에서 작동하지 않으며 그 반대도 마찬가지입니다. 아래는 각 클래스의 주요 수정자입니다.

TEXT용 플래그

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — 모든 문자를 대문자로.
  • TYPE_TEXT_FLAG_CAP_WORDS — 각 단어의 첫 글자를 대문자로.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — 문장의 첫 글자를 대문자로(기본값).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — 자동 오타 수정.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — 자동 완성(AutoCompleteTextView용).
  • TYPE_TEXT_FLAG_MULTI_LINE — 여러 줄 입력.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — 제안 비활성화.

NUMBER용 플래그

  • TYPE_NUMBER_FLAG_SIGNED — 음수 허용(빼기 기호).
  • TYPE_NUMBER_FLAG_DECIMAL — 소수점 허용.

Android Developers Documentation (2026)에 따르면 다른 클래스의 플래그는 중복되지 않습니다. NUMBER와 함께 TEXT 플래그를 사용하려고 하면 무시됩니다. 설정된 플래그를 확인하려면 비트별 AND를 사용하세요: (inputType and FLAG) != 0.

InputType 조합: 다양한 시나리오 예제

InputType 클래스와 플래그의 올바른 조합은 사용자 친화적인 폼을 만드는 핵심입니다. 일반적인 시나리오와 해당 InputType 구성을 살펴보겠습니다. 각 시나리오는 특정 데이터 유형에 대한 입력을 최적화하여 폼을 직관적으로 만들고 작성을 빠르게 합니다.

시나리오InputType키보드
이름textCapWordsQWERTY, 각 단어 대문자
이메일textEmailAddressQWERTY(@ 및 . 포함)
비밀번호textPasswordQWERTY, 숨김 입력
전화phone숫자(+, #, * 포함)
가격numberDecimal소수점 포함 숫자
수량number숫자만
댓글textCapSentences|textMultiLineQWERTY, 여러 줄
검색text|textNoSuggestionsQWERTY(제안 없음)
kotlin
// 가격 필드 조합
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// 댓글 필드 조합
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_MULTI_LINE

InputType 프로그래밍 작업

setInputType()을 통해 프로그래밍 방식으로 InputType을 설정하면 이전 값이 덮어써집니다. 마스크의 일부만 변경해야 하는 경우(예: 플래그 추가) 현재 값을 저장하고 수정한 후 다시 적용해야 합니다. setInputType()을 호출할 때마다 EditText의 내부 필터가 재구성됩니다.

setRawInputType() 메서드는 필터와 제안의 재구성을 트리거하지 않는다는 점에서 setInputType과 다릅니다. EditText 상태를 완전히 다시 로드하지 않고 InputType을 일시적으로 변경하는 데 사용됩니다. setInputType()을 호출한 후에는 IME를 다시 시작하여 키보드를 업데이트하는 것이 좋습니다.

모드 전환

kotlin
// 비밀번호와 표시 텍스트 간 전환
fun togglePasswordVisibility(editText: EditText) {
    val currentType = editText.inputType
    val isPassword = (currentType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0

    editText.inputType = if (isPassword) {
        InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
    } else {
        InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_PASSWORD
    }

    // 커서 위치 유지
    val cursorPos = editText.selectionStart
    editText.setSelection(cursorPos)
}

클래스 및 변형 추출

kotlin
// 입력 클래스 가져오기
fun getInputClass(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_CLASS
}

// 입력 변형 가져오기
fun getInputVariation(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_VARIATION
}

// 비밀번호 필드인지 확인
fun isPasswordField(editText: EditText): Boolean {
    return (editText.inputType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}

InputType 선택 모범 사례

올바른 InputType을 선택하는 것은 UX뿐만 아니라 보안과 데이터 정확성에도 중요합니다. 주요 권장 사항은 다음과 같습니다: 모든 EditText에 명시적 InputType을 항상 지정; 가능한 가장 구체적인 입력 클래스 사용; 다른 클래스의 플래그를 혼합하지 않음; 민감한 데이터 필드에는 PASSWORD 변형 사용; 검색 필드에는 imeOptions="actionSearch" 사용.

InputType은 접근성 서비스(Accessibility)의 작동에도 영향을 줍니다. textPassword 유형의 필드는 화면 판독기로부터 추가 보호를 받습니다. 입력된 문자를 소리 내어 읽지 않습니다. textEmailAddress 필드의 경우 화면 판독기는 사용자에게 필드가 이메일용임을 알리고 적절한 제안을 제공합니다.

  • 명시성 — 항상 InputType을 명시적으로 설정하고 기본값(textMultiLine)에 의존하지 않음.
  • 특이성 — 가장 구체적인 유형 사용: 이메일에는 text가 아닌 textEmailAddress.
  • 보안 — 비밀번호, PIN, 카드 데이터에는 PASSWORD 변형 사용.
  • 자동 채우기 — 비밀번호 관리자를 지원하기 위해 InputType을 autofillHints와 결합.
  • 테스트 — 다른 키보드(Gboard, SwiftKey, Samsung Keyboard)에서 동작 테스트.

Material Design Guidelines (2025)에 따르면 InputType은 사용자가 입력하는 데이터 유형과 일치해야 합니다. 잘못된 InputType은 입력 속도를 늦출 뿐만 아니라 오류를 유발할 수 있습니다. 예를 들어 전화번호 필드에 textMultiLine을 남겨두면 키보드에 숫자 키패드가 표시되지 않으며 사용자는 매번 수동으로 레이아웃을 전환해야 합니다.

자주 묻는 질문

InputType과 Keyboard Type의 차이점은 무엇인가요?

InputType은 비트마스크를 통해 입력 데이터 유형을 정의하는 EditText 속성입니다. Keyboard Type은 InputType에 의해 활성화되는 시각적 키보드 유형의 비공식적인 이름입니다. InputType은 키보드 레이아웃뿐만 아니라 문자 필터링, 자동 수정 및 자동 완성에도 영향을 줍니다.

InputType을 기본값으로 재설정하려면 어떻게 하나요?

editText.inputType = InputType.TYPE_CLASS_TEXT를 설정하거나 완전히 재설정하려면 상수 InputType.TYPE_NULL(0x00000000)을 사용하세요. TYPE_NULL의 경우 포커스 시 필드에 키보드가 표시되지 않습니다. 표준 텍스트 입력으로 돌아가려면 플래그 없이 TYPE_CLASS_TEXT를 설정하세요.

사용자 정의 InputType을 만들 수 있나요?

InputType 클래스는 Android 프레임워크의 일부이므로 새 클래스를 만들 수 없습니다. 그러나 기존 클래스와 플래그를 결합하여 원하는 동작을 얻을 수 있습니다. setFilters() 메서드를 통해 EditText에 설정되는 InputFilter를 통해 추가 문자 필터링을 구현하세요.

InputType이 IME(키보드)에 어떤 영향을 미치나요?

InputType은 InputConnection을 통해 입력 시스템에 전달됩니다. IME는 InputType 클래스와 변형을 읽고 해당 키보드 레이아웃을 선택합니다. 예를 들어 TYPE_CLASS_NUMBER와 TYPE_NUMBER_FLAG_DECIMAL을 사용하면 키보드에 소수점이 있는 숫자 키패드가 표시됩니다. 대부분의 최신 키보드는 이러한 권장 사항을 따릅니다.

런타임에 InputType을 확인하려면 어떻게 하나요?

Kotlin에서는 editText.inputType 속성, Java에서는 editText.getInputType()을 사용하세요. 클래스를 추출하려면 마스크를 적용하세요: inputType and InputType.TYPE_MASK_CLASS. 특정 플래그를 확인하려면: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — 결과가 0이 아니면 플래그가 설정된 것입니다.

요약

  • InputType — 입력 클래스(TEXT, NUMBER, PHONE, DATETIME)와 수정자로 구성된 비트마스크.
  • 입력 클래스는 기본 데이터 유형과 표시되는 키보드 유형을 정의.
  • 수정자는 동작을 세부 조정: 여러 줄, 자동 수정, 대문자, 숨김 입력.
  • 비트별 OR을 통한 결합으로 다양한 시나리오에 정확한 구성 가능.
  • PASSWORD 변형은 자동 수정을 비활성화하고 문자를 숨기며 사전 저장을 방지.
  • 프로그래밍 방식 설정 setInputType()은 키보드 업데이트를 위해 IME 재시작 필요.
  • 모범 사례 — InputType을 명시적으로 설정하고, 구체적인 유형을 사용하고, 다른 키보드에서 테스트.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기