또레
String의 체크 본문
C#의 String을 활용하며, String이 비어있는지 혹은 값이 지정되어있지 않은지를 확인하고 싶을 때가 왕왕 있다.
(C++을 사용하는) 언리얼 환경에서는 std::string이 null일 수 없기 때문에(클래스 타입의 객체이기 때문에), 아래와 같이 빈 문자열인지 검사하는 메서드를 통해 확인거나 길이 자체를 검사하면 됐었다.
// myString is std::string
myString.Empty();
myString.length() == 0;
// myFString is FString
myFString.IsEmpty();
myFString.Length() == 0;
그러나 C#에서는 String이 참조타입이기 때문 (C++의 string*처럼)에 null이 될 수 있다. 따라서 null Check와 빈 문자열인지를 동시에 검사해야한다.
C#에서는 이를 string.IsNullOrEmpty(string str)과 string.IsNullOrWhiteSpace(string str)로 지원한다.
그렇다면 이 두 가지 메서드에는 어떤 차이가 있을까?
1. 도입 시기
IsNullOrEmpty(string str) 메서드는 .NET Framework 2.0에서부터의 모든 .NET 플랫폼에서 사용 가능하다.
IsNullOrWhiteSpace (string str) 메서드는 .NET Framework 4.0에서부터의 .NET 플랫폼에서 사용 가능하다.
2. 용도
둘 모두 매개 변수인 String이 null 혹은 "" 인지를 검사하는 것은 같으나, IsNullOrWhiteSpace() 메서드는 공백문자만으로 이루어진 문자열의 경우에도 true를 반환한다.
예를 들어보자면 아래와 같은 상황이 있다.
string myString1 = null;
string myString2 = string.Empty;
string myString3 = " ";
string myString4 = "my String";
이 때 IsNullOrEmpty의 결과는 아래와 같다.
string.IsNullOrEmpty(myString1); // True
string.IsNullOrEmpty(myString2); // True
string.IsNullOrEmpty(myString3); // False
string.IsNullOrEmpty(myString4); // False
IsNullOrEmpty는 공백을 문자로 인식하기 때문에 myString3을 빈 문자열로 판단하지 않은 것이다. 만약 이러한 문자도 비었다고 판단하는 코드를 짜는 경우에는(비밀번호 입력 등) myString.Trim() 등의 메서드를 활용해야만 했다.
이번엔 IsNullOrWhiteSpace의 결과를 확인해보자.
string.IsNullOrWhiteSpace(myString1); // True
string.IsNullOrWhiteSpace(myString2); // True
string.IsNullOrWhiteSpace(myString3); // True
string.IsNullOrWhiteSpace(myString4); // False
IsNullOrWhiteSpace는 공백(스페이스, 탭, 개행)만 있는 경우 또한 True를 반환한다. IsNullOrEmpty만으로는 확인할 수 없는 String을 검사할 수 있게 된 것이다.
결론
최신 환경의 .NET에서라면 IsNullOrWhiteSpace와 IsNullOrEmpty를 취사선택하여 사용하면 된다.
다만 공백 문자를 문자로 취급해야하는 경우가 있을 수도 있으니, 상황에 맞추어 사용하면 될 것이다.