'프로그래밍 팁/C#/.NET'에 해당되는 글 3건

  1. 2012.10.15 C# 입문으로는 박상현씨 책을 추천 (10)
  2. 2011.07.15 [Luainterface] C#에서 루아 사용하기
  3. 2011.05.25 [C#] LINQ로 Naver OpenAPI 이용하기 (1)

 

C# 책을 처음으로 봤던 게 2006년인데, 그 해에 열렸던 MS의 오픈 세미나인 DevDays 2006 행사에 갔다가 복도에서 팔던 닷넷 관련 책 중에 가장 쉬워보이는 ‘클릭하세요 C# 2.0 프로그래밍’ 책을 사서 읽은 게 처음이었다.

C#을 주력으로 사용하는 편이 아니기 때문에, 가끔씩 WinForms나 API.NET에서 함수 두어 개 작성하는 수준으로는 2.0 버전의 문법으로 어지간하면 다 해결할 수 있었다. 그러다 가끔 LinQ정도만 인터넷 검색해서 알고 있는 수준. 그러다 최근에 ‘뇌를 자극하는 C# 4.0 프로그래밍’ 책을 읽었는데, 알고보니 두 책 다 동일 저자 박상현씨 책이었다.

C#을 처음 배우는 사람에게 추천해 주고 싶다. 설명을 참 친절하고 편안하게 해놓아서, C#으로 프로그래밍 자체를 처음 시작하는 경우에도 쉽게 이해할 수 있을 것 같다. 지금 공부한다면 바로 뇌를 자극하는… 버전을 읽는 것이 좋다.

이미 닷넷이나 c#을 접해본 사람이거나, 어느정도 프로그래밍 경험이 있는 사람이라면 난이도가 안맞을 것이다. 나도 4.0 책은 2.0에서 없었거나 달라진 변경사항 위주로만 읽어서 책의 상당부분을 skip했다. 하지만 그럼에도 이 책을 추천하는 이유는

  1. 개인적으로 헷갈리던 내용들에 대한 설명을 접할 수 있어서 좋았다.
    • delegate와 event는 무엇이 다른가?
    • interface와 abstract class는 무엇이 다른가?
    • anonymous method(익명 메소드)와 lambda는 어떻게 다른가?
    • dynamic 형식을 사용하는 이유. (이 부분은 좀 더 공부가 필요)
  2. 저자 분이 입문자를 대상으로 하는 쉬운 설명을 참 잘하셔서, 그냥 그 글 솜씨 자체로 자극을 많이 받았다.

원래 어느 정도 배경지식을 알고 있는 사람에게 설명하는 것보다 잘 모르는 사람에게 무언가를 설명하기가 더 힘들다. 나는 예전에 팀장으로 있을 때 신규 입사자 면접 자리에 면접관으로 들어가게 되면 ‘처음 프로그래밍을 시작하려는 사람에게 OOP가 무엇인지 설명해 보라’는 질문을 즐겨 하곤 했었다. 아마 그 때 면접자가 박상현씨 수준으로 조리 있게 잘 설명했다면 매우 큰 플러스 점수를 받았을 듯.

그동안 C#으로 코딩했던 건 학습 목적의 개인 프로젝트나, 정말 짜잘한 임시 툴 정도였는데, 최근 드디어 처음으로 실무에서 사용하는 메인 개발툴의 코딩을 경험하게 됐다. 역시 혼자서 가볍게 끄적이던 때와는 다르게 다른 동료들의 코드를 보면서 정말 많이 배우고 있다. C++스럽게 짜던 스타일도 많이 C#스타일로 변했고, WPF와 MVVM패턴에 대해 관심이 생겼다.

‘뇌를 자극하는…’ 책은 구매하진 않고 회사 도서관에서 빌려봤지만 (박상현님, 그래도 2.0 책은 직접 사서 읽었습니다. 그리고 블로그에 추천글도 올렸잖아요.) 사서 소장해두고 볼만한 C#책을 몇 권 더 읽을 생각이다. 좋은 중/상급 C# 책 있으면 추천해 주세요.

Posted by leafbird 트랙백 0 : 댓글 10

댓글을 달아 주세요

  1. addr | edit/del | reply Favicon of https://devnote.tistory.com BlogIcon leafbird 2012.10.15 09:42 신고

    너무 오랜만의 포스팅이다 ㅜㅠ...
    아기가 생기고 집안일 하느라 정신이 없었으므니다 orz...

  2. addr | edit/del | reply 지나가는사람 2012.11.09 08:34

    어떤책이 처음 프로그래밍을 배우는 사람에게 추천할 만한 책인가요?

    글을 읽어봤는데 두권중 어떤것이지 정확히 알 수가 없네요^^;;

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2012.11.11 23:08 신고

      뇌를 자극하는 C# 4.0 프로그래밍 책을 추천합니다.
      제가 글을 좀 헷갈리게 적었지요 ^^;...

  3. addr | edit/del | reply Favicon of https://thedeepbreath.tistory.com BlogIcon TheDeepBreath 2012.12.02 13:31 신고

    오 저 블로그 보면서 공부 시작하고 있었는데 책을 보면서 하는게 나을까요? ㅋ

    C는 어느정도 할줄 알고 아주 기초적인 객체 개념 정도만 알고 시작하고 있습니다~

    UDP 통신을 이용한 프로그램 만들어 보려고 해요~

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2012.12.03 10:05 신고

      뭐.. 지금 보고 계신 자료로도 충분히 학습이 된다면 굳이 바꿀 필요는 없겠지요 :)
      나중에라도 혹시 서적이 필요하시다면 박상현씨 책을 추천 드립니다.
      박상현씨하고 저하고 아무 상관도 없지만...;;
      저도 C#은 초보인데, 도움을 많이 받았어서 추천합니다 ㅎ

    • addr | edit/del Favicon of https://thedeepbreath.tistory.com BlogIcon TheDeepBreath 2012.12.16 18:45 신고

      아 ㅋ 감사합니다. ㅋ

  4. addr | edit/del | reply Favicon of http://www.seanlab.net BlogIcon 박상현 2012.12.10 08:02

    제 이름으로 검색해보니 이 블로그가 뙇!
    좋은 서평/추천의 글 감사합니다. ^^

    행복한 연말보내시고, 새해에도 복 많이 받으세요~

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2012.12.10 11:37 신고

      왠지 저자분이 이 글 읽으시게 되지 않을까 했었는데, 정말 그것이 실제로 일어났군요 :)
      친절한 설명 덕분에 저도 참 많은 도움이 되었습니다. 저도 감사드려요.
      새해 복 많이 받으세요 ~

  5. addr | edit/del | reply 진석 2013.02.01 19:31

    이책으로 프로그래밍을 짜는 것까지 가능할까요 간단한 거라도... 실제로 짜면서 하는게 재밌기도 하고 좋을거 같아서요. 답변부탁드립니다.^^

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2013.02.01 22:23 신고

      그럼요, 가능하지요. 처음 프로그래밍 배우기에도 아주 좋은 책이라고 생각합니다. 제가 올린 책표지 오른쪽인 4.0 책을 바로 보시면 될거예요 :)

