회차
[C# 4.0] New Features in C# : 01. C# Programing Trend
[C# 4.0] New Features in C# : 02. C# 4.0 Overview
[C# 4.0] New Features in C# : 03. Dynamically Typed Objects #1 : DLR
[C# 4.0] New Features in C# : 04. Dynamically Typed Objects #2 : Dynamic Lookup
[C# 4.0] New Features in C# : 05. Optional and Named Parameters
[C# 4.0] New Features in C# : 06. Com-specific interop features
[C# 4.0] New Features in C# : 07. Covariance and Contravariance

01| C# 프로그래밍 동향

어느듯 .NET Framework 4가 Visual Studio 2010과 함께 런칭한지 3개월이 흘렀습니다.

Visual Studio 2010 과 함께 .NET Framework 4, Silverlight 4, WPF, WCF 등 유관 기술들이 새로운 변화를 하고 있는데요.

그래서 오늘은 Microsoft에서 지향하는 프로그래밍 패러다임에 대해 아티클로 잠시 다루어보기로 하겠습니다.
.NET Framework 디자인팀은 오래전부터  " 미래에는 어떤형태의 프레임워크가 되어야할지? " 고민을 하였다고 합니다.
지속된 디자인팀의 노력으로 .NET Framework 4에서는 완전한 프로그래밍으로 거듭 나고 있습니다.



* 선언적 프로그래밍
 : 명령형 프로그래밍의 반대되는 개념으로 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우를 말합니다. 그내용을 축약한다면 목표를 명시하고 알고리즘은 명시하지 않습니다.
즉, 찾고자하는 필요한 해의 특성을 설명하고 그해를 찾는데 사용하는 실제 알고리즘은 설명을 하지 않습니다.
대표적인 예로는 SQL과 같이 질의문의 선형 언어가 있습니다. 이미 C# 3.0에서 선언형 언어 이론을 기반한 LINQ와 간결하고 확장 가능한 구문 람다 문장과 같은 스타일이 적용 된것을 알수 있습니다.

* 동적 프로그래밍
 : 위키 사전에서는 다음과 같이 정의를 하고 있네요.
"어떤 알고리즘이 부분 문제 반복과 최적 기본 구조라는 특징을 가지고 있을 때, 이 알고리즘의 실행시간을 줄이는 방법이다."
이와 같은 이론을 바탕으로 C# 4.0 에서는 Dynamic 이라는 새 형식이 도입이 되었습니다. dynamic 형식은 정적 형식이지만 이형식의 개체는 정적 형식 검사에서 제외가 됩니다. 또한 dynamic 타입은 컴파일 타임에 모든 작업을 지원하는 것으로 가정되며 COM API, IronPython, IronRuby 와 같은 언어이 프로그램 내의 다른 위치인지 신경 쓰지 않아도 됩니다.
CLR 버전이 4.0으로 업그레이드 되면서 동적 언어 런타임(DLR)을 통해 동적인 언어를 지원 합니다.

* 동시 프로그래밍
: 동시 프로그래밍은 동시에 많은 연산을 하는 방법중 하나입니다. 최근 컴퓨터 이용에서 발열과 전력소모에 대한 관심이 높아지는것과 함께, 멀티 코어 프로세서를 핵심으로 컴퓨터 구조에서 강력한 패러다임으로 주목받고 있습니다.
.NET Framework 4에서는 병렬 컴퓨팅의 패러다임을 손쉽게 가져다 쓸수 있도록 제공을 하고 있으며 .NET 4의 병렬 프로그래밍은 Task Parallel Library(TPL)과 PLINQ (Parallel LINQ)으로 구분 됩니다.

- TPL : 데이터 중심으로 네트워크 통신 및 병렬 연산 등을 통하여 실행 순차적으로 배포 또는 인터리빙이 실행하여 단일 프로세스들을 집합 과정으로 기존의 전통적인 비동기 패턴과 TPL을 통합하는 시나리오를 제공합니다.

- PLINQ : LINQ는 안정적인 방식으로 데이터 소스를 쿼리하기 위한 모델였지만 데이터가 열거 되기전까지 지연이 되어 병렬적으로 실행이 필요 하게 되었습니다. PINQ의 병렬 처리로 레거시 코드를 사용할 때보다 향상된 성능을 제공합니다.

포스팅을 마치며...

이번 포스팅은 Microsoft에서 추구하는 프로그래밍 패러다임에 대해서 잠시 아티클로 만나 보았습니다.
의미적으로 잘못 전달해드리지 않을까 걱정되네요 ^^; 추가 피드백이 있으시면 의견 남겨주시면 감사합니다.

다음 포스팅 부터는 C#의 새로운 기능들에 대해 소개를 해드릴 예정입니다.
무더위 준비 잘하시고 항상 좋은 하루 보내세요
감사합니다.

정은성 드림

Posted by LenAWeb

댓글을 달아 주세요

  1. 차넌

    수고햇삼 계속 좋은 글 올려줭~

    2010.07.05 20:32 [ ADDR : EDIT/ DEL : REPLY ]
  2. 저 .net 4.0에서 말하는 동적 프로그래밍과 위키에 정의된 동적 프로그래밍은 다른 개념이라고 알고 있습니다. 위키 상의동적 프로그래밍은 Table을 사용하는 알고리즘의 분야 중 하나이고, .net 4.0은 동적 타이핑(덕 타이핑)일 겁니다.

    2010.07.07 13:19 [ ADDR : EDIT/ DEL : REPLY ]
    • 관심을 가지시고 피드백을 해주셔서 감사의 말씀을 드립니다.
      Duck Typing은 동적프로그래밍의 한스타일을 지칭합니다. 위키디피아를 인용한다면 오리처럼 행동하면 오리라 부를수 있다는 의미처럼 String 처럼 행한다면, String으로 다루어도 된다는 이야기겠죠. 오브젝트의 부모나, 인터페이스의 영향보다 그 오브젝트가 가진 특징에 의해 결정 될수 있습니다.

      bisugg님께서 말씀 하신것처럼 Duck Typing의 표현이 잘못된 내용은 아닙니다. 4.0에서는 동적프로그래밍을 Duck Typing이라고 표현을 하고 있습니다.

      그리고 포스팅에서 동적 프로그래밍은 분할과 정복 개념을 기반의 내용으로 작성하게 되어 오해의 소지를 만들게 되었군요 ^^;;

      2010.07.07 15:10 신고 [ ADDR : EDIT/ DEL ]
  3. 동적타입이 편하고 많이 좋아졌지만 남용하면 좋지 않습니다. 이전의 goto문 처럼 반드시 필요할때만 사용하시는게 좋고요, 동적타입보다는 generic을 추천합니다.

    2010.07.08 11:30 [ ADDR : EDIT/ DEL : REPLY ]
    • 최문혁 MVP님 블로그 방문을 해주셔서 감사합니다.
      동적타입이 코드를 간결하게 해주고 높은 호환성을 보장하지만 남용해서는 안되죠. 오히려 리플렉션보다 속도도 떨어지기까지 하니깐요 ^^ 그래서 세미나 마무리를 하면서 언급을 해드리려고 생각중입니다.

      또 놀러 오시구요 15일날 오프라인에서 뵙겠습니다.

      2010.07.14 01:40 신고 [ ADDR : EDIT/ DEL ]
  4. 노동은 생활의 꽃이요, 삶의 보람이요, 마음의 기쁨이다.

    2013.03.24 14:09 [ ADDR : EDIT/ DEL : REPLY ]
  5. 일이 즐겁다면 인생은 극락이다, 괴로움이라면 그것은 지옥이다.

    2013.03.30 23:47 [ ADDR : EDIT/ DEL : REPLY ]
  6. 겁쟁이는 사랑을 드러낼 능력이 없다. 사랑은 용기 있는 자의 특권이다.

    2013.04.10 04:59 [ ADDR : EDIT/ DEL : REPLY ]
  7. 우리에게 가장 쓸모없는 날은 웃지 않는 날이다.

    2013.04.10 09:14 [ ADDR : EDIT/ DEL : REPLY ]
  8. 노동과 수확 기대의 기쁨을 느낄 어려운 내부의 삶의 선하심을 생각 전심 보통 일 매일 생활을 수확 보자.

    2013.04.10 21:57 [ ADDR : EDIT/ DEL : REPLY ]
  9. 아무리 절망적 문제는, 오래 결국 일을 주장 할 용기가로 희망을 갖게됩니다.

    2013.04.11 19:16 [ ADDR : EDIT/ DEL : REPLY ]
  10. 당신 매력있어, 자기가 얼마나 매력있는지 모르는게 당신매력이야

    2013.04.29 09:07 [ ADDR : EDIT/ DEL : REPLY ]
  11. 당신은 내가사랑할 만한 사람이 아니예요,사랑하지 않으면 안될 사람이예요.

    2013.07.15 19:36 [ ADDR : EDIT/ DEL : REPLY ]