코딩 중 앞에 오는 단어에 맞는 조사(-이/-가, -을/-를 등)를 텍스트로 나타내는 작업이 필요해서 알아보다가 공부한 내용을 정리해서 포스팅해본다.
코드 구현에 앞서 먼저 조사들이 어떤 기준으로 구분되는 지를 알아보자.
📖 구분 기준
직관적으로 쉽게 구분이 가능한데,
앞 음절에 받침이 있으면 '-이/-을/-은/-과',
받침이 없고 모음으로 끝나면 '-가/-를/-는/-와'가 된다.
예1) 귤이 맛있다. / 귤은 맛있다.
예2) 사과가 맛있다. / 사과는 맛있다.
📖 자바스크립트에서의 한글
자바스크립트에서 한글을 구분하는 방법 중에서, 여기서는 유니코드를 통한 구분법을 사용한다.
한글에 해당하는 유니코드표를 확인해보면 다음과 같다.
가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛
개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷
갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓
걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯
....
이렇게 쭉 나열해서 보면 받침이 없는 글자부터 시작해, 모든 받침을 한번씩 순회하고 28번만에 받침이 없는 다음 모음 글자로 돌아돈다. 즉, 구하려는 현재 글자값에서 한글이 시작되는 부분을 뺀 후, 이를 28로 나누어 그 나머지를 보면 받침이 있는지 없는지, 그리고 있다면 어느 받침을 가졌는지도 파악할 수 있다.
자바스크립트에서 charCodeAt()을 통해 한글의 유니코드 값을 찾을 수 있는데, 이는 유니코드 중에서도 UTF-16 방식을 사용한다. UTF-16에서 한글의 범위는 [ AC00 ~ D7AF ] 이다.
시작값인 AC00을 10진수 숫자로 계산해보면 (16^3)*10+(16^2)*12+16*0+0 = 44032 가 나온다.
이제 이걸 코드로 정리해보자.
📖 코드 구현
아래 코드는 입력값 name의 다음으로 올 조사를 '을'과 '를' 중에 해당하는 것을 name과 함께 반환하는 함수를 나타낸 코드이다.
function checkName(name){
//name의 마지막 음절의 유니코드(UTF-16)
const charCode = name.charCodeAt(name.length - 1);
//유니코드의 한글 범위 내에서 해당 코드의 받침 확인
const consonantCode = (charCode - 44032) % 28;
if(consonantCode === 0){
//0이면 받침 없음 -> 를
return `${name}를`;
}
//1이상이면 받침 있음 -> 을
return `${name}을`;
}
charCodeAt()에 대해선 여기에서 확인할 수 있다.
참고 사이트
UTF-16 https://ko.wikipedia.org/wiki/UTF-16
유니코드표 http://titus.uni-frankfurt.de/unicode/unitestx.htm
코드 http://yoonbumtae.com/?p=3677
'웹' 카테고리의 다른 글
Git 자주쓰는 명령어 (0) | 2021.09.30 |
---|---|
반응형 웹 단계별 해상도(나누는 크기 기준) (0) | 2021.09.15 |
[React] 리액트 Attempted import error: './App' does not contain a default export (imported as 'App') 에러 (0) | 2021.06.08 |
JS ES5+ 정리 노트 (0) | 2021.05.26 |
VS Code 단축키 / 숏컷 (0) | 2021.03.16 |