파란매
#1
앞으로 가끔씩 TimCorey 아저씨의 강좌를 한개씩 스터디 해볼까 합니다.
단 제가 실력이 미천해서 제대로 이해 못했을수도 있고 비정기적이고
언제 그만둘지도 모릅니다 ^^;
오늘 주제
“문자열을 올바르게 초기화하려면 어떻게 해야 할까요? null, string.Empty, 빈 따옴표 또는 기본값이어야 할까요? 이 주제에 대해 꽤 많은 혼란이 있으므로 다양한 옵션을 살펴 보겠습니다.”
출처 : Correct String Initialization in C# - YouTube
string? test1 = null;
string? test2 = default;
string? test3 = string.Empty;
string? test4 = "";
Console.WriteLine(test1);
Console.WriteLine(test2);
Console.WriteLine(test3);
Console.WriteLine(test4);
문자열의 초기화 방법은 현재 기준으로 이렇게 4가지 방법이 있다고 합니다.
실행결과입니다.

당연히 빈문자열이 나오지만
null 체크를 해보면
Console.WriteLine(test1==null?"Null":"Value");
Console.WriteLine(test2 == null ? "Null" : "Value");
Console.WriteLine(test3 == null ? "Null" : "Value");
Console.WriteLine(test4 == null ? "Null" : "Value");

이렇게
null,default 는 null 이고
string.empty, “” 는 값이 들어있습니다.
짧은 tip 같은 강좌라 뭐가 옮다 틀리다는 언급하지 않았지만
timcorey 님은 “” 선호한다고 하십니다.
강의 마지막에도 시청자들에게 선호하는 초기화 방법을 물어보셨습니다.
5개의 좋아요
저는 string.Empty 를 선호합니다.
string? 으로 선언하지 않아도 되고, static 이라 생성 단계도 생략되고, 무엇보다 GC가 호출되지 않아서입니다.
1개의 좋아요
dimohy
#3
강좌 감사합니다! ^^
저는 ""을 선호하는 편입니다. 물론 Empty 패턴은 다른 곳에서도 왕왕 사용되므로 내가 만들어서 사용할 때는 IHaveEmpty
라는 인터페이스를 정의한 후 Empty를 사용하기도 합니다.
var mypet = new MyPet();
mypet.Print();
mypet.Animal = new Animal(AnimalKind.Dog, "CoCo");
mypet.Print();
class MyPet
{
public Animal Animal { get; set; } = Animal.Empty;
public void Print()
{
if (Animal.Kind is AnimalKind.Unselected)
Console.WriteLine("No Pets.");
else
Console.WriteLine($"I have a {Animal.Kind} named '{Animal.Name}'.");
}
}
interface IHaveEmpty<T>
{
static abstract T Empty { get; }
}
record Animal : IHaveEmpty<Animal>
{
public static Animal Empty { get; } = new Animal(AnimalKind.Unselected, "");
public AnimalKind Kind { get; }
public string Name { get; }
public Animal(AnimalKind kind, string name)
{
Kind = kind;
Name = name;
}
}
enum AnimalKind
{
Unselected,
Dog,
Cat,
Pig
}
| 출력
No Pets.
I have a Dog named 'CoCo'.
1개의 좋아요
자마린
#4
string.empty나 ""는 기능상의 차이가 아니라 개발자의 의도를 표현하는 방법이라고 봐야겠죠.
즉, 3자 입장에서 코드 중간에서 string.empty와 ""를 보게됐을때의 혼란을 줄이기 위한 방법이죠.
test3 = string.Empty; // 개발자가 빈 값을 설정했구나
test4 = “”; // 빈 값을 설정한거야? 아니면 깜빡하고 값을 빼먹은거야?
4개의 좋아요
저는 if문을 어떻게 쓸것인가에 초점을 두는 편이라…ㅎㅎ
- str == “”
- string.IsNullOrWhiteSpace(str)
둘 중에 간편한걸 고민하다가 언제부턴가 Extension 하나 만들어서
if(str.IsEmpty())
이렇게 쓰기로 쇼부봤습니다^^;
2개의 좋아요