유경상님에 문자열 비교 팁
출처 : http://www.simpleisbest.net/archive/2005/06/08/158.aspx
Tip about String Compare
문자열 비교에서 팁 하나를 소개하고자 한다. 문자열을 비교할 때 효율성을 고려해야 할 것이 한두 가지가 아닐 것이지만 흔히 지나치는 것 중 하나가 대소문자 구별 없이 비교를 하는 경우이다. 기본적으로 String.Equals 메소드는 대소문자를 구별하여 비교를 수행한다. 그리고 VB.NET 에서 = 연산자를 이용하여 문자열 비교를 하는 경우도 마찬가지다. 이 때문에 대소문자에 관계 없이 문자열을 비교하고자 할 때 흔히 사용하는 방법은 비교 대상을 모두 대문자로 바꾸거나 모두 소문자로 바꾸어 비교하곤 한다.
// 대소문자에 관계없는 문자열 비교 C# 코드 예제
if (s1.ToUpper() == s2.ToUpper()) {
// 동일한 문자열
}
else {
// 동일하지 않은 문자열
}
if (s1.ToUpper() == s2.ToUpper()) {
// 동일한 문자열
}
else {
// 동일하지 않은 문자열
}
위 코드는 잘 작동하지만 효율적이라고 볼 수 없다. 왜냐면 ToUpper() 메쏘드 호출은 대문자로 변경된 새로운 문자열 객체를 반환한다는 점이다. 문자열은 변경되지 않는 immutable 임을 잊지 말자. 따라서 위 코드는 불필요하게 문자열 객체 2개를 만들어 내며 이 문자열 객체는 곧바로 GC 의 대상이 되는 쓰레기로 전락한다.
보다 효율적인 것은 String.Compare 메쏘드를 사용하는 것이다. 이 메쏘드는 비교 옵션을 매개변수로 취할 수 있다. 이 옵션 중에 IgnoreCase 옵션을 사용하면 대문자/소문자에 관계 없이 비교를 해준다. 물론 앞서의 예제처럼 불필요한 문자열 객체를 생성하는 일은 없다.
// 보다 효율적인 코드 예제
if (String.Compare(s1,s2, CompareOptions.IgnoreCase) == 0) {
// 동일한 문자열
}
else {
// 동일하지 않은 문자열
}
if (String.Compare(s1,s2, CompareOptions.IgnoreCase) == 0) {
// 동일한 문자열
}
else {
// 동일하지 않은 문자열
}
출처 : http://www.simpleisbest.net/archive/2005/06/08/158.aspx
'소프트웨어 > C# & ASP.NET' 카테고리의 다른 글
잉여들을 위한 클래스설계 이야기 1/4 (0) | 2009.12.11 |
---|---|
Data Access Application Block (0) | 2009.12.09 |
C# 프로그래밍 도구 (0) | 2009.12.03 |
Windows Mobile in C# 강좌 Lab 2 - GPS 사용법(2) (0) | 2009.11.26 |
c# 개념잡기 - Generic (0) | 2009.11.25 |