C# 언어의 정체성을 표현해주는듯한 Code

image

개인적인 견해라 다를수도 있습니다.

Generic 형식의 Interface 그리고 제약조건 까지

여러모로 특징을 잘말해주고 교과서적인 Code 같습니다.

7개의 좋아요

IReadOnlyRepository<T> 가 없는게 아쉽네요

4개의 좋아요

동의합니다. ㅎㅎ

올려주신 코드에서도 C#의 특색이 제법 느껴지고요, 여기에 더해 개인적으로 “아 이건 명백히 C#이다” 라고 생각이 드는 코드 조각이 몇 개 더 생각나서 추가로 올려봅니다. ㅎㅎ

일단 C# 1.0때부터 함께하던 포인터는 당시 Java와 비교당하면서 놀림받던 시절부터 달랐던 부분이고요

unsafe {
	const int length = 10;
	Char *pArray = stackalloc Char[length];
	for (int i = 0; i < length; i++) {
		*(pArray + i) = (Char)((int)'a' + i);
	}
	Console.Out.WriteLine(new string(pArray));
}

LINQ야 말할 것도 없지요!

var oddNumbers =
	from n in Enumerable.Range(0, 10)
	where n % 2 != 0
	select n;
Console.WriteLine($"Odd numbers: {string.Join(", ", oddNumbers)}");

그리고 요즈음 C#에서 매우 많은 비중을 차지하는 Extension 메서드도 C# 다운 코드의 한 예시라고 할 수 있겠고요. (애플리케이션 빌더 코드에서 각종 Add~나 Use~ 함수들을 따로 네임스페이스를 지정하지 않고도 쉽게 사용할 수 있게 된 이유가, 모두가 네임스페이스를 하나로 맞추어 Extension 메서드를 담은 클래스를 선언해두었기 때문입니다.)

var a = "aaaa".EnsureNotNullOrWhiteSpace();
Console.WriteLine(a);

public static class Extensions {
	public static string EnsureNotNullOrWhiteSpace(this string s)
		=> string.IsNullOrWhiteSpace(s) ? throw new ArgumentException("The string is null reference or whitespace.", nameof(s)) : s;
}

그리고 Visual Studio .NET 2002 ~ 2003 시절에 C#이 처음 데뷔했을 때는 partial 키워드가 없었던 관계로 Windows Forms 디자이너에서 개발자가 작성하는 코드와 디자이너 코드가 한집 살림하던 시기도 있었는데, 당시에는 Roslyn 같은 파서가 있었던 것도 아니었던지라 디자이너 코드와 개발자 이벤트 핸들러 코드가 충돌해서 대환장 파티가 벌어지곤 했는데, partial 키워드 덕에 디자이너 툴과 코드 영역이 깔끔하게 분리될 수 있었습니다. 이것도 다른 프로그래밍 언어들이랑은 구별되는 역사적인 차이점이죠.

ASP.NET Web Form의 경우에는 이런 방법 대신 “상속” 개념을 써서 당시에 문제를 피했지만, 비효율적인 코드가 생성되곤 했었고요! 디자이너 측 클래스가 상위 클래스였는지 코드 비하인드쪽 클래스가 상위 클래스였는지는 너무 오래전이라 기억이 잘 나지 않네요!

이외에도 record 타입도 있고, Action<T...>Func<T...> 대리자 시리즈 타입도 빼놓을 수 없죠 ㅎㅎ

11개의 좋아요