티스토리 뷰
진행하던 부분을 마저 살펴보자.
모였던 JSR-204 전문가 그룹은 여러 아이디어를 제언하였다고 한다. 그 중 어떤 그룹에서 supplementary character 를 지원하는 기법을 개발했고 이게 채택되었다고 한다.
이런 결과로 low level API 와 high level api 각각에 대하여 다른 대응을 지원하는 방향으로 결정되었다고 한다.
The low-level APIs that were added fall into two broad categories: Methods that convert between various char and code point based representations, and methods that analyze or map code points.
저레벨 api는 code points 표현과 다양한 char를 변환하는 메서드와 code points를 맵핑하고 분석하는 메서드들로 구분되며 이에 따라 code points를 구분하기 위한 여러 메서드가 추가되었다고 한다.
원문은
The most basic conversion methods are Character.toCodePoint(char high, char low), which converts two UTF-16 code units to a code point, and Character.toChars(int codePoint), which converts the given code point to one or two UTF-16 code units, wrapped into a char[]. However, since text most of the time comes in the form of a character sequence, there are also codePointAt and codePointBefore methods to extract a code point from the various character sequence representations: Character.codePointAt(char[] a, int index) and String.codePointBefore(int index) are two typical examples. For the most common cases of inserting code points into a character sequence, there are appendCodePoint(int codePoint) methods for the StringBuffer and StringBuilder classes and a String constructor that takes an int[] representing code points.
이다...
최종 주의사항으로 그러면 BMP이 외의 문자를 커버하기 위해 코드가 수정되어야 하는가에 대한 질문을 던지는데 답변을 하자면 '그렇지 않다'이다. 물론 자세히 들어가면 그 내용은 다음과 같다.
고수준 api의 경우에는 그 내부에서 이러한 supplementary character를 지원하는 메서드 기능이 변경되었고 이를 알아서 처리해주도록 되었기 때문에 변경할 필요가 없다.
문제가 되는 것은 저수준 api를 사용하는 것으로 정확히는 char 하나만을 다루는 api를 사용하는 부분이 있는 경우 수정이 필요하다는 내용이다. 이는 supplementary character가 기존 2 bytes의 char로 표현되지 못하고 char [] 로 표현되어야 지원이 가능하기 때문인데 따라서 위에 언급된 저수준 api를 통해 각 문자의 내용을 파악하고 BMP인지 아닌지에 따라 처리를 다르게 해주는 식의 변경이 필요하게 된 것이다.
이때 언급된 내용으로 위 저수준 API는 인자로 들어온 값이 타당한 code points의 범위인지는 검사하지 않는데 이는 매번 내부에서 이 값이 타당한지를 검사하는 것은 성능상의 이점이 없기 때문이다. 이 api들은 타당한 값이 넘어오는 것이 전제되어 있으며 java에서는 타당하지 않은 값이 넘어왔을 경우에 어떻게 동작할지에 대한 명세가 없기에 구현 벤더마다 동작 방식이 다를 수 있음을 고려해야 한다.
또한 특정 소문자 code point에 대응하는 대문자 code points를 반환하는 함수가 존재하는데 이 또한 일부 문자열 (보통 ASCII ) 외의 문자에 대해서는 기대하던 대로 동작하지 않을 수 있음에 주의하란 내용이 존재한다.
음 좋다. 자바의 문자열 표현에 대해 이러한 내용을 공지했으니 다음 주석 및 메서드를 파악하도록 하자.
[참고링크] www.oracle.com/technical-resources/articles/javase/supplementary.html
출처: https://hyojabal.tistory.com/31 []