위키편집: CSharpCoding
\cat CsReference 참여자: uskusi =! C# Coding TOC 틈나는 대로 C#다운 코딩은 무엇인가에 대해서 정리합니다. Tip&Tech 의 성격을 지닌 페이지입니다. 머리를 식힐겸 한번씩 보면서 아는것을 정리해나가도록 합니다. = Performance 1. 문자열비교는 쓸데 없는 작업을 많이 하게 된다. 만약 문자열이 비어있는지 검사하는 경우에는 length property 를 쓰는것이 좋다. --bcode-- // not recommended if (str != "") // 이것이 C나 PHP에서 쓰던 전통적인 방식이다. C# 에서는 이 방법대신 length method를 사용할 것을 권유한다. // recommended if (str.length > 0) --ecode-- ___ 2. 1번과 연계되는 내용으로서 문자열이 일치하는지 확인할때 Equals 메서드를 사용한다. --bcode-- String str1 = "str1"; String str2 = "str2"; // not recommended if (str1 == str2) { code } // 이것이 C나 PHP에서 쓰던 전통적인 방식이다. C# 에서는 이 방법대신 Equals Method를 사용할 것을 권유한다. // recommended if (str1.Equals(str2)) { code } --ecode-- ___ 3. C#의 문자열은 원칙적으로 변경 불가능하다. 변경명령을 받을때는 Heap 내의 새로운 영역에 메모리를 확보하고 변경, 할당후에 해당 변수의 해시코드를 변경하는 작업이 이루어진다. 만약 문자열을 변경하려고 한다면, - 프로그래머 입장에서 볼때는 쓸데없는 메모리를 사용하게 된다. - 원래 문자열이 있던 메모리는 다시 (자동으로)반환되어야 하므로 GC 가 하는일이 많아진다. - 당연히 부하가 많아지고 느려진다. - 따라서 StringBuilder를 사용하는 편이 낫다.(고는 하지만 몇가지 논란이 있다. 마지막에 다루기로 한다.) --bcode-- // not recommended String str; str = "This is a string."; str = str + " This is an appended string."; // 또는 str += " This is an appended string."; --ecode-- 이것이 C나 PHP에서 쓰던 전통적인 방식이다. --bcode-- // recommended StringBuilder str = new StringBuilder("This is a string."); str.Append(" This is an appended string."); --ecode-- 일반적인 경우에 아래 소스에서 Overhead가 덜 걸린다. StringBuilder는 버퍼를 미리 잡아놓고 시작하기 때문에 문자열 연결과 같은 작업이 일어날 때 빈공간에 바로 투입할 수 있고, 메모리를 새로 Allocate하고 복사하는등의 불필요한 작업을 하지 않는다. StringBuilder 클래스를 살펴보면 int capacity 를 매개변수로 받는 오버라이딩 메서드가 있는데 이것이 버퍼의 크기를 잡아주는 역할을 한다. 버퍼의 크기를 너무 적게 잡으면 string 이 하는짓을 그대로 반복할 것이고, 버퍼의 크기를 너무 크게 잡으면 메모리의 낭비를 초래한다. 적절히 capacity 값을 조절해 주면서 쓰는것이 옳다. = 토론 C#에서 권장하는 표준코딩을 설명하는 챕터이니만큼 자주 보게 될 것입니다. 권장하는 각 코드에 대한 출처를 알 수 있으면 좋겠습니다. 예를 들어 Equals() 메서드 사용의 경우 속도면에서 이것을 권장하는 것인지 아니면 다른 무슨 이유가 있는 것인지 궁금한데 원출처를 알면 더 자세한 이유를 알 수 있겠지요. -- HuidaeCho
. 업로드
.
취소