주요 내용으로 건너뛰기

[북리뷰] 이것이 C#이다

새해가 들어서 함수형 프로그래밍 언어(functional programming)인 F# 을 배워야겠다는 생각을 했는데, 그러기 위해서는. NET 프레임워크를 알아야만 했고, 그것을 다시 거슬러 올라가다 보니 객체지향 패러다임인 C#을 먼저 배워야만 했다. 내가 대학교 다닐 때 배웠던 C++ 및 MFC 프로그래밍 방식 등은 이제 거의 사장된 것 같다. 요즘은 윈도우즈 프로그래밍에서 C#이 대세라고 하긴 하던데, 뭔가 잘 모르는 미지의 분야를 접하는 게 어렵게만 느껴졌었다. 그래서! 책을 찾기로 했다. 

한빛미디어의 "이것이 C#이다"는 프로그래밍을 처음 시작하는 독자를 위해 쓰여졌다. 저자인 박상현님은 "뇌를 자극하는 알고리즘"을 집필하시기도 하셨는데, 학부 재학당시 자료구조론 수업 과제를 하며 이 책을 많이 참고하였던 기억이 난다. 당시 싸이월드 블로그에 서평을 남기기도 했었는데, 놀랍게도 저자분이 직접 응원의 댓글을 달아주시기도 하셨던 기억이 난다. 그분을 다시 이 책으로 뵙게되어 기뻤다.


이 책을 읽으며 느낀 점은, 그동안 막연히 C# 은 어려울 것 같다는 생각이 전혀 근거 없는 두려움이었다는 것이다. 하지만 의외로 C#은 여타 다른 프로그래밍 언어에 비해 진입장벽이 훨씬 낮았기에 오히려 첫발을 떼기가 쉬웠던 것이다.

C#은 이름에서 풍기는 냄새와는 달리, C언어 또는 C++ 과 전혀 다른 별개의 언어이다. 이는 마이크로소프트의. NET(닷넷) 프레임워크와 완벽히 호환될 수 있는 최적 프로그래밍 언어를 만들기 위한 프로젝트이다. 이를 원활하게 사용할 수 있는 IDE는 당연히 Microsoft의 Visual Studio이다. 하지만 나는 졸업 이후 주로 리눅스 환경 개발만을 했기 때문에 당연히 리눅스에서도 되겠지~? 하며 Visual Studio Code 로 구축해보았다. (설치방법 참고 : 링크) 그리고 첫번째 프로젝트인 Hello World를 만들고 컴파일을 하는데.. 두둥 ?! 

놀랍게도 빌드 된 녀석은 helloworld.dll 이라는 파일명을 가지고 있었다. 엥?? 리눅스인데 왜 때문에 DLL File ???? (아니 왜 형이 거기서 나와? )

설마설마 했는데 정말로 윈도우의 PE바이너리 DLL이 맞았다.. 도대체 왜 리눅스 환경에서 빌드했는데 ELF 형식의 바이너리가 아닌, 윈도우의 PE 파일이 나온 것인가?

그 답은 바로 .NET Core에 있었다. 

책의 설명에 따르면 Java가 크로스 플랫폼을 지원할 수 있는 비결이 JVM에 있듯이, C# 역시 윈도우 뿐만 아니라 리눅스 및 macOS에서의 작동을 지원하기 위해 일종의 가상환경을 이용하는 것이고 그것이 바로 .NET Framework이다. 조금 더 엄밀히 말하자면 닷넷프레임워크는 윈도우 전용을 지칭하고, .NET Core라는 이름으로 윈도우 뿐만 아니라 리눅스 및 맥을 모두 지원하는 크로스플랫폼 환경을 오픈소스 프로젝트로 진행하고 있다. 어쨌거나 책에서는 Windows 환경에서 Visual Studio 2017을 사용한 C# 7.0 을 다루고 있기 때문에, 대부분의 독자들은 굳이 .NET Core를 크로스플랫폼으로 사용할 일은 적다고 본다. 


이어서 본격적인 자료구조(Data Structures)에 대한 설명이 나온다. C# 에서 기본적으로 제공하는 ArrayList  등의 활용방법을 배울 수 있다. 

앞에서도 언급한 바 있듯이, 저자분께서는 알고리즘 관련 서적을 집필하신 적이 있는 내공의 소유자이시지만 본 도서는 C# 언어를 처음 배우는 입문자들에게 초점이 맞추어져 있으므로 관련 내용을 모두 다루시지는 않으신다. 참고로 최근 Robert Sedgewick 교수의 알고리즘 강좌가 유명세를 끌고 있는데, 해당 강의는 Java로 구현된 코드를 제공하고 있다. 그런데 이를 C#으로 변환하여 .NET에서 구동할 수 있도록 한 프로젝트를 발견하였다. 관련 내용을 참고하기 바란다.


C#의 가장 최고의 장점은 윈도우즈 환경에서 구동할 수 있는 GUI 기반 프로그래밍이 가능하다는 것이다. 예전에는 MFC 기반의 C++을 사용했었는데 최근에는 C# 쪽으로 넘어가는 것 같다.. ('최근'이 아닐지도 모른다. 내가 이쪽 개발자가 아니어서..;)


마지막으로 내가 C#을 배우려던 이유는 궁극적으로 함수형 프로그래밍 패러다임으로 넘어가기 위해 F#을 배우기 위함이었다. F# 관련 라이브러리를 가져다 쓰려면 C# 다큐먼트를 참조해야 하는 경우도 많다고 들었는데, 실제로 fsharpc로 컴파일한 exe가 C# 바이너리와 같이 .NET 환경에서만 작동한다는 것을 알게되었고 덕분에 dotnet core 로 개발환경을 구축하고 활용하는 것에 익숙해질 수 있었다. 국내에는 아직 F#관련 서적이 전무한데 "이것이 F#이다" 라는 책이 머지않아 나올날을 기대해본다.

Software Security Engineer

CPUU 님의 창작활동을 응원하고 싶으세요?

댓글 2

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.