자동 수정은 텍스트 입력 시 철자 오류를 자동으로 수정하는 iOS의 내장 메커니즘입니다. UIKit은 UITextInputTraits 프로토콜의 autocorrectionType 속성을 통해 자동 수정 동작을 관리하며, 기본, 활성화, 비활성화의 세 가지 모드를 지원합니다. Apple Text Programming Guide(2025)에 따르면 자동 수정은 시스템 사전과 기기 내 머신 러닝을 기반으로 입력 텍스트를 분석합니다. 각 텍스트 필드에 개별적으로 autocorrectionType을 사용하세요. 이를 통해 입력 데이터의 특성에 맞게 동작을 조정할 수 있습니다.
핵심 사항
자동 수정은 철자 오류가 감지되었을 때 입력된 단어를 자동으로 올바른 것으로 추정되는 대안으로 교체하는 iOS 운영 체제의 기능입니다. 이 메커니즘은 UIKit 텍스트 필드 수준에서 작동하며 표준 UITextField 및 UITextView 입력 요소를 사용하는 모든 애플리케이션에서 사용할 수 있습니다.
자동 수정의 핵심에는 지원되는 각 언어에 대해 수백만 개의 텍스트 예제로 학습된 언어 모델이 있습니다. 모델은 기기에서 완전히(on-device) 작동하므로 입력 데이터의 기밀성이 보장됩니다. 텍스트는 분석을 위해 Apple 서버로 전송되지 않습니다. 각 iOS 업데이트마다 모델은 새로운 단어와 규칙으로 개선 및 확장됩니다.
자동 수정은 개발자가 명시적으로 비활성화하지 않는 한 모든 텍스트 필드에서 자동으로 활성화됩니다. 사용자는 시스템 설정(설정 > 일반 > 키보드 > 자동 수정)에서 자동 수정을 완전히 비활성화할 수 있지만, 개발자는 autocorrectionType 속성을 통해 개별 필드의 이 동작을 제어할 수도 있습니다.
WWDC 2023 세션 204에 따르면 Apple은 Transformer 기반의 개선된 자동 수정 언어 모델을 발표했습니다. 이 모델은 마지막 단어뿐만 아니라 전체 문장의 맥락을 고려합니다. 이를 통해 이전 n-gram 기반 모델에 비해 잘못된 수정이 30% 감소했습니다.
UITextAutocorrectionType은 특정 텍스트 필드의 자동 수정 동작을 결정하는 세 가지 값을 가진 열거형입니다. 각 값은 autocorrectionType 속성을 통해 설정되며 Interface Builder와 필드 생성 시 코드에서 사용할 수 있습니다.
.default 값은 필드가 키보드의 시스템 매개변수에서 전역 자동 수정 설정을 상속받음을 의미합니다. 이 모드는 사용자의 선택을 존중하므로 대부분의 텍스트 필드에 권장됩니다. 사용자가 설정에서 자동 수정을 비활성화한 경우 .default 필드도 이를 사용하지 않습니다.
.yes 값은 시스템 설정과 관계없이 필드의 자동 수정을 강제로 활성화합니다. 이 모드는 철자 정확도가 중요한 필드(예: 텍스트 편집기, 메모 입력 필드, 메시지)에서만 사용해야 합니다. Apple은 강제 활성화가 사용자의 기대에 어긋날 수 있으므로 .yes를 신중하게 사용할 것을 권장합니다.
.no 값은 특정 필드의 자동 수정을 비활성화합니다. 이 모드는 비밀번호 필드(보안 텍스트 입력), 이메일 주소, 확인 코드 및 검색 쿼리에 필수입니다. 이러한 필드에서 자동 수정은 쓸모없을 뿐만 아니라 해롭습니다. 올바르게 입력된 데이터를 잘못된 대안으로 대체할 수 있습니다.
| 모드 | 값 | 권장 사항 |
|---|---|---|
| .default | 시스템 설정 상속 | 대부분의 입력 필드 |
| .yes | 강제 활성화 | 텍스트 편집기, 메모 |
| .no | 강제 비활성화 | 비밀번호, 이메일, 검색, 코드 |
iOS 자동 수정의 언어 모델은 정적 사전과 동적으로 학습되는 모델의 조합을 사용합니다. 시스템 사전에는 각 언어에 가장 많이 사용되는 단어가 포함되어 있으며, Transformer 기반 언어 모델은 맥락과 대체 확률을 분석합니다. 모델은 사용자가 입력한 텍스트를 기반으로 기기에서 학습됩니다.
사용자는 키보드 설정(설정 > 일반 > 키보드 > 텍스트 대치)을 통해 개인 사전에 단어를 추가할 수 있습니다. 추가된 단어는 iCloud에 저장되고 동일한 Apple ID를 사용하여 기기 간에 동기화됩니다. 시스템은 개인 사전의 단어를 수정하지 않으므로 이름, 브랜드 및 기술 용어에 편리합니다.
전문 분야 — 의료, 법률, 기술 — 의 경우 표준 사전에 충분한 용어가 포함되지 않을 수 있습니다. 이러한 애플리케이션에서는 관련 필드의 자동 수정을 비활성화하거나 iOS 17+의 경우 UIResponder 메서드 .replacementDictionary를 통해 사용자 정의 텍스트 대치를 사용하는 것이 좋습니다.
Apple Machine Learning Research(2024)에 따르면 Transformer 아키텍처 기반의 새로운 자동 수정 모델은 최대 10개의 컨텍스트 토큰을 처리합니다(이전 모델의 3개 토큰과 비교). 이를 통해 사용자의 의도를 더 정확하게 파악할 수 있습니다. 모델은 철자뿐만 아니라 문장의 문법 구조도 고려합니다.
Safe Keyboard는 secureTextEntry = true인 필드에서 자동으로 활성화되는 보호된 입력 모드입니다. 이 모드에서는 설정된 autocorrectionType 값과 관계없이 자동 수정, 자동 대문자화 및 예측 입력이 시스템에 의해 비활성화됩니다. 시스템은 사용자 사전 및 텍스트 대치에 대한 액세스도 차단합니다.
Safe Keyboard는 자동 수정 메커니즘을 통한 입력 데이터 유출을 방지합니다. 비밀번호 필드에서 자동 수정이 활성화된 경우 시스템은 입력된 비밀번호를 사용자 사전에 저장하거나 모델 학습을 위해 Apple 서버로 전송할 수 있습니다. Safe Keyboard는 기밀 데이터가 애플리케이션 외부로 유출되지 않도록 보장합니다.
금융 애플리케이션의 경우 Safe Keyboard는 secureTextEntry가 있는 필드에만 자동으로 활성화됩니다. 카드 번호, 만료일 및 CVV 코드 입력 필드의 경우 개발자는 autocorrectionType = .no 및 keyboardType = .numberPad 또는 .phonePad를 설정하여 수동으로 자동 수정을 비활성화해야 합니다.
iOS 17부터 Safe Keyboard는 타사 키보드를 통한 가로채기 방지를 지원합니다. 사용자가 App Store에서 키보드를 설치한 경우 secureTextEntry가 활성화되면 기본값으로 선택되었더라도 시스템 키보드가 자동으로 타사 키보드를 대체합니다. 이를 통해 비밀번호가 안전한 시스템 키보드를 통해서만 입력되도록 보장합니다.
Swift에서 자동 수정 관리는 UITextField 및 UITextView 객체의 autocorrectionType 속성을 통해 수행됩니다. 이 속성은 읽기와 쓰기 모두 가능하며 입력 컨텍스트에 따라 동적으로 변경할 수 있습니다. Interface Builder를 통한 구성은 속성 관리자에서 Correction이라는 이름으로 사용할 수 있습니다.
let textField = UITextField()
textField.autocorrectionType = .no
로그인 양식의 경우 비밀번호 필드의 자동 수정은 비활성화하고 로그인 필드는 기본적으로 활성화해야 합니다. 이메일 필드도 자동 수정 없이 두는 것이 좋습니다. @ 기호와 도메인 이름이 잘못 대체되는 경우가 많기 때문입니다. 사용자 이름이 읽을 수 있는 단어인 경우 사용자 이름 필드에 자동 수정을 활성화할 수 있습니다.
class RegistrationViewController: UIViewController {
@IBOutlet var nameField: UITextField!
@IBOutlet var emailField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
nameField.autocorrectionType = .yes
emailField.autocorrectionType = .no
emailField.textContentType = .emailAddress
}
}
UITextView의 경우 자동 수정 구성도 유사하게 수행됩니다. 이는 댓글, 메시지 및 메모를 위한 여러 줄 입력 필드에서 특히 중요합니다. 이러한 필드에서 자동 수정이 가장 유용하지만 기술 용어나 코드를 입력할 때 불편을 초래할 수도 있습니다.
let textView = UITextView()
textView.autocorrectionType = .default
동적 변경을 위해 UITextFieldDelegate 프로토콜을 사용합니다. textFieldDidBeginEditing 메서드는 필드가 활성화될 때 호출되며, 이 메서드에서 현재 컨텍스트나 필드의 역할에 따라 autocorrectionType을 변경할 수 있습니다. 필드의 역할은 애플리케이션 작동 중에 변경될 수 있습니다.
자동 수정은 비활성화되어야 합니다 입력 데이터의 정확성이 중요하고 시스템이 사용자의 의도를 올바르게 판단할 수 없는 필드에서 특히 그렇습니다. 주요 사례: 비밀번호 및 보안 데이터 필드, 이메일 주소 입력 필드, 검색 문자열, 코드 입력 필드, 프로그램 코드 입력 필드 및 비표준 데이터 형식의 필드.
검색 표시줄(UISearchBar)의 경우 자동 수정이 기본적으로 비활성화되어 있으며 이는 사용자 기대에 부합합니다. 검색 시 사용자는 불완전한 단어, 기술 용어 또는 다른 언어의 쿼리를 입력할 수 있으며 자동 수정은 방해만 됩니다. URL 및 도메인 이름 입력 필드도 마찬가지입니다.
메신저 및 커뮤니케이션 앱에서 자동 수정은 일반적으로 활성화되어 있지만 속어, 약어 및 비공식 어휘를 입력할 때 불편을 초래할 수 있습니다. 이러한 경우 사용자는 키보드 설정을 통해 자동 수정을 비활성화하거나 개발자가 애플리케이션 인터페이스에 직접 토글을 제공할 수 있습니다.
Apple Human Interface Guidelines에 따르면 입력 데이터가 시스템 사전에 없을 수 있는 모든 필드(주문 번호, 예약 코드, 식별자, IMEI, MAC 주소)에 대해 자동 수정을 비활성화해야 합니다. 필드가 비표준 형식의 영숫자 데이터를 허용하는 경우 자동 수정을 비활성화하세요.
자주 묻는 질문
애플리케이션 전체에 대한 전역 자동 수정 비활성화는 존재하지 않습니다. 각 텍스트 필드에 개별적으로 autocorrectionType = .no를 설정하거나 재정의된 값으로 UITextField 서브클래스를 생성해야 합니다.
시뮬레이터는 Mac 키보드의 단순화된 입력 모델을 사용합니다. 시뮬레이터에서는 자동 수정 언어 모델이 활성화되지 않습니다. 테스트에는 실제 기기를 사용하세요.
사용자는 설정 > 일반 > 키보드 > 텍스트 대치를 통해 단어를 추가할 수 있습니다. 애플리케이션이 시스템 자동 수정 사전에 프로그래밍 방식으로 단어를 추가할 수 있는 API는 없습니다.
아니요, keyboardType은 자동 수정에 영향을 미치지 않습니다. .numberPad 키보드의 경우에도 autocorrectionType을 통해 명시적으로 비활성화하지 않으면 자동 수정이 활성화될 수 있습니다.
타사 키보드에는 자체 자동 수정 메커니즘이 있으며 시스템 UITextAutocorrectionType을 사용하지 않습니다. 동작은 특정 키보드의 구현에 따라 다릅니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.