본문 바로가기

Developement

내가 C# 을 싫어 하는 이유.

- 읽으시기에 앞서 -
이 글은 저의 극히 개인적인 글 입니다.
이점 이해 하시고 읽어 주시면 감사 하겠습니다.



세상엔 많은 컴퓨터 언어들이 있지만, 유독 내 눈에 거슬리는 컴퓨터 언어가 있습니다.
그 존재는 바로 C#.
마이크로소프트(이하 마소)에서 개념차게 만들었다 주장하는 이 C# 이란 존재는 탄생이 다음 목적들을 가지고 있습니다.

 1. C/C++ 의 문법에, Visual BASIC 의 빠른 개발 장점을 가지는 언어.
 2. 32bit/64bit 나 x86, ARM 등 서로 각기 다른 platform 에 독립적인 동작을 보장하는 소프트웨어.
 3. WPF 를 통한 매우 시각적으로 있어 보이는 소프트웨어를 만들 수 있음.

뜻은 좋습니다.
하지만 제가 C# 을 본의 아니게 사용하고 격어 보면서 위의 것들은 빛좋은 개살구. 개발자만 편해 져 보겠다는 이기적인 언어라고 결론을 내리게 되었습니다.

몇가지 예를 들어 보겠습니다.

C# 은 문법은 C/C++ 과 닮아 있고 비슷한 걸 쓰고 있습니다만, 실제 이는 전혀 다르며, 각 .NET framework 버젼에 따라 그 문법의 사용이 서로 상이하게 동작합니다.
그로 인해 .NET framework 4.0 에 맞춰진 코드는 3.5 에서 컴파일 조차 되지 않습니다. 물론 manifest 로 해당 .NET framework 에서만 돌도록 할 수 있지만, 일단 해당 코드를 돌리려면 .NET framework 4.0 을 설치 해야 합니다.
이로 인해 C# 으로 만든 PC 엔 반드시 그 크디 큰 .NET framework 를 설치 해야 합니다.
또한 이로 인해 .NET framework 덩치가 너무 크고, 시스템 자원 소모가 심합니다.
저는 빛좋은 개살구라고 표현 합니다만, 왠만한 C# 으로 만들어진 소프트웨어들은 조금만 덩치가 커지면 시스템 메모리를 기본 100MB 씩 잡아 씁니다. 제가 만든 어플리케이션이 메모리 10MB 넘게 쓰면 고민하기 시작하는 저 로서는 이런 낭비가 정말 어처구니 없고 이해가 안 가는 부분 입니다.
해당 C# 개발자들 말로는 "컴퓨터 성능 좋아졌는데 많이 쓰면 어때요?" 라는데 ..
CPU 성능 5% 이하와, 메모리 10MB 로도 충분히 돌릴 수 있는 걸 CPU 100% 와 100MB 의 메모리 사용으로 전류 소모 해 가며 돌리는게 좀 어때요? 라고 말하는 것과 동일하게 들리며, 이는 즉 어떤 무지한 사람과 단체들이 주장하는 무상급식이 XXX 표퓰리즘 이라 말하는 것 처럼 들립니다.

C# 의 큰 취지 중 하나였던 다양한 platform 이란 점도 어폐가 있습니다.
Java 만 봐도 이미 안쓰이는 platform 이 없습니다.
Open source 중 하나인 QT 만 해도 리눅스, 윈도우즈 모두 동작 합니다.
물론 QT는 컴파일 된 바이너리가 동일하게 동작 하는 것과는  다릅니다만, 재컴파일을 통해 동일하게 동작하는 어플리케이션을 만들수 있긴 합니다.
Java 의 경우도 바이너리로 컴파일 된 것이 아니라면 Java run-time 에 의해 서로 다른 플랫폼에서 동일히 동작할수 있긴 합니다.
문제는 마소의 C# 은 같은 윈도우즈 내에서도 동일하게 동작하지 못하는 문제가 많습니다.
x86-32bit 와 x86-64bit 가 실제로는 서로 다른 manifest DLL 들을 참조할 경우 절대 동일히 동작할 수 없습니다.
C# 자체는 절대 기계어 바이너리를 만들지 않고 IL 이라는 코드를 만들어 냅니다.
그런 이유로 소스코드로 다시 만들어 질수 있는 장점아닌 장점이 있으며, 이는 별도의 암호화 툴 없이는 C# 코드를 다른 개발자가 훔치기에도 쉽다는 말이 됩니다.

특히 WPF 를 사용하는 프로그램들 일부는 WindowsXP 에서와 WindowsVista/7 에서 서로 다른 화면을 보이거나, XP 에서 이상한 동작을 하기도 합니다. (매우 심각 하더군요 ... )
또는 WindowsXP 에서 비디오 카드 성능이 떨어질 경우 프로그램 사용이 힘든 경우도 있었습니다.

생각해 봅시다.
집에서 장 보러 가는데 걸어가도 되지만 가져 올게 많아 차로 가는데.
1리터로 15Km 를 가는 차를 타는 것과.
1리터로 6Km 를 가는 차를 타고 갈때.

어느것이 맞는 걸까요 ?
승차감을 중요시 하고, 남에게 보이는 이목이 중요한 분들은 후자를.
실속을 따지고, 알뜰히 사는 분들이라면 전자를 택하겠지요.

저는 불행히 전자를 따지는 사람이다 보니 쓸데 없이 낭비를 하며 컴퓨팅을 하는 것이 싫습니다.
개발자 좀 편하자고 자원을 낭비하는 것은 정말 오만이고 부도덕한 모습이라 생각 합니다.
그래서 인지 저는 여전히 C# 이 싫고.
덤으로 아직도 MFC 를 쓰는 Visual C++ 도 매우 싫어 합니다.

시스템의 성능이 좋아지고, 환경이 나날히 좋아지긴 하지만.
필요 없이 자원을 그에 맞춰 낭비하고 CPU 파워 10% 로 해결 할 일을 100% 써 가며 돌리는건 여전히 이해하고 싶지 않은 부분입니다.

그래서 지금도 앞으로도 C# 이 C/C++ 로 만든 소프트웨어 보다 월등히 좋아지지 않는 이상 C# 을 좋아 할 수 없을 듯 합니다.
차라리 저는 Delphi 를 선택하겠죠.

개발자가 편하면 사용자가 불편하다 생각 합니다.
그런 시점에서 C# 은 매우 거만하고 오만한 컴퓨터 언어가 아닌가 합니다.
다른 시점에서 계속 발전 하는 언어라고도 합니다만. 그건 제 시점에서 발전이 아니라 더욱 더 오만해 지고 있는 것으로 보입니다.

과연 C#.
얼마나 오래 가고, 얼마나 오래 쓰여지고, 얼마나 범용적이 될 지 궁금 합니다.