사용법을 정리해보려고 했지만 너무 쉬워서 의미가 없어 보임. (그리고 인터넷에 다 있음.) 간단히 레퍼런스 링크들만 정리해본다.


C++에서 개발할 때는 이제 아주 당연하게 lua를 쓰고 있다. 얼마전에 Direct2D 써서 만들었던 테스리스도 config나 블럭 정의 같은 부분은 모두 루아로 만들었다. 이게 버릇이 되다 보니 C#에서 뭔가를 만들어보려고 해도 lua 환경이 그리워졌다. C#은 빌드할때 시간이 안 걸려서 C++만큼 답답하지는 않지만 그래도 간단한 변수 하나 바꿀 때마다 프로그램을 껐다 켜야 하는 건 곤욕이다.

처음에는 C#프로젝트에서는 파워쉘이 루아의 자리를 대체할 수 있지 않을까 생각했다. 닷넷에 친화적인 물건이고, 쉘 방식 인터페이스로 닷넷의 함수들을 직접 호출하고 제어할 수 있으니까, 잘만 이어 붙이면 C++에 루아를 임베딩하는 것처럼 사용할 수 있지 않을까 하는 생각을 했다. 잠깐 살펴봤지만 방법이 아주 없는 것은 아니다. ( http://msdn.microsoft.com/en-us/library/ms569889(v=VS.85).aspx / http://blogs.msdn.com/b/saveenr/archive/2010/03/08/how-to-create-a-powershell-2-0-module-and-cmdlet-with-visual-studio-2010-screencast-included.aspx ) 파워쉘 스크립트 파일을 읽어 들여서 실행할 수도 있고, 대화형 인터프리터를 만들 수도 있지만.. 공부할 것도 많고 좀 복잡해 보임.. (사실 파워쉘이 이러라고 만든 물건이 아니라 좀 어거지로 밀어 넣는 느낌이 드는 것이다. 관리를 위한 툴이니까…)

