IME ( Input Method Editor )
한글 , 한자처럼 표준 키보드보다 훨씬 많은 문자를 입력할 수 있도록 돕는 소프트웨어
키보드에서 눌린 물리적인 키 입력을 사람이 쓰는 문자 로 변환해주는 걸 말한다.
필요한 이유
영어: 키보드에서 A → 바로 'a'
한글: 키보드에서 A → 바로 'ㅇ' 되는 게 아니라,
입력기가 "ㅇ + ㅗ + ㅏ + ㅇ = 왕" 같이 조합해줘야 최종 글자가 나옴
중국어나 일본어도 마찬가지이다. 키보드로 직접 한자를 입력할 수 없기에, 로마자 입력(han → 한) → 변환 → 최종 글자로 확정
Console.ReadKey 에서 한글을 인식 못하는 이유
영문 키보드 입력 a , b , c 등 같은건 바로 문자 ( KeyChar ) 로 떨어지는데,
한글 자모 ㅁ , ㄴ , ㅇ , ㄹ 등은 조금 다르게 동작
이유는 IME 때문이다.
한글은 "ㅁ , ㄴ , ㅇ , ㄹ" 키 하나가 곧바로 완성된 문자가 아니라 조합 중인 글자로 취급
그런데 Console.ReadKey () 는 IME 조합 전 단계의 "원시 키 이벤트" 만 잡기 때문에
ㅁ , ㄴ , ㅇ 같은건 최종적으로 변환된 값이 아니라 그냥 스캔 코드 수준으로 읽혀서 문자화가 안된다.
참고 자료
https://learn.microsoft.com/ko-kr/dotnet/api/system.console.readkey?view=net-7.0