창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


LIST ALL
Posted by 지상현2006-07-29 19:32:08, Hit : 6459
한글이 입력되기까지
Homepage : http://ssidang.x-y.net
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=open_lec&no=94
...제가 학교를 가야 해서 짧게 써보겠습니다.
새로 나온 TSF(고급 텍스트 서비스, Text Service Framework) 환경이 아닌, IME를 사용하는 환경에 대해 이야기 합니다.
물론 대부분의 프로그램은 아직 TSF를 지원하지 않고 IME만 지원하므로 크게 무리는 없을 겁니다.



한글같은 문자가 입력되려면 먼저 여러 가지 도구가 필요합니다.
입력을 받을 수 있는 글판[키보드], 하드웨어로부터 데이터를 받을 수 있는 드라이버, 그리고 IME*1 정도가 되겠습니다.

먼저 글판에서 키를 누르면 운영체제가 그걸 깨닫고*2 키보드 드라이버에서 키를 눌렸다는 하드웨어 메시지를 발생시킵니다.
이 때 스캔 코드(Scan Code)라는 형태로 메시지가 오는데, 이것은 글판을 만든 회사에서 각각 키에 할당하는 고유한 코드입니다. 사실, 원래 오리지날 그대로의 키 코드라고 할 수 있습니다.
운영체제는 이것을 받아서, 해당 드라이버에 맞도록 스캔 코드를 가상 키 코드로 매핑합니다.
이 가상 키 코드는 익히 알고 계신대로 일부 아스키 코드와 일치하는 코드죠.

여튼, 프로그램은 키가 눌리면 최종적으로 가상 키 코드로 된 메시지를 받습니다*3.
이 때 IME가 설치되어 있는 운영체제*4라면, 현재 상태에 따라 눌린 키를 처리하는 방법이 다릅니다.

일본어 IME는 영문 입력 모드와 IME 기능 자체를 끄는 방법 두 가지가 모두 있지만,
한국어 IME는 영문 입력 모드로 전환하는 방법 밖에 없습니다.
IME 상태를 영문 입력으로 전환하면, 입력하는 키는 바로 영문 아스키로 해석되어 영문 글자 코드로 바뀌어 옵니다.
물론 가상 키 코드에 Shift의 눌림 여부, Caps Lock 의 켜짐 상태 따위를 참고하여 대소문자 구분도 해서 문자 코드를 만듭니다.

자, 그러면 IME 상태를 한글 입력으로 전환해봅시다.
저는 세벌식이지만 편의를 위해 두벌식을 기준으로 설명하겠습니다.

한글 입력 상태에서, R 에 해당하는 키를 눌렀습니다.
한글 입력 상태이므로 일단 그 키는 가장 먼저 IME 에게 갑니다.
두벌식에서 R 위치에 해당하는 키는 닿소리 ㄱ이므로, IME는 상태를 한글 조합중으로 바꾸고
ㄱ을 기억해둡니다.
그 다음 M 을 눌렀습니다. 그럼 IME는 또 이 키를 테이블에서 찾아봅니다. 이건 홀소리 ㅡ에 해당하죠.
이전에 입력되었던 ㄱ 다음에 ㅡ 를 더하면 '그'가 되도록, IME는 글자를 조합해줍니다.
마찬가지로 ㄹ 을 입력하면 '글'로 조합시켜주죠. 여기서 또 다른 자음을 입력한다면 '글'이라는 글자를 완성시켜 문자 코드를 보내주고, 또 다른 조합 준비를 합니다.

이런 것을 처리하는게 IME의 역할이고, 제가 만들었던 이 프로그램도 미약하나마 IME의 일부 기능을 구현해본 프로그램입니다.


ㄱ) 글판은 운영체제에게 하드웨어 메시지를 발생시키고
ㄴ) 운영체제는 프로그램에게 자판이 눌렸다는 메시지를 발생시키고
ㄷ) 프로그램은 IME에게 글자를 조합하도록 하고
ㄹ) IME는 프로그램에게 글자를 완성시켜 알려준다
는 구조입니다.

만일, 한글을 입력시키는 매크로 프로그램을 만든다면 저 네 단계 중 어느 단계부터 시작해도 됩니다.
ㄹ부터 시작하면, 한글의 문자 코드를 넘겨주면 됩니다.
ㄷ부터 시작하려면, 직접 IME 메시지를 날려주면 됩니다.
ㄴ부터 시작하려면, 키가 눌렸다는 메시지를 날려주면 됩니다.
ㄱ부터 시작하려면, 각종 키보드 관련 API로 키를 눌러주면 됩니다.

ㄹ 쪽으로 갈수록 높은 단계고, ㄱ 쪽으로 갈수록 낮은 단계입니다.
높은 단계에서 시작할수록 완벽하고 의도된 제어를 할 수 있지만, 그렇게 하기는 쉽지 않습니다.
낮은 단계에서 시작하면 중간 단계들에 상태에 따라 의도되지 않은 동작을 할 수도 있지만, 이것이야말로 "있는 그대로"를 다시 재현하는 의의가 있습니다.