근데 괜히 쉬운 길을 돌아갈 뻔 했다. 루아를 그냥 C#에서도 쓸 수 있다. 위에 정리해둔 링크를 조금 보면 느끼겠지만 붙이기도 쉽고 쓰기도 쉽다. 디테일한 사용법은 도큐먼트에 자세하게 나와있다. C# 스럽게 아주 깔끔한 인터페이스를 제공한다.

역시 듣던대로 C#은 어지간하면 손 안대고 코풀 수 있구나.
LinqToJson 모듈만 추가로 하나 구하면 이것들로 꽤 재미있는 프로젝트를 해볼 수 있을 것 같다 :)

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

요즘은 웹 기반의 솔루션들이 오픈 API를 많이 내놓고 있다. 오픈 API를 이용하면 갖가지 인터넷 정보검색은 물론 지도정보를 이용할 수도 있고, 블로그에 글도 올릴 수 있고, 구글 번역을 이용하면 문장 번역도 할 수가 있다. 구글 API는 특히나 방대하다. 아직 자세히 둘러 보지는 않았지만 YouTube도 API가 있고 Picasa, 구글 문서, 구글 캘린더도 다 API를 제공한다. 트위터와 페이스북, 미투데이 같은 SNS들도 오픈 API 형태의 기능제공을 하는 것으로 알고 있다. 앞으로 이런 오픈 API 형태로 접할 수 있는 기능들은 더욱 풍성해질 것이다.

오픈 API의 사용은 간단하다.

  1. http형태로 원하는 데이터를 요청하고,
  2. xml 형태로 요청한 데이터를 받는 것.

이게 전부다. 하지만 문제는 VC++에서는 http로 통신을 하기에도, xml 데이터를 파싱하기에도 자잘한 설정이 너무 많고 복잡하다는 점이다.

C++에서 http 통신을 하려면 WinHttp 계열의 API를 사용하는 것이 가장 기본적이다. 오픈 API 때문이 아니라 예전에 프로젝트에서 다른 작업을 할 때도 잠깐 썼던 적이 있는데, 아 뭐 어찌나 귀찮고 장황한지… 간단하게 사용할 인터페이스는 절대 못 된다.

Functions that create handles

http://msdn.microsoft.com/en-us/library/aa384270(v=VS.85).aspx

 

C++의 xml 파서는 여러 개가 있는데, 그 중에 가장 이름이 많이 알려진 게 MSXML, TinyXml 두 녀석일 듯 하다. 나는 MSXML은 써 본적 없고 TinyXml을 주로 썼는데, 적어도 게임업계 내 주변에서는 다들 TinyXml을 쓰는 거 같다. 하지만 암만 대세인 이 녀석도 아주 마음에 쏙 드는 인터페이스는 아니어서, xml 노드와 속성을 일일이 접근하는 귀찮은 과정이 많이 필요하다. ( http://sourceforge.net/projects/tinyxml/ )

그런데 요즘에 C#이랑 Linq를 공부하다가 OpenAPI 사용하는 코드를 한 번 찾아봤다. (http://chaoskcuf.com/132 )
대략 멍해졌다. C++로 대충 150~200줄 짤 거 같은 API 호출이 열 줄이면 끝난다.

   1: Console.Write("검색할 단어를 입력하세요 : ");
   2: string keyword = Console.ReadLine();
   3:  
   4: string url = "http://openapi.naver.com/search?key={0}&query={1}&target=...";
   5:  
   6: xdoc = XDocument.Load(string.Format(url, _apikey, keyword));
   7:  
   8: var result = from item in xdoc.Descendants("item")
   9:                 select new
  10:                 {
  11:                     Title = item.Element("title").Value,
  12:                     Link = item.Element("link").Value,
  13:                 };
  14:  
  15: int i = 1;
  16: foreach (var searchResult in result)
  17: {
  18:     Console.WriteLine("결과{0} : {1}", i++, searchResult.Title);
  19: }

Linq 문법과 C# 3.0의 Anonymouse Type (익명 타입) 의 엄청난 조화. 대.박.이.다.

Posted by leafbird 트랙백 0 : 댓글 1

댓글을 달아 주세요

  1. addr | edit/del | reply Favicon of https://devnote.tistory.com BlogIcon leafbird 2011.05.26 11:57 신고

    정 C++에서 오픈 API를 사용하고자 한다면, 직접 http 요청하고 xml 받아와 파싱하는 클래스를 만드는거보다 C#에서 처리하고 이걸 dll로 C++에 붙이는게 훨씬 쉽고 빠를 것으로 예상 +_+