C++ 과 C# 의 언어의 탄생 배경과 시기가 완전히 다른 만큼
다른 점을 찾는다면 한 없이 많이 나올 것만 같습니다.
게다가 C# 은 지금도 한창 발전 중인 언어 중 하나이니까요.
C#
을 쓰면서 대표적으로 신선하거나 재밌다.. 라고 생각 되었던 부분만 적어봅니다.
1. C# 에서는 클래스의 선언(declaration)이 필요 없다.
따라서 헤더도 필요 없어지고 C++ 에서 참 귀찮게 만드는 의존성 문제도 간단해졌죠.
이거야 뭐.. 자바와 거의 똑같으니 신선한 부분은 아니네요.
2. 클래스를 분산해서 정의(definition) 할 수 있습니다. partial class 라는 개념이죠.
A_1.cs
partial public class A
{
public void TestA() { }
}
A_2.cs
partial public class A
{
public void TestB() { }
}
프로젝트엣 A_1.cs 파일만 가지고 있을 경우에는 클래스 A의 메소드는 TestA 만 나타나게 되고 A_2.cs 파일만 가지고 이을 경우에는 TestB 만 나타나게 됩니다.
A_1.cs 와 A_2.cs 둘다 프로젝트에 포함되어 있으면 TestA 와 TestB 메소드 모두 사용할 수 있게됩니다.
asp.net 사이트를 개발할 때 포스트백 페이지와 디자인 페이지의 컨트롤 공유를 위해서 .NET Framework 3.0 이전에는 포스트백 페이지에 자동생성된 코드가 들어가 있었는데
3.0 부터는 그 코드들이 사라졌죠.
그래서 변수 선언이 되어 있는 부분이 없는데 포스트백 페이지에서 디자인 페이지의 컨트롤을 어떻게 바로 사용할까? 라는 궁금증이 있었는데 여기에 사용된게 바로 partial 클래스입니다.
3. extension methods 지원
C# 에서 기본적으로 지원하는 배열이나 맵 등의 컨테이너는 기본적으로는 지원하는 메소드가 많지 않습니다. 이때 linq 를 추가(import) 해보면 엄청나게 많은 메소드들이 추가되는 것을 볼 수 있습니다. 이 모든게 확장 함수를 통해 컨테이너에 편리한 함수들을 추가적으로 지원하게 한 것입니다.
아래처럼 static 클래스에 static 함수를 추가하고 첫 번째 인자로 확장함수를 적용할 타입을 적어놓습니다. 실제로 만들어진 확장함수는 첫 번째 파라메터를 제외한 형태로 나타납니다.
string 은 기본형인데 아래처럼 HasSpace 라는 메소드를 추가해 봅니다.
static class ExtClass
{
public static boolean HasSpace(this string s)
{ return 빈 공간이 있는냐?! }
}
{
public static boolean HasSpace(this string s)
{ return 빈 공간이 있는냐?! }
}
실제 코드에서 아래와 같이 사용이 가능해 집니다.
string s = new string("I have two!");
if (s.HasSpace())
{ 불라불라... }
if (s.HasSpace())
{ 불라불라... }
써보고 보니 이정도가 가장 인상 깊었던 것 같습니다 'ㅁ'
마지막으로 한가지 더 이야기 하자면 LINQ(Language Integrated Query) 가 있겠는데..
귀찮은 관계로 다음에 써야겠어요;;





