원문은 이곳에서 보실수 있습니다.
C# ""이 String.Empty보다 나은가?
나는 최근에 ""이 String.Empty보다 나은지에 대한 논쟁의 글을 읽었다.
이 논쟁은, string.Empty는 모든 상황에서 작동하지 않기때문에, 이것을 사용해서는 안된다라는 것이다. 그는 컴파일러는 string.Empty를 사용한 코드를 최적화 시키지 못하기 때문에, 최적화의 부족으로 성능의 이득을 얻지 못지 못할 것이라고 주장하는데, 이는 반드시 string.Empty를 사용하지 않아도 된다라는 주장을 더 지지해준다.
그렇다면 이게 무슨 가치가 있는가?
첫번째, 그가 String.Empty가 발생하는 성능저하를 측정했다는 것이 인상적이다. 나는 그의 비교문안에서의 String.Empty사용에 대한 평가는 오직 String.Empty를 사용하지 않았을 때에만 초점이 맞춰져 있는것 같다고 생각한다.
그러나, 그는 String.Empty를 사용하지 않는 것에 대한 가치를 간과한 것처럼 보인다. 확실히, 마이크로소프트가 생각없이 이것을 두지는 않았을 것이다.
자 그럼, 우리의 코드에서 String.Empty보다 ""를 사용할 때 무슨 일이 일어나는지 평가해보자.
실제 상황의 최적화를 고려하라.
참조 글에서, 그는 String.Empty보다 ""이 빠르다는 것을 오직 한 가지 경우에 대해서만 증명 했는데, 코드를 최적화될 수 있는 반복문에 넣음으로써 증명했다.
if (string.Empty == null) { throw new Exception(); }
if ("" == null) { throw new Exception(); }
그러나 만약 코드가 최적화 되지 않는 곳은 어떨까?
String s = String.Empty;
String x = "";
나의 테스트에서는, 눈에 띌말한 차이는 없었다. 가끔씩, string.Empty는 더 빨랐고, 어떤때는 ""이 더 빨랐다. 나는 이같이 비슷한 결과가 나온 이유를 컴파일러가 대입문을 최적화했기때문이라고 예상한다.
실제 상황에서도, 나는 String.Empty는 단지 아주 약간 더 오래걸릴 것이라고 예상한다. 그러나 이 정도로는 논쟁에 대한 주제로써 부족한 감이 있다.
문자열 비교 비용을 고려하라
둘째로, 문자열 비교는 .NET언어를 포함해서 내가 지금 껏 작업 작업한 모든 언어에서 값비싼 비용으로 악명이 높다. 비교문에서 String.Empty를 사용하지 말자라는 논쟁 대신에, 비교문에서 문자열을 사용하는 것은 우리가 사용할 수 있는 마지막 대안이라는 논쟁이 더 나은 것 같다.
예를 들어, ""에 대해서 평가하는 할 때, 당신은 문자열 그 자체를 비교하는 것 보다 문자열의 길이를 비교할 것이다. 다른 문자열에 대해서는, 문자열의 첫 번째 문자를 비교할 것이다.
코드를 작성하는 것은 문제를 해결하는 것이다
나의 커리어를 시작했을 때, 컴퓨터는 느렸고, 메모리의 제한이 있었다. 가장 효율적인 방법으로 가장 적은 양의 코드를 작성하는 것이 어플리케이션을 작성하는 것에 절반을 차지 했었다.
오늘날, 이들은 어떤 주요 사안이 되지 않는다. 첫 번째 관심사는 작동하는 어플리케이션을 작성하는 것이다. 일단 원하는 대로 작동하고나서 성능 문제가 있다면, 우리는 성능 문제가 어디에서 발생했는지 코드를 검사한 후, 그 다음에 성능 개선을 위해 코드를 최적화 한다.
일반적으로, String.Empty는 ""보다 더 낫다. String.Empty가 작동하지 않는 경우에는, 코드 평가 때문이거나, 아니면 성능 고려 때문인데, 이때는 대신에 ""를 사용해라.
그렇지 않다면 String.Empty를 사용해라. 더 빠른 코드를 생산해서가 아니라 지지할만한 이유가 있기 때문이다.
사실 당신의 코드가 성능 문제를 가진다면, 이 이슈는 마지막 부분으로 봐야할 부분 생각한다. 당신은 무시해도 될만한 이득을 얻었다.
당신의 파일 입출력에서의 실질적인 문제는 데이터베이스 접근과 네트워크 접근일 것이다.
당신의 파일 입출력에서의 실질적인 문제는 데이터베이스 접근과 네트워크 접근일 것이다.
'유니티 개발 정보 > 프로그래밍' 카테고리의 다른 글
유니티에서 정적(static) 변수 사용하기 (4) | 2013.12.04 |
---|---|
유니티에서 Static IEnumerator 호출하기 (0) | 2013.12.03 |
C#의 Virtual과 Abstract 속성(Property)에 대해서 (0) | 2013.11.12 |
유니티에서 싱글톤을 만드는 4가지 방법 (4) | 2013.11.12 |
간단한 Observer Pattern for Unity 4.2 (3) | 2013.10.20 |