코드를 작성할 때 자주 사용되는 표현 방식을 관용구라고 한다.

코드를 효율적으로 작성하기 위한 방법들..


초기화

- 배열, 리스트, 딕셔너리, 객체 초기화

설정할 값이 이미 정해져있으면 초기화 구문을 사용

1
2
3
4
5
6
7
8
var langs = new string[] { "C#""VB""C++" };
var nums = new List<int> { 10203040 };
var dict = new Dictionary<stringstring>
{
    ["ko"= "한국어",
    ["en"= "영어",
    ["es"= "스페인어",
};
cs


초기화 구문을 사용하면 추후에 중간값을 삽입할때도 편하게 삽입가능.


1
2
3
langs[0= "C#";
langs[1= "VB";
langs[2= "C++";
cs


위처럼 사용하면 코드도 길어지고 수정하기에 일이 많아진다.




비교

- 단순비교

1
if (age <= 10)
cs

변수를 왼쪽으로


- 범위비교

1
if (5 <= age && age <= 10)
cs

변수가 min, max값 사이로 오게




bool값

- 판단

1
if (num.HasValue)
cs

num.HasValue == true 처럼 다시 확인하지말자.


- 리턴

1
return a==b;
cs

마찬가지로 if(a==b) return true; 이런식으로 길게 적을 필요가 없다.




반복

- 반복할 횟수를 알면 for, 모르면 while


- 컬렉션 요소를 모두 반복할때

LINQ, foreach, for 순서로 적용하자.


- List<T>의 모든요소처리

List<T>의 ForEach를 사용하되 

2줄이상의 긴코드 or break,continue가 필요하다면 foreach를 쓰자




연산자

- 조건연산자(삼항연산자)를 쓰자.

1
var num = list.Contains(key)? 1 : 0;
cs

조건이 참이면 ? 다음의 값. 

거짓이면 : 다음의 값이 리턴된다.


- null 합체 연산자(??)를 쓰자.

1
var message = GetMessage(code) ?? DefaultMessage();
cs

null이 아니면 ?? 앞의 값이 그냥 들어가고.

null이면 ?? 뒤의 값이 들어간다.


- null 조건 연산자(?.)를 쓰자.

1
return sale?.Product;
cs

sale이 null이 아니면 Product값이 null이면 null이 리턴된다.


1
var first = customers?[0];
cs

배열도 마찬가지로 null이 아닐경우에만 [0]이 들어간다.


- 합체연산자와 조건연산자를 같이쓰는 케이스

1
2
var product = GetProduct(id);
var name = product?.Name ?? DefaultName;
cs

product가 null이면 DefaultName.

아니면 product.Name이 들어갈 것




읽기전용 속성

1
2
3
4
5
6
7
8
public string FamilyName { get; private set; }
public string Name
{
    get
    {
        return FamilyName + "hi";
    }
}
cs

프로퍼티는 private set을 이용하자.

수정할 일이 전혀 없을 경우에는 get만 사용하자.


string을 제외한 참조형이라면 IReadOnlyList<int>나 IEnumerable<int> 등을 사용하자.




가변 인수

가변인수를 받는 메서드를 정의할 경우 params 키워드를 사용한다.

1
public double Median(params double[] args)
cs




옵션인수

오버로드보다는 옵션인수를 사용한다.

1
private void DoSomething(int num, string message = "실패")
cs




축자 문자열 리터럴

파일경로에는 @를 사용하면 \를 하나만 써도 인식한다.

안 쓰면 일반 문자열로 인식되어 \\를 써야한다.




문자열을 숫자로 변환

1
if (int.TryParse(str, out height))
cs

문자열이 숫자라는 보장이 있다면 int.Parse(str)를 사용해도 되지만

그렇지 않다면 TryParse를 사용하는 것이 좋다. 성공여부를 리턴한다.




참조형 형변환

1
var product = Session["My Product"as Product;
cs

as 연산자를 사용하자.

값형인 경우에만 형변환 연산자를 사용하자 (int)obj;




using을 사용해 리소스 정리

클래스 중에는 리소스를 정리하기 위해 Dispose 메서드를 호출해야하는 클래스가 있다.

IDisposable 인터페이스를 구현한 클래스로 파일, DB, 네트워크처럼 외부 자원에 접근하는 클래스가 대표적


using을 빠져나갈때 자동으로 Dispose 메서드가 호출되므로 using을 사용하자

IDisposable이 구현되어있지 않은 클래스에서는 사용불가능하다.


1
using (var stream = new StreamReader(filePath)) { }
cs




여러개의 생성자를 정의

생성자에서도 옵션인수를 사용할수 있다면 사용하고 그렇지 않다면

생성자 인수를 닫고 : this(...)라고 쓰면 본문 처리하기에 앞서 오버로드된 다른 생성자를 호출할 수 있다.

1
public AppVersion(int major, int minor) : this(major, minor, 0, o) { }
cs


'프로그래밍 공부 > C#' 카테고리의 다른 글

배열과 List<T>  (0) 2019.01.16
문자열 처리  (0) 2019.01.15
LINQ  (0) 2019.01.11
델리게이트와 람다식  (0) 2019.01.11
인터페이스에 대해 프로그래밍하기  (0) 2019.01.11
Posted by misty_
,