C#에서 문자열 관련 메소드를 사용하다 보면, 마주치게 되는 게 StringComparison 열거형입니다.
StringComparison 열거형은 대부분 책에서도 자세하게 설명을 하지 않고 공식 문서에서는 내용 자체는 어렵지 않지만, 번역 때문에 이해하기가 어렵습니다.
이번 기회에 StringComparison 열거형에 대해 정리합니다.
StringComparison 열거형
StringComparison 열거형은 문자열 검색 및 비교하는 메소드에서 검색 규칙을 설정하는 기능입니다.
열거형 필드
필드 | 설명 |
CurrentCulture | 문화권 구분 정렬 규칙 및 현재 문화권을 사용하여 문자열을 비교합니다. |
CurrentCultureIgnoreCase | 문화권 구분 정렬 규칙 및 현재 문화권을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다. |
InvariantCulture | 문화권 구분 정렬 규칙 및 고정 문화권을 사용하여 문자열을 비교합니다. |
InvariantCultureIgnoreCase | 문화권 구분 정렬 규칙 및 고정 문화권을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다. |
Ordinal | 서수(이진) 정렬 규칙을 사용하여 문자열을 비교합니다. 암화와 같은 대소문자를 구분하는 리소스를 비교할 때 적합합니다. |
OrdinalIgnoreCase | 서수(이진) 정렬 규칙을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다. 경로 및 파일 이름과 같은 리소스를 비교할 때 적합합니다. |
설명은 공식 사이트를 참고하여 작성하였는데, 설명에서 말하는 현재 문화권, 고정 문화권등.. 이해하기 어려운 용어들이 나옵니다. 위 설명에서 작성한 용어들에 대해 정리하였습니다.
용어 정리
현재 문화권
- 현재 지역에 따라 문자열을 설정하여 비교합니다.
- 소프트웨어가 실행되는 위치에 따라 다르게 비교될 수 있습니다.
고정 문화권
- 기본적으로 영어로 설정되어 있습니다.
- 소프트웨어가 실행 되는 위치와 무관하게 영어로 비교합니다.
서수(이진)
- 유니코드 값을 기반으로 비교합니다.
사용 방법 및 예시
독일어 문자 ß 는 ss로 사용할 수 있습니다. 아래 Wikipedia에 들어가셔서 Ctrl + F 단축키로 ss 를 검색하면 ß 도 검색됩니다.
https://en.wikipedia.org/wiki/%C3%9F
왜 검색이 되는 걸까?
독일어 문자 ß 는 영어로 변환하면, ss와 동일하기 때문입니다.
독일어 문자 ß 를 서수(이진) 방식과 고정 문화권 방식으로 비교를 하면 다른 결과가 나옵니다.
문자열 ss와 독일어 문자 ß 를 서수(이진) 방식으로 비교를 하면 서로 다른 값이므로 False가 출력됩니다.
고정 문화권 방식으로 비교를 하면, 독일어 문자 ß 를 영어로 변환하여 비교하므로 동일한 값이므로 True가 출력됩니다.
유니코드로 변환하여 출력된 값을 보면 서로 다른 값이라는 것을 확인할 수 있습니다.
메소드마다 기본 설정이 다르다.
String.IndexOf 메소드는 현재 문화권이 기본 값으로 설정되어 있지만,
String.Equals 메소드는 서수(이진)가 기본 값으로 설정되어 있습니다.
참고
StringComparison 열거형의 예제
https://www.meziantou.net/string-comparisons-are-harder-than-it-seems.htm
독일어 Wikipedia
https://en.wikipedia.org/wiki/%C3%9F
마무리
개발하면서 터키어랑 태국어를 사용할 일이 있을지 모르겠지만... 신기해서 정리해봤습니다.
'C#' 카테고리의 다른 글
[C#]DataTable 최대, 최소, 합계, 평균값 구하기 (0) | 2021.08.07 |
---|---|
[C#]DataTable 컬럼(Column) 삭제 방법 (0) | 2021.08.07 |
[C#]DataTable 복사(Copy)와 복제(Clone) 방법 (0) | 2021.07.27 |
[C#]DataTable에 컬럼(Column) 추가하는 방법 (0) | 2021.07.26 |
[C#]DataTable에 행(Row) 추가하는 방법 (1) | 2021.07.26 |
댓글