처음엔 무시했고 시간이 지나도 굳이 저걸 쓸필요는 없겠다 싶었는데...
DELPHI의 발전이 너무 더디고 상대적으로 C#의 발전은 순조로와서 윈도우즈 운영체제하의 어플리케이션을 개발하는 입장에서 C#을 무시할 수 없게 됐다.
무엇보다 팀원에게 점점 시장에서 밀리기만 하는... 엠바케데로의 툴만을 배우라고 하기는 꺼림칙하다.
이런 연유로
그간은 전혀 관심도 없었던 C#에 대해 최근 틈나는대로 파고들면서 DELPHI 와 비교해 볼까 한다....
아래의 내용은 아직 관련 지식이 부족하고 선입견이 있을수 있기에
또 금새 생각이 바뀔수도 있을 것이다.
다분히 주관적인 글이다.
C# 의 장점
1. user control 적용의 편리함...
델파이와 달리 프로젝트별로 user control 관리한다.
장기간 유지 보수할 경우에는 편리한 델파이 컴포넌트가 악몽이 될수도 있는데,
이런 고민이 없어졌다... 이건 2번과도 이어진다.
2. partial class
라이브러리를 개발하고 유지보수하면서 늘 겪는 문제다.
비슷하지만 다른 S/W 를 줄창 개발하다보니 결국 프로젝트마다 라이브러리 버전이 달라져 버린다.
다품종 소량 생산의 S/W 를 만들다 보니. 하위 호환까지 따져 가며 작성하기엔 너무 고단한 일인데...
partial class 와 1번을 조합하면 확기적으로 코드관리가 수월해질 거다
3. 안정적인 IDE
IDE의 창시자는 터보 파스칼 / 터보 C의 Borland 이지만,
현재의 IDE의 수준은 MS 툴에 비교가 안되게 허접하다.
그래도 오브젝트 파스칼 자체가 가독성이 좋고 구조가 간단해서 그나마 다행이랄까
4. 더 있을건데 아직은 C#을 잘몰라서... 여기까지...
C#의 단점
1. Save as project 가 없다.
그게 굳이 필요한가? 라고 생각할 분들이 많겠지만,
유사하지만 다른.... 다품종 소량 생산 하는 개발자 입장에선 귀찮음을 덜어주는 매우 고마운 기능이다.
2. 코드 공개
델파이의 핵심 프레임워크인 VCL은 내부 클래스의 코드를 볼수 있다.
입문서 하나 딸랑 읽고 델파이를 익혀서 VCL의 파생 클래스를 자유자재로 만들어 사용할수 있었던 것도
VCL 을 들여다 볼수 있으니까 가능한 것이었고,
디자인 패턴이 뭔지도 모를때부터 자연스럽게 클래스의 설계 방식을 익힐수 있었다.
3. 선언과 구현의 분리
구세대 프로그래머라서 그런지 헤더가 없는게 영 보기 어렵다.
헤더 파일 자체가 없어도 델파이 처럼 선언과 구현이 분리 되어야 눈에 잘 들어온다.
특히 IDE 없이 일반 텍스트 편집기로 코드를 보는 일이 많고 작성하는 일도 가끔은 있기 때문에
블럭이 접히는 에디터를 따로 구해야할 판이다.
4. 배열 형태의 property
델파이는 Grid.Values[r,c], Grid.Colors[r,c] 이런 식으로 다양한 프로퍼티가 가능하다.
최근엔 namespace 까지 해서... 이름이 길어지는게 요즘 추세라지만... 짧게 할수 있는 건 짧은게 좋다
위의 예를 C#으로 하자면 Grid.Rows[r].Columns[c].Color ,Grid.Rows[r].Columns[c].Value 너무 길다.
구현도 더 복잡해진다.
별 차이 없는 것 들
1. garbage collection
개인적으론 garbage collection 보단 스마트 포인터를 쓰는 게 낫다고 본다
일의 특성상 반드시 메모리 관리를 직접 해주어야만 하는 경우가 은근히 많은데...
unsafe 로 예외적으로 관리하기 보단 smart pointer 를 쓰는게 개인적으로 더 낫다고 본다.
근데 smart pointer 는 델파이 기본 제공이 아니다. 만들어써야한다. 그래서 별차이 없음으로 분류
2. 컨트롤 사용이 복잡함
MS 의 컨트롤은 모양이 더 이쁘다. 하지만 클래스 구조나 사용상의 컨셉을 보자면 VCL 이 더 좋다고 본다.
다만 VCL은 20년이 지나도록 그닥 발전이 없다
발전하긴 했는데... 20년이란 세월에 비교하자면... 좋은 점수를 주긴 힘들다.
그래서 별차이 없음으로 분류
3. H/W API 지원
점점 델파이는 밀려나가고 있다. 윈도우즈하에선 벤더들이 DOT NET을 밀고 나갈 작정으로 보인다.
그래도 C++ 혹은 C API는 필수로 지원하니까 C++과 함께 사용하면 된다.
C#도 어차피 C++과 같이 써야만 하는 일이 생긴다.
물론 C#은 VC++과 IDE 를 함께 쓰니 더 편하긴 하겠지만,
어차피 C++은 모듈로 작성하기 때문에 큰 문제는 되지 않는다.