Unicode scalar value

유니코드 스칼라 값

나루 위키
둘러보기로 가기 검색하러 가기

유니코드 스칼라 값은 유니코드 "문자"에 배당된 숫자로, 통상 "U+" 뒤에 4~6자리 16진수로 표기한다. 거의 같은 개념으로 코드 포인트가 있으나 살짝 다르다. 유니코드 스칼라 값으로는 다음 값이 허용된다.

  • U+0000부터 U+D7FF까지
  • U+E000부터 U+10FFFF까지

중간의 U+D800..DFFF는 UTF-16 서로게이트 쌍을 위해 예비된 것으로 올바른 유니코드 스칼라 값이 아니지만, 코드 포인트는 할당되어 있다. 나루는 짝지어지지 않은 서로게이트 코드 포인트를 소스 코드에서도 문자열 타입에서도 지원하지 않는다.

"유니코드 스칼라 값"이라는 이름이 너무 긴 관계로, 메소드 이름 등에서는 혼란의 여지가 없는 한 코드 포인트라는 명칭을 대신 사용한다.

유사 개념

다음 네 가지 개념은 모두 구분됨에 유의하라.

문자 
인간이 생각하는 문어의 최소 단위. 언어에 따라 다를 수 있다(예를 들어서 네덜란드어에서는 "ij"가 하나의 "문자"이다).
코드 포인트 
유니코드의 최소 표현 단위에 붙은 숫자로, U+0000부터 U+10FFFF까지가 있다. 여기에는 서로게이트 코드 포인트가 포함된다.
유니코드 스칼라 값 
코드 포인트 중 서로게이트를 제외한 것이다. 이는 유니코드 문자 인코딩이 지원하는 코드 포인트의 목록과 동일하다.
(확장) 자소 클러스터(grapheme cluster) 
하나 이상의 유니코드 스칼라 값을 모아 인간이 생각하는 문자와 유사하게 만든 개념. 언어·로캘에 따라 미세조정(tailoring)이 필요할 수 있어서 완벽하지 않다. "자소 클러스터"라는 이름이 붙은 개념이 역사적인 이유로 두 가지 있다는 것도 함정(유니코드에서는 나중 것인 "확장" 자소 클러스터를 권장하고 있다). 유니코드 스칼라 값이 둘 이상 필요한 문자나 자소 클러스터의 대표적인 예제로 옛한글이 있다.

논의

일부 언어(대표적으로 Go)에서는 코드 포인트나 유니코드 스칼라 값이라는 표현을 안 쓰고 룬(rune)이라는 명칭을 쓴다. "문자지만 무언가 다른 것"을 나타내는 말로서 아마도 Plan 9에서 나온 것으로 추정되는데, 동기는 이해가 되지만 i) 룬이 "보통"의 문자가 아니라는 느낌이 있고, ii) 룬 문자가 유니코드에 이미 인코딩되어 있으며, iii) 에초에 유니코드에서 문자와 가장 비슷한 무언가는 룬과 상당히 동떨어진 것이라는 점에서 굳이 그런 명칭을 사용할 필요는 없어 보인다.