티스토리 뷰
목차
C# 코드 최적화 7가지 (작업 속도와 효율성 향상)
코드 최적화란 모든 개발자에게 중요한 측면입니다. 이 포스트에서 소개할 여러 팁은 작업 속도와 효율성을 향상해 더 나은 응용 프로그램을 제작할 수 있도록 도울 것입니다. 상용 메모리 관리 툴들은 최적화가 진행 된 응용 프로그램 코드의 질을 더 좋게 평가할 것이며, 메모리 관리 측면에서도 더 나은 결과를 유추할 수 있습니다.
작업 시간도 아낄 수 있으며, 유지 보수 비용도 절약할 수 있는 코드 최적화는 반드시 진행해야 할 사항입니다. 고민하지 말고 무조건 최적화를 하세요. 이 포스트가 그것을 돕습니다.
? 조건 연산자를 사용하세요
?를 사용하는 것은 전혀 새로운 것이 아니고, 잘만 사용하면 오히려 더 편리합니다.
아마도 ? 연산자는 브라이언 케니건(Brian Kernighan)과 데니스 리치(Dennis Ritchie)가 지은 "The C Programming Language"란 책에서 맨 처음 소개된 것이라 생각이 듭니다.
어쨌건, ?를 사용하면 일반적인 패턴의 압축이 가능하여 코드 최적화가 됩니다.
1 2 3 4 5 6 7 8 | int x = 10; int y = 20; int max; if (x > y) max = x; else max = y; | cs |
이곳에 ? 연산자를 적용해서 새로 작성해 압축할 수 있습니다.
1 2 3 | int x = 10; int y = 20; int max = (x > y) ? x : y; | cs |
[Visual Studio 최적화] C# 속도 성능 튜닝
Null-Coalesce operator (??)
Null을 위한 중복 연산자, 겹쳐진 연산자 등으로 해석 할 수 있는데, 과연 프로그래머들이 Null을 위한 테스트를 얼마나 할까요? 만약 Null을 테스트할 경우 이 연산자는 꽤 편합니다.
다음의 코드 최적화 소스 예제를 참고해서 살펴보면,
1 2 3 4 5 6 7 8 | object cache = null; object d = new object(); object e; if (c != null) e = c; else e = d; | cs |
우선, 한개의 ? 키워드를 사용해서 코드 재작성이 가능합니다. 그리고, ??를 두 개 사용하면 더 축약 할 수 있습니다.
1 2 3 | object cache = null; object d = new object(); object e = (c != null) ? c : d; | cs |
그리고, ??를 두 개 사용하면 더 축약이 가능해 집니다.
1 2 3 | object cache = null; object d = new object(); object e = c ?? d; | cs |
객체 초기화
새 오브젝트를 생성하면 내부의 속성 중 하나 이상에 값을 할당해야 합니다.
C# 3.0 이후에는 가독성 향상과 코드 단축을 위해 개체 자체의 초기화가 가능해졌습니다.
1 2 3 | Customer c = new Customer(); c.Name = "James"; c.Address = "204 Lime Street"; | cs |
이와 같은 소스를 한 줄로 코드 최적화 압축할 수 있습니다.
1 2 3 4 5 | Customer c = new Customer { Name="James", Address = "204 Lime Street" }; | cs |
[Visual Studio 최적화] C# 속도 성능 튜닝
The using statement
자주 글꼴, 파일 핸들, 네트워크 리소스 등을 위해 시스템 자원을 사용합니다.
이런 리소스 등을 사용할 때 (Resource, You use it, dispose - 리소스, 할당 후 사용과 해제)란 중요한 점이 있지만, 메모리나 낭비되는 리소스들을 위한 Dispose 작업은 다들 잊어버립니다.
1 2 3 4 5 6 7 8 9 10 | // 1. Allocation of the object Font font1 = new Font("Arial", 10.0f); try{ // 2. The bit where we use the resource }finally{ // 3. Disposal of the object if (font1 != null) ((IDisposable)font1).Dispose(); } | cs |
그래서 Using 문을 사용해 코드를 축약합니다.
1 2 3 4 5 6 | // Allocate the resource using(Font font1 = new Font("Arial", 10.0f)) { // The bit where we use the resource } // Disposal is automatic | cs |
using문은 실제 자원을 할당하고 관리하는 .NET 개체인데, "IDisposable" 인터페이스를 구현해 리소스 관리가 가능해 위와 같이 선언만 해놓으면 저절로 자원 관리가 되어 코드 최적화가 됩니다.
긴 이름의 네임스페이스와 타입의 별칭 붙이기
식별자나 별칭은 오랫동안 파일, 클래스, namespace 등을 대표하는 "이름"으로 작용이 될 수 있습니다. 이것을 이용해서 쉽게 접근, 수정, 열기 등의 작업을 할 수 있습니다.
1 2 3 4 5 6 | using Word = Microsoft.Office.Interop.Word; ...Word.Application = new Word.Application() { Visible = True; } | cs |
Nullable objects
변수는 값을 가지고 있어야 하고, 비어있으면 안 됩니다. 때에 따라 비어야 할 때도 있고, 정의되지 않았을 경우 null을 할당하는 것이 편하기도 하며, .NET 2.0에서부터 Nullable을 도입했습니다.
사용 예는 아래와 같습니다.
1 2 | Nullable<int> x = null; int? x = null; | cs |
변수를 정의한 다음 ?를 넣고, 타입은 Nullable로 감싸서 사용합니다.
[Visual Studio 최적화] C# 속도 성능 튜닝
Automatic Properties
속성은 일반적으로 Getter과 Setter로 외부에 노출이 되고, 이를 이용해 값들을 할당합니다.
1 2 3 4 5 6 7 8 9 | public class Person { private string _firstName; public string FirstName; { get { return _firstName; } set { _firstName = value; } } } | cs |
C# 3.0에서부터 자동 속성이 추가되어, 아래처럼 코드 최적화 방법을 사용할 수 있습니다.
1 2 3 4 5 6 7 8 | public class Person { public string Firstname { get; set; } } | cs |
C#의 컴파일러는 자동으로 백업되는 변수를 생성, 올바른 설정, 속성 설정 등을 수행하기 때문에, Public 클래스 대신에 String 변수를 생성할 수 있습니다.
출처 1 - 10 C# Shorthands that improve productivity (링크 깨짐)
출처 2 - 7 Ways To Optimize C# Code
C# 코드 최적화 7가지 (작업 속도와 효율성 향상)