Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- .net
- 게으름
- 구글
- 실버라이트
- 형태소분석기
- Ajax
- C#
- 리팩토링
- JavaScript
- ASP.NET
- XML
- 해킹
- Web 2.0
- 실버라이트2
- 자바스크립트
- silverlight
- GTD
- 암호화
- 검색
- 개발자
- GDI+
- WEb 2.0 Expo
- MS
- 백신
- jQuery
- hnd-7070
- Sliverlight
- 성공
- COM+
- 전기차
Archives
- Today
- Total
꿈으로 가는 작은 계단
문자열 비교 - 팁 본문
유경상님에 문자열 비교 팁
출처 : 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 |