C#

[C#]StringComparison 열거형

DevStory 2021. 8. 1.

C#에서 문자열 관련 메소드를 사용하다 보면, 마주치게 되는 게 StringComparison 열거형입니다.

 

StringComparison 열거형은 대부분 책에서도 자세하게 설명을 하지 않고 공식 문서에서는 내용 자체는 어렵지 않지만, 번역 때문에 이해하기가 어렵습니다.

 

이번 기회에 StringComparison 열거형에 대해 정리합니다.


StringComparison 열거형

StringComparison 열거형은 문자열 검색 및 비교하는 메소드에서 검색 규칙을 설정하는 기능입니다.


열거형 필드

필드 설명
CurrentCulture 문화권 구분 정렬 규칙 및 현재 문화권을 사용하여 문자열을 비교합니다.
CurrentCultureIgnoreCase 문화권 구분 정렬 규칙 및 현재 문화권을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다.
InvariantCulture 문화권 구분 정렬 규칙 및 고정 문화권을 사용하여 문자열을 비교합니다.
InvariantCultureIgnoreCase 문화권 구분 정렬 규칙 및 고정 문화권을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다.
Ordinal 서수(이진) 정렬 규칙을 사용하여 문자열을 비교합니다.
암화와 같은 대소문자를 구분하는 리소스를 비교할 때 적합합니다.
OrdinalIgnoreCase 서수(이진) 정렬 규칙을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다.
경로 및 파일 이름과 같은 리소스를 비교할 때 적합합니다.

설명은 공식 사이트를 참고하여 작성하였는데, 설명에서 말하는 현재 문화권, 고정 문화권등.. 이해하기 어려운 용어들이 나옵니다. 위 설명에서 작성한 용어들에 대해 정리하였습니다.


용어 정리

현재 문화권

- 현재 지역에 따라 문자열을 설정하여 비교합니다.

- 소프트웨어가 실행되는 위치에 따라 다르게 비교될 수 있습니다.

 

고정 문화권

- 기본적으로 영어로 설정되어 있습니다.

- 소프트웨어가 실행 되는 위치와 무관하게 영어로 비교합니다.

 

서수(이진)

- 유니코드 값을 기반으로 비교합니다.


사용 방법 및 예시

독일어 문자 ßss로 사용할 수 있습니다. 아래 Wikipedia에 들어가셔서 Ctrl + F 단축키로 ss 를 검색하면 ß 도 검색됩니다.

https://en.wikipedia.org/wiki/%C3%9F

 

ß - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Letter of the Latin alphabet; used in German This article is about the German eszett. For the Greek letter that looks similar, see Beta. For the Chinese radical, see 阝. Not to be con

en.wikipedia.org

왜 검색이 되는 걸까?

독일어 문자 ß 는 영어로 변환하면, ss와 동일하기 때문입니다.

 

독일어 문자 ß 를 서수(이진) 방식고정 문화권 방식으로 비교를 하면 다른 결과가 나옵니다.

문자열 ss와 독일어 문자 ß 를 서수(이진) 방식으로 비교를 하면 서로 다른 값이므로 False가 출력됩니다.

고정 문화권 방식으로 비교를 하면, 독일어 문자 ß 를 영어로 변환하여 비교하므로 동일한 값이므로 True가 출력됩니다.

 

유니코드로 변환하여 출력된 값을 보면 서로 다른 값이라는 것을 확인할 수 있습니다.


메소드마다 기본 설정이 다르다.

String.IndexOf 메소드는 현재 문화권이 기본 값으로 설정되어 있지만,

String.Equals 메소드는 서수(이진)가 기본 값으로 설정되어 있습니다.


참고

StringComparison 열거형의 예제

https://www.meziantou.net/string-comparisons-are-harder-than-it-seems.htm

 

String comparisons are harder than it seems - Gérald Barré

Comparing strings is different from comparing numbers. 2 numbers are equal if their values are identical. For instance, 1 is equal to 1, and 1 is not equal to 2. That's trivial. When it comes to strings, things are different. For instance, do you want a ca

www.meziantou.net

 

독일어 Wikipedia

https://en.wikipedia.org/wiki/%C3%9F

 

ß - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Letter of the Latin alphabet; used in German This article is about the German eszett. For the Greek letter that looks similar, see Beta. For the Chinese radical, see 阝. Not to be con

en.wikipedia.org


마무리

개발하면서 터키어랑 태국어를 사용할 일이 있을지 모르겠지만... 신기해서 정리해봤습니다.

반응형

댓글