IT 성장일기

[Javascript] 한글 마지막 글자의 받침 유무 판단하기 본문

Script/Javascript

[Javascript] 한글 마지막 글자의 받침 유무 판단하기

고 양 2025. 3. 18. 13:58
반응형
한글 받침 유무 파악하기

담당하고 있는 서비스에 사용자가 현재 열람하고 있는 컨텐츠와 유사한 컨텐츠를 추천해주는 큐레이션 영역이 있었습니다.

"현재 여행지 명와(과) 유사한 여행지"가 큐레이션의 타이틀인데, 조사를 와(과)로 표시하고 있는 부분이 조금 어색했습니다.

컨텐츠명의 마지막 글자의 받침 유무를 판단해 조사를 결정지어서 표시하면 어떨까? 라는 생각으로 이어졌고,

구글을 뒤져본 결과 어렵지 않게 다양한 예제코드를 발견할 수 있었습니다.

예제 코드

아래는 완성된 함수입니다.

function hasJongseong(str) {
    if (!str || typeof str !== 'string') return false;

    const lastChar = str.charAt(str.length - 1);
    const lastCharCode = lastChar.charCodeAt(0);

    if (lastCharCode < 0xAC00 || lastCharCode > 0xD7A3) return false;

    return (lastCharCode - 0xAC00) % 28 !== 0;
}

let content;
let particle;

content = '서울';
particle = hasJongseong(content) ? '이' : '가';

console.log(`${content + particle}`); //서울은


content = '독도';
particle = hasJongseong(content) ? '은' : '는';

console.log(`${content + particle}`); //독도는

우리땅

적용 후

마치며

함수에서 사용되는 유니코드의 값이 어떤 역할을 하는지 궁금해서 조금 더 찾아봤습니다.

한글의 인코딩 방식, 조합 규칙 등에 관한 내용이 많았지만  예제함수에서 사용된 부분만 추려서 설명해보도록 하겠습니다.

 

유니코드로 표시되는 한글은 아래와 같은 조합 규칙을 가지고 있습니다.

U + AC00 + (초성 × 588) + (중성 × 28) + 종성

위 식에서 초성, 중성, 종성의 각 자리엔 해당 자모의 유니코드표 상의 인덱스 값이 들어가게 됩니다.

초성에 곱해지는 588은 중성 21글자 × 종성 28글자, 중성에 곱해지는 28은 종성 28글자를 의미합니다.

 

규칙을 알았으니 역으로 응용해서 종성의 유무를 파악할 수 있습니다.

 

우리가 사용하는 완성된 한글은 초성과 중성이 무조건 존재하고, 중성은 중성 인덱스에 28을 곱해 표현합니다.

그러니까 글자의 코드를 28로 나누었을 때(초성과 중성만 추출했을 때) 나머지가 존재한다면, 그 값이 종성의 인덱스가 됩니다.

나머지가 0이라면 받침이 없는 글자이고, 1 이상이라면 해당 인덱스에 해당하는 받침이 포함된 글자라고 판단할 수 있습니다.

 

감사합니다.

반응형