4.0 · 버전 이력

C# 4.0

부르는 쪽이 값을 덜 적어도 되게 바뀌었습니다.

2010 .NET Framework 4
한눈에

무엇이 더해졌나

C# 4.0은 2010년에 나왔습니다. 이 판이 겨눈 것은 부르는 쪽이 덜 적게 하는 것입니다. 메서드를 만드는 사람이 미리 정해 두면, 쓰는 사람은 필요한 것만 넘기면 됩니다.

  • 선택적 매개 변수 — 기본값을 정해 두고 넘기지 않아도 되게 합니다.
  • 이름을 적어 넘기기 — 자리를 건너뛰고 원하는 것만 짚습니다.
  • dynamic — 타입 검사를 실행할 때로 미룹니다.
선택적 매개 변수

같은 메서드를 여러 벌 만들지 않아도 됩니다

받는 값이 하나 늘 때마다 같은 이름의 메서드를 한 벌씩 더 만들어야 했습니다. 몸통이 거의 같은 코드가 여럿 생기고, 고칠 일이 있으면 모두 손봐야 했습니다.

C# 3 까지
void Draw(string text) {
    Draw(text, 10);
}

void Draw(string text, int width) {
    Draw(text, width, false);
}

void Draw(string text, int width,
          bool border) { }
C# 4 부터
void Draw(string text,
          int width = 10,
          bool border = false) { }

기본값이 있는 것은 뒤쪽에 모아야 합니다. 앞에 두면 값을 하나만 넘겼을 때 그것이 어느 자리인지 가릴 수 없기 때문입니다.

C# 1.8 메서드 기초 에서 자세히 다룹니다.

이름을 적어 넘기기

가운데를 건너뛰기

선택적 매개 변수가 여럿일 때, 뒤엣것만 바꾸려면 앞엣것을 기본값 그대로 다시 적어야 했습니다. 이름을 적으면 그 자리만 짚을 수 있습니다.

Draw("제목", 10, true);        // width 를 굳이 다시 적어야 했습니다
Draw("제목", border: true);      // 이제는 이렇게

읽는 쪽에도 이득이 있습니다. Draw("제목", 10, true) 만 보아서는 true 가 무엇인지 알 수 없지만, border: true 는 스스로 말합니다.

그 밖에

dynamic

dynamic 으로 적으면 타입 검사를 실행할 때까지 미룹니다. 컴파일러가 막아 주지 않으므로 틀리면 실행 중에 드러납니다. C#이 정적 타입을 뼈대로 삼는 언어인 만큼, 이것은 어쩔 수 없을 때 쓰는 문으로 마련된 것입니다.

dynamic value = 10;
value = "이제 문자열";      // 컴파일러가 막지 않습니다
value.NotExist();          // 실행할 때 예외

일상적인 코드에서는 쓸 일이 드뭅니다. 타입을 밝혀 두는 쪽이 거의 언제나 낫습니다.

배경
  • 이 판이 겨눈 것은 부르는 쪽의 수고를 더는 것입니다.
  • 선택적 매개 변수는 거의 같은 메서드가 여럿 생기던 문제를 풀었습니다.
  • 이름을 적어 넘기면 코드가 스스로 무엇인지 말합니다.