์ฌ์ฉ์ ์ด๋ฆ + "์ด/๊ฐ" ๊ฐ ์์ผ๋๋ ์ํฉ์ด ์๊ฒผ๋ค.
์๋ฌธ์ด๋ ๊ธฐํธ๋ก ์ด๋ฆ์ด ๋๋๋ฉด ๊ทธ๋ฅ "๊ฐ"๋ฅผ ๋ถ์ด๋ฉด ๋๋๋ฐ, ํ๊ธ์ด๋ผ๋ฉด ๋ง์ง๋ง ๊ธ์๊ฐ ์ด๋ค ๊ฒ์ด๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- ์ฌ๋+์ด
- ๊ท์๋ฏธ+๊ฐ
์ข ์ฑ์ด ์กด์ฌํ๋ค๋ฉด "์ด" ๊ฐ ๋ถ๋ ๊ฒ ์์ฐ์ค๋ฝ๋ค.
https://github.com/intotherealworld/jamo
์ด ๋ ํฌ์ ์์ฃผ ์ค๋ช ์ด ์ ๋์ ์๋ค. ์ ๋์ฝ๋๋ฅผ ์ด๋ ๊ฒ ๋ค๋ค๋ณธ๊ฒ ์ฒ์์ด๋ผ ์ ๊ธฐํ ๊ฒฝํ์ด์๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
fun findFinality(lastChar: Char): String {
return when (val jongsung = lastChar.code) {
in 0xD7A3 downTo 0xAC00 -> {
if ((jongsung - 0xAC00) % 28 > 0) "์ด"
else "๊ฐ"
}
else -> {
"๊ฐ"
}
}
}
์ ๋ ฅ์ผ๋ก๋ ๋ง์ง๋ง ๊ธ์๋ง ๊ฐ์ง๊ณ ์์ํ๋ค.
char์ UTF-16 code๋ก ํํฐ๋ง์ ํ๋๋ฐ, ํ๊ธ ๋ฒ์์ธ 0xD7A3 ~ 0xAC00์ ๋ฒ์ด๋๋ฉด "์ด"๋ฅผ ๋ถ์ผ ํ์๊ฐ ์์ผ๋ ๋ฌด์กฐ๊ฑด "๊ฐ"๋ฅผ ๋ฐํํ๋ค.
((์ด์ฑ์์ * 21) + ์ค์ฑ์์) * 28 + ์ข
์ฑ์์ = ์์ํ๊ธ์ฝ๋
ํ๊ธ์ด๋ผ๋ฉด ์ด์ 0xAC00์ ๋นผ์ ์์ ํ๊ธ ์ฝ๋๋ก ๋ฐ๊พธ๊ณ (char์์ ์ซ์๋ก ๋ฐ๊พธ๋ ๋ฐฉ์์ธ '0' ๋นผ๋ ๊ฒ๊ณผ ๋์ผ ๊ฐ๋ ) 28๋ก ๋๋ด์ ๋ ๋๋จธ์ง๊ฐ 0์ด ์๋๋ผ๋ฉด "์ด"๋ฅผ ๋ถ์ฌ์ค๋ค.
์ด/๊ฐ ๋ง๊ณ ์/๋ ์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ ์ ์๋ ๊ตฌ๋ถ๋ฐฉ์์ด๋ค.
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์!