여담이지만, 사실 한글을 조합하는 과정은 매우 간단합니다.
초성 다음에 중성, 중성 다음에 종성을 이어 붙이면 끝입니다. (물론 두벌식에서는 이야기가 조금 다릅니다.)
한글에서는 한 글자를 조합하기 위해 키를 많아 봐야 4~5개만 누르면 되고, 또 한번에 한 글자만 조합합니다.
그래서 그런지는 몰라도 IME에서 조합하면 한번에 한 글자를 조합한다는 인상을 받기 쉬운데, 사실 IME의 역할은 그게 다가 아닙니다.
다른 언어의 IME를 써보신 분은 아시겠지만, 중국어나 일본어 IME에서는 해당하는 문장을 죽 써준 다음 이것을 한번에 변환하는 경우가 일반적입니다.
이 때 알맞는 단어만 변환하기 위해 구문 분석기나 단어 사전 같은 것이 IME에 부속으로 딸려 있습니다.
또 IME의 후보 선택 창*5은 한국어 IME에서는 한자나 특수 문자나 입력할 때나 보는 창이지만, 다른 언어의 IME에서는 매번 글을 조합할 때 마다 한자 같은 것을 골라야 하므로 자주 보는 창이죠.
이런 저런 입력 방법의 차이만 보더라도 역시 한글은 우수한 글자입니다.




*주1: Input Method Editor
*주2: 실제로는 운영체제가 알아차리는게 아니고 글판이 알려주는 것
*주3: 스캔 코드도 같이 넘어옴
*주4: 동아시아 3개 국가는 IME가 기본적으로 깔려 있으며, 다른 언어 버전의 윈도우에서는 Global IME 같은 것을 설치하면 됨. 2000 이상부터는 그런 것이 전혀 필요 없음
*주5: 한자 같은 것을 고르는 창

손상진   2006-07-29 PM 9:32:24  
아~ 이해가 잘되네요~
설명 감솨~ ㅋ
박종훈   2006-07-29 PM 10:16:26  
큭.. 오랜만의 강좌네요 ^^..

강좌내용도 좋고 ^^..
한글프로그래밍이라면서, 사실상 한글을 잘 몰랐는데,
입력원리까지 상세히 적어주셔서 감사합니다. ^^..
[흠.. ㅎ메모 한글 매크로 ㅠㅠ흑;]

새나루 IME 좋네요 ㅋ
이진백   2006-08-05 PM 6:02:06  
MS가 IME를 이상하게 만들었다고 비록 욕은 먹지만...
가장 각 나라의 특징을 잘 반영하는것 같습니다 ^^
하지만... 조합을 해서 완성을 딱 해줘야 하는 IME 특성상...
영문 프로그램 에디터 일부가 조합 창이 구리게 (그... 네모박스) 뜬다는 점...
그런 세심한 배려가 조금 아쉽죠.
지상현   2006-08-05 PM 6:39:44  
문제는 한국어 IME는 발로 만들었다는게 이미 증명되었다는 것입니다.
MS IME에 들어있는 세벌식 모드로 하면 모아치기도 지원 안되고, 자판 배열 5곳이 틀려있습니다. (" 키가 4개나 됩니다...)
95 적부터 XP까지 절대 고쳐지지 않고 있습니다.

뭐, 애초에 한글이야 일본어나 중국어처럼 번거로운 작업이 필요 없었으니 이 정도로도 발전할 수 있었지만요.
LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
94
   환경파일로 파워유저되어보자![개정판] [설명] 1 -- 완성
박종훈 2007/01/02  6109
93
   ㅎ사용자함수 알아보기! [2]
박종훈 2006/12/24  5394
92
   '변수'와의 인터뷰 -_-; [5]
박종훈 2006/12/24  5355
91
   창조 첫 시작시 명령어 익혀보자~ [4]
박종훈 2006/12/23  8038
90
   쉽고 빠르게 프로그래밍 하기 위한 방법들
장규형 2006/11/22  5394
89
   효과적인 조건문을 위한 논리연산자 [4]
박종훈 2006/10/15  6034
88
   [창조x] 수줍은 pda프로그래밍시작
이진백 2006/09/11  5790
87
   API사용을 위한 창조 구조체다루기 [M_S 0608190928] [3]
박종훈 2006/08/18  5547
86
   창조 시작단계 문법배워볼까? [M 0608181240] [8]
박종훈 2006/08/17  6506

   한글이 입력되기까지 [4]
지상현 2006/07/29  6459
84
   스크린세이버에대한 분석 [5]
박재성[날개달기] 2006/03/08  5281
83
   몇가지 유용한 정보 모음 [5]
최재일 2006/01/13  9348
82
   환경문 강좌..^^; [문자형 자료] [8]
qkrwhdgns 2006/01/10  5636
81
     환경문 강좌..^^; [실수형 자료] [1]
qkrwhdgns 2006/01/11  5244
80
       환경문 강좌..^^; [진리형 자료] [1]
qkrwhdgns 2006/01/11  5017
79
         환경문 강좌..^^; [예제 소스]
qkrwhdgns 2006/01/11  5279
78
   재미있는 포인터 강좌 -1- [2]
지상현 2005/10/12  6274
77
   #1 비트 연산이란? - 진수 표기법
지상현 2005/10/09  11386
76
   [요청강좌#14] DLL제작 강의 (미완성) [4]
이진백 2005/10/09  5604
75
     [re] [요청강좌#14] DLL제작 강의 (미완성) [2]
지상현 2005/10/09  6668
74
   창조로 빠져보는 API #3 [13]
지상현 2005/09/04  7262
73
   창조로 빠져보는 API #2 [3]
지상현 2005/09/04  6329
72
   창조로 빠져보는 API #1 [2]
지상현 2005/09/04  7042
71
   [폴더선택창보여]명령어의 언어 한글로 [8]
qkrwhdgns 2005/08/27  5448
70
   [ps.구루 강좌#13] 창조에서는 델파이에서 만든 DLL만 가능합니까? [1]
이진백 2005/07/22  5959
LIST ALL   Prev [1] 2 [3][4][5] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인