한국어는 받침 유무에 따라 조사가 달라지는 교착어입니다. 프로그래밍에서 한국어 텍스트를 다룰 때 조사를 자동으로 선택하는 함수가 필요합니다. 이번 포스트에서는 krParticle 함수를 소개합니다.
krParticle - 한국어 조사 자동 선택
krParticle 함수는 단어의 받침 유무를 판단하여 적절한 조사를 자동으로 선택합니다.
const krParticle = (str, particle) => {
const last_char = str[str.length-1];
const is_under = (last_char.charCodeAt(0) - 0xAC00) % 28 != 0;
switch(particle) {
case '은':
case '는':
return is_under ? '은' : '는';
case '이':
case '가':
return is_under ? '이' : '가';
case '을':
case '를':
return is_under ? '을' : '를';
case '와':
case '과':
return is_under ? '과' : '와';
case '로':
case '으로':
return is_under ? '으로' : '로';
default:
return particle;
}
}
기본 원리
한국어에서:
- 받침이 있으면: "은", "이", "을", "과", "으로" 사용
- 받침이 없으면: "는", "가", "를", "와", "로" 사용
예시:
- "사과" (받침 없음) → "사과는", "사과가", "사과를"
- "책" (받침 있음) → "책은", "책이", "책을"
기본 사용법
// 은/는
krParticle('사과', '은/는');
// "는" (받침 없음)
krParticle('책', '은/는');
// "은" (받침 있음)
// 이/가
krParticle('사과', '이/가');
// "가"
krParticle('책', '이/가');
// "이"
// 을/를
krParticle('사과', '을/를');
// "를"
krParticle('책', '을/를');
// "을"
// 와/과
krParticle('학교', '와/과');
// "와" (받침 없음)
krParticle('도서관', '와/과');
// "과" (받침 있음)
// 로/으로
krParticle('집', '로/으로');
// "으로" (받침 있음)
krParticle('학교', '로/으로');
// "로" (받침 없음)
실전 활용 예시
1. 동적 메시지 생성
// 사용자 이름에 맞는 조사 선택
const userName = '홍길동';
const particle = krParticle(userName, '이/가');
const message = `${userName}${particle} 로그인했습니다.`;
// "홍길동이 로그인했습니다."
const userName2 = '김철수';
const particle2 = krParticle(userName2, '이/가');
const message2 = `${userName2}${particle2} 로그인했습니다.`;
// "김철수가 로그인했습니다."
2. 알림 메시지 생성
const createNotification = (itemName, action) => {
const particle = krParticle(itemName, '이/가');
return `${itemName}${particle} ${action}되었습니다.`;
};
createNotification('주문', '완료');
// "주문이 완료되었습니다."
createNotification('상품', '등록');
// "상품이 등록되었습니다."
createNotification('사과', '삭제');
// "사과가 삭제되었습니다."
3. 문장 자동 생성
const generateSentence = (subject, verb) => {
const particle = krParticle(subject, '이/가');
return `${subject}${particle} ${verb}.`;
};
generateSentence('사과', '맛있다');
// "사과가 맛있다."
generateSentence('책', '재미있다');
// "책이 재미있다."
4. 다중 조사 처리
const createComplexMessage = (item) => {
const particle1 = krParticle(item, '이/가');
const particle2 = krParticle(item, '을/를');
return `${item}${particle1} 선택되었고, ${item}${particle2} 장바구니에 추가되었습니다.`;
};
createComplexMessage('사과');
// "사과가 선택되었고, 사과를 장바구니에 추가되었습니다."
createComplexMessage('책');
// "책이 선택되었고, 책을 장바구니에 추가되었습니다."
5. 그리드 셀 포맷터
// 그리드에서 상품명과 조사 조합
{
name: 'product_name',
formatter: ({value, row}) => {
const particle = krParticle(value, '이/가');
return `${value}${particle} 재고가 부족합니다.`;
}
}
6. 검색 결과 메시지
const formatSearchResult = (keyword, count) => {
const particle = krParticle(keyword, '을/를');
return `"${keyword}"${particle} 검색한 결과 ${count}개가 발견되었습니다.`;
};
formatSearchResult('사과', 5);
// ""사과"를 검색한 결과 5개가 발견되었습니다."
formatSearchResult('책', 3);
// ""책"을 검색한 결과 3개가 발견되었습니다."
7. 에러 메시지
const createErrorMessage = (itemName) => {
const particle = krParticle(itemName, '이/가');
return `${itemName}${particle} 존재하지 않습니다.`;
};
createErrorMessage('사용자');
// "사용자가 존재하지 않습니다."
createErrorMessage('파일');
// "파일이 존재하지 않습니다."
고급 활용 패턴
1. 조사 선택 헬퍼 함수
const withParticle = (word, particleType) => {
return word + krParticle(word, particleType);
};
withParticle('사과', '이/가');
// "사과가"
withParticle('책', '이/가');
// "책이"
2. 문장 템플릿
const sentenceTemplates = {
login: (name) => {
const particle = krParticle(name, '이/가');
return `${name}${particle} 로그인했습니다.`;
},
delete: (item) => {
const particle = krParticle(item, '을/를');
return `${item}${particle} 삭제하시겠습니까?`;
},
success: (item) => {
const particle = krParticle(item, '이/가');
return `${item}${particle} 성공적으로 처리되었습니다.`;
}
};
sentenceTemplates.login('홍길동');
// "홍길동이 로그인했습니다."
sentenceTemplates.delete('파일');
// "파일을 삭제하시겠습니까?"
3. 다국어 지원 확장
const getParticle = (word, particleType, language = 'ko') => {
if (language === 'ko') {
return krParticle(word, particleType);
}
// 다른 언어는 조사가 없으므로 빈 문자열 반환
return '';
};
const createMessage = (word, action, lang = 'ko') => {
const particle = getParticle(word, '이/가', lang);
return lang === 'ko'
? `${word}${particle} ${action}되었습니다.`
: `${word} has been ${action}.`;
};
주의사항
1. 복합어 처리
// 복합어는 마지막 글자 기준
krParticle('사과나무', '이/가');
// "가" (마지막 글자 "무"는 받침 없음)
krParticle('책장', '이/가');
// "이" (마지막 글자 "장"은 받침 있음)
2. 숫자나 영문 처리
// 숫자나 영문은 받침이 없다고 간주
krParticle('123', '이/가');
// "가"
krParticle('ABC', '이/가');
// "가"
마무리
krParticle 함수를 활용하면 한국어 애플리케이션에서 자연스러운 문장을 자동으로 생성할 수 있습니다. 특히 사용자에게 보여주는 메시지, 알림, 에러 메시지 등에서 매우 유용합니다.
'프론트' 카테고리의 다른 글
| TypeScript 기초 타입 정리 (0) | 2026.04.11 |
|---|---|
| 타입스크립트를 사용하는 이유 (0) | 2026.04.11 |
| JavaScript 유틸리티 함수 - deepClone (0) | 2026.02.09 |
| JavaScript 숫자 포맷팅 (0) | 2026.02.06 |
| JavaScript 날짜/시간 처리 함수 (0) | 2026.02.06 |