일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 티스토리챌린지
- 3DS
- Game Gear
- 새턴
- 게임보이
- MSX
- ensemble
- snes
- 메트로이드
- 오블완
- fpga
- Apple II
- 앙상블
- analogue
- 닌텐도스위치
- 패미컴
- mister
- 게임기어
- 슈퍼패미컴
- 슈퍼마리오
- ps4
- PC엔진
- 메가드라이브
- 건담
- 컨트롤러
- GOG
- Saturn
- 모빌슈트
- 닌텐도
- mobilesuit
- Today
- Total
Just a Blog
C#을 써 보면서 느낀 점들 본문
얼마전, 웹 컴포넌트를 붙여서 HTML 페이지를 보여주는 프로그램을 하나 만드려고 했을 때 예전부터 고려하였던 C#을 사용해 보았다.
C#은 현재 Microsoft가 강력하게 서포트하고 있고 .NET 프레임워크 전략에 핵심적인 언어임이 너무나도 유명하다.
하지만 여러가지 개인적인 이유로 그동안 사용을 거의 하지 않았다.
<Wikipedia의 C# 항목에 사용된 로고 (출처: Wikipedia)>
그 개인적인 이유 중의 하나는 2000년대 초 가졌던 왜곡된 선입관이다.
Java를 주력으로 사용했고 C#이 태동하던 2000년대 초 Java 진영과 C# 진영 간에는 유치한 우월성 싸움이 벌어지곤 했는데(관련한 분위기를 소개하는 ZDNet 기사기사:'자바 개발자는 이제 C#도 배워야하나'), 당시 C#이 Java를 흉내낸다는 착각을 했었고 C# 지지자들은 다소 저돌적이었다고 편파적인 생각을 했었다.
C#을 보면서 Visual J++와 같은 Microsoft의 이전의 삽질이 연상되기도 해서 다가서고자 하는 생각이 전혀 없었다.
또한, Linux에서 C#과 .NET 프레임워크를 역공학하던 Mono 프로젝트도 그 끝이 과연 있을 것인지 하는 생각이 들면서, Windows 만을 위한 프레임워크와 랭귀지가 멀티플랫폼을 지향하던 Java와 대결이 될 수 있을까하는 생각도 했다.
그러다가 언제 즈음부터인가 Java 진영이 매우 보수적으로 spec 변경을 하는 사이 C#이 현대적인(modern) 프로그래밍 언어 요소들을 능동적으로 도입하기 시작하면서, C#이 새로 프로그래밍을 시작하는 사람들에게 더 어필하는 듯 보였다.
<Mono Project (http://www.mono-project.com) 로고>
C#에 몹쓸 선입견을 가지던 시절에도 Anders Hejlsberg는 너무나도 잘 알고 있었다.
나는 8bit 컴퓨터인 Apple II의 복제품을 쓰던 시절에도 CP/M 카드를 달고 Turbo Pascal을 사용하던 사람 중의 한 명이었다.
나는 MS-DOS 사용 시절 Turbo C가 더 각광받을 때 Turbo Pascal에 더 애착을 가졌던 사람 중 한 명이었다.
나는 Windows 프로그램 작성에 MFC를 사용하던 것이 기본인 것 처럼 여겨지던 시절에 Delphi를 사용하던 사람 중의 한 명이었다.
(나는 Delphi 정품을 가지고 있었고, 정보처리기사 실기시험에서도 Delphi를 사용했다)
|
<Apple II 사용시절 보던 Pascal 책과 Windows에서 사용하던 Delphi 3 Standard Edition>
그러니 그가 Borland를 떠나 Microsoft로 갔다고 했을 때 Microsoft 개발환경에 새로운 빛이 보일 것이라 막연한 기대도 했었다.
하지만 C#에 대한 호기심은 없었다.
학교에서 대학원생이 학부 때 부터 C#을 주력으로 사용했다는 이야기를 듣고는 신선한 충격을 받았다.
내 나이 정도 사람중 소프트웨어 개발 업무를 보고 있는 사람이 있다면 아마 십중팔구 C# 보다는 Java에 익숙해 할 것이라고 생각하는데, 새로운 나이의 세대는 다를 수도 있다는 것을 알았기 때문이었다.
그리고 모바일 시대에 다중 플랫폼 개발을 위한 Xamarin이 뜨면서 더욱 더 많은 사람들이 C#을 접하고 있었다.
<Xamarin 로고>
그리고 얼마전 클라이언트 프로그램에 HTML 페이지를 표시할 웹 컴포넌트를 쉽게 추가할 수 있는 환경을 찾다가 .NET 환경에서의 C#으로의 작성을 고려했다.
처음에는 아주 오래된 Borland C++ Builder 6를 꺼내서 만들까 싶었지만 너무 오래된 툴이어서 최근 윈도우에 어떻게 돌아갈지 알 수가 없었기에, 최근 Visual Studio Community Edition에서 제공하는 C#을 선택했다.
재미있는 것은 설명서 탐독없이 기존에 대충 알던 C#의 기본 배경 지식과 Java의 기본 지식으로 및 Delphi의 VCL 특성 지식을 바탕으로 매우 편안하고 익숙하게 프로그래밍이 가능했다는 점이다.
이렇게 되겠지 싶어 그냥 타이핑 해보면 Visual Studio의 자동완성 기능은 예상했던 것과 거의 동일한 클래스명과 method들을 제시했다.
그동안 사용했던 Java의 문법과 유사한 점이 있기 때문으로 보인다.
(어느 것이 먼저인지는 이견이 있을 것이다. Generics나 Auto-boxing/unboxing 등의 현대적 문법요소들은 Java가 C#의 영향을 받았을 것으로 생각된다)
개인적으로 직관적으로 예상한 대로 그대로 동작되는 언어를 선호하기에(그래서 Ruby 언어가 마음에 든다), C#도 호감이 가기 시작했다.
더구나 Visual Studio에서 C#으로 GUI 구성하는 방식은 MFC에서 Dialog 창에 컴포넌트를 올려서 말도 안되는 GUI 프로그래밍을 했던 악몽이 씻겨 나가는 느낌이었다.
그리고 이런 느낌을 받은 이유는 아마도 Visual Studio의 GUI 구성 환경에서 Delphi의 VCL 프로그래밍을 떠올렸기 때문이었을 것이다.
역시 Delphi VCL의 컴포넌트들이 가지고 있던 Property와 처리 가능한 Event의 리스트들이 거의 동일한 수준으로 존재하는 것 같아 보였다.
윈도우에 버튼을 올리고 그 버튼을 클릭하면 callback method의 코드가 보여지는 구성도 유사했다.
제작한 프로그램의 스케일이 단순한 수준이기도 하고 직접 경험한 C#의 기능이 전체 중의 일부분에 국한될지는 모르겠기에, 섣불리 전체를 판단하지는 못하겠다. (이런 걸 판단할 능력의 수준도 안될 것이고...)
하지만 개인적으로는 C#/.NET 환경이 익숙한 것들의 집합체 같아서 놀랐다.