post-custom-banner

Flutter를 사용하면서 한글 글자에 종성의 유무를 판별하는 경우가 있다.
대표적인 예로 이름 뒤에 (을)/(를)을 작성해야 할 때 이다.
이럴때 아래 코드를 활용하면 해당 글자의 종성 유무를 확인 할 수 있다.

bool checkBottomConsonant(String input){
    bool result = false;
    if(isKorean(input)){
       result = ((input.runes.first- 0xAC00)/(28*21))<0 ? false : (((input.runes.first - 0xAC00) % 28 !=0) ? true : false);
    }
    return result;
  }


  bool isKorean(String input){
    bool isKorean = false;
    int inputToUniCode   = input.codeUnits[0];

    isKorean =  (inputToUniCode >= 12593 && inputToUniCode <= 12643) ? true : (inputToUniCode >= 44032 && inputToUniCode <= 55203) ? true : false;



    return isKorean;
  }
해당 함수들은 length가 1인 String 기준으로 작성되었습니다.

isKorean함수는 말 그대로 해당 String이 한글인지 확인하는 함수이다.
한글을 Unicode로 바꾸었을때 자음들은 12593부터 12643사이의 값을 가진다
자음과 모음을 합친 경우 -> '가' 부터 '힣'까지의 값들은 44032부터 55203까지의 값을 가진다.
그렇기에 확인하고자 하는 String을 Unicode로 변환후 해당값을 확인하면 된다.

checkBottomConsonant함수는 해당 글자가 종성을 포함하고 있는지 확인하는 함수이다.
String을 변수로 받은 다음 나의 경우에는 isKorean함수를 활용하여 해당 String이 한글인지 검사하는 단계를 하나 더 추가하였다. 한글이 아니면 false값을 반환하게 하였다.
그 이후 한글인 String을 초/중/종성으로 분리하여 해당 String이 종성이 있는지 확인한다.

참고사항

한글의 유니코드 값은 다음과 같이 정해진다.
유니코드 값 = ((초성 21) + 중성) 28 + 종성 + 0xAC00
그렇기에 한글을 이루는 초 / 중 / 종성 값을 구할때는 다음과 같이 분리하여 계산할 수 있다.
초성 = ((문자코드 – 0xAC00) / 28) / 21
중성 = ((문자코드 – 0xAC00) / 28) % 21
종성 = (문자코드 – 0xAC00) % 28

출처

한글 종성 분리 코드 : https://velog.io/@locked/Dart-%ED%95%9C%EA%B8%80-%EC%A2%85%EC%84%B1-%ED%8C%90%EB%B3%84
한글 초성 / 중성 / 종성 분리 공식 : http://cswiki.net/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%EC%B4%88%EC%84%B1%EC%A4%91%EC%84%B1%EC%A2%85%EC%84%B1_%EC%AA%BC%EA%B0%9C%EA%B8%B0_%ED%95%A9%EC%B9%98%EA%B8%B0
썸네일 이미지 출처 : https://infototal.tistory.com/entry/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C-%ED%95%9C%EA%B8%80-%EC%B4%88%EC%84%B1%EC%A4%91%EC%84%B1%EC%A2%85%EC%84%B1-%EB%B6%84%EB%A6%AC

profile
어제보다 한 발짝 더 나아가려는 Flutter 개발자
post-custom-banner

0개의 댓글