메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Traxacun이 전하는 한주간의 IT 소식

한빛미디어

|

2004-07-09

|

by HANBIT

14,953

저자: 한동훈(traxacun @ unitel.co.kr)

이번주에는 큰 행사가 연달아 열리고 있습니다. MS에서는 TechEd 2004 Europe이 암스테르담에서 개최되었습니다. 애플(Apple)에서는 WWDC 2004가 샌 프란시스코에서 개최되었습니다. Sun JavaOne 행사도 있었습니다. 각각 비슷한 시기에 개최되어서 해외의 개발자들은 행복한 고민을 하는 모습을 블로그에서 볼 수 있었습니다.


1. JDK 1.5의 typesafe enum

JavaOne 이틀째 행사에서 C# 팀 프로그램 매니저인 Eric GunnersonJDK 1.5의 typesafe enum에 대한 효용성에 대해 이야기 했습니다.

public enum operation {
   plus { double eval( double x, double y ) { return x + y; } },
   minus { double eval( double x, double y ) { return x ? y; } },
   times { double eval( double x, double y ) { return x * y; } },
   divide { double eval( double x, double y ) { return x / y } },
   abstract double eval( double x, double y );
}

와 같이 enum을 작성하면 다음과 같은 코드를 작성할 수 있습니다.

for( operation op: operation.values() )
   double results = op.eval( x, y );

이런 식의 enum 이용이 가질 수 있는 장점이 무엇인가에 대한 질문은 자바스터디서민구님이 답해 주셨습니다.
서민구님은 Joshua Bloch의 Effective Java를 인용하시면서 여러가지 경우를 모두 설명해주고 있습니다.(아, 가끔 제가 탈자로 "구"를 빼버리면 "서민"님이 되는 경우가 종종 있습니다만... ^^)
typesafe enum의 유용성은 정리하면 "다양한 상태나 연산을 정의하기 위해 enum을 사용할 경우 각각의 경우를 고려하기 위해 case 구문을 사용해야 하지만, typesafe enum이 가능하면 완전히 동작하는 메서드를 갖는 것처럼 보이는 추상 클래스를 작성할 수 있게된다" 입니다. 보다 복잡한 이야기는 서민구님의 글을 참고하시기 바랍니다.
마지막으로 모노 프로젝트(mono-project.com)의 리더인 Miguel De Icaza의 코멘트에서 typesafe enum의 효용성에 대해 가늠할 수 있을 것 같습니다.


2. 구두 수선공 문제(shoemaker"s problem)

한빛미디어에서 출간되는 Programming Challenges는 원서에 답이 없습니다. 그러나 "답이 없으면 국내에서는 팔리지 않아~!!"라는 이유로 직접 프로그래머들이 참가하여 문제를 풀었다고 합니다. 그리고 이 책의 출간이 지연되는 초유의 사태가 벌어졌습니다. 몇몇 문제들이 미해결 문제가 되어버렸습니다. 현재는 모든 문제들의 풀이가 끝났다고 전해졌습니다.
당시 미해결 문제 중에 하나였던 구두수선공 문제(shoemaker"s problem가 있습니다. 원문은 ACM에 있습니다.
저 역시 이 문제의 풀이에 도전했으며, 다른 분들의 도움을 받았습니다. 서민구님의 풀이가 있으며 ipkn님의 풀이가 있습니다. 수학적 도움을 주신 기호삼님에게도 감사드립니다. ^^
구두 수선공 문제를 풀이하는 동안 배열을 사용했었고, C#에서 2차원 배열에 사용할 수 있는 [][]과 [,]의 차이 조차 제대로 이해하지 못했음을 발견할 수 있어 행복했습니다. 결국, 제가 안다고 생각했던 C 언어의 *과 []의 차이조차 이해하지 못했다는 것이 되어버렸지요. 이에 대해서는 char *, char[]을 참고하세요.


3. VS 2005 Beta1와 SQL Server Express

MS에서 Visual Studio 2005 Beta1이 발표되었습니다. 현재 다운로드가 가능합니다. 통합된 버전 대신에 각 언어별로 Express라는 이름으로 제공되고 있습니다. SQL Server 2005의 베타 버전도 다운받을 수 있는데, Express 버전이 그동안 VS에 포함되던 MSDE를 대체할지도 모른다는 이야기가 있습니다.


4. .Net Framework 2.0 SDK beta1

그동안 기다리던 .Net Framework 2.0 SDK beta1이 공개되었고, 그동안의 변경사항을 반영하는 서비스팩도 발표되었습니다. .Net Framework v 1.0 SP3 Tech Preview.Net Framework v 1.1 SP1 Tech Preview이 발표되었습니다.
Tech Ed 2004 Europe을 겨냥한 것이 아닐까 의심스럽게 모두 2004/6/29일자로 발표되었습니다.
.Net Framework 2.0의 가장 큰 변화는 STL의 지원입니다. System.Collections.Generics 네임스페이스가 추가되었습니다. STL 지원은 닷넷의 IL 코드의 지원이기 때문에 C#/VB.NET을 비롯한 모든 닷넷 언어에 해당합니다. ^^
STL에 대한 글로는 C# Iterators, VB.NET의 새로운 기능 Generics에서 맛볼수 있습니다.


5. Mono 1.0 발표

오픈 소스 CLR 구현인 모노 프로젝트의 1.0 발표 소식입니다. C# 1.0을 구현했습니다. ASP.NET을 리눅스등의 플랫폼에서 실행할 수 있는 XSP 1.0과 아파치에서 실행할 수 있는 mod_mono 1.0, SharpDevelop을 모노로 포팅한 MonoDevelop, GTK# 1.0등 다양한 툴들이 모두 정식발표되었습니다. 게다가 자바를 모노에서 실행할 수 있는 자바 런타임 엔진 IKVM도 포함되었습니다.
닷넷 프레임워크와 비교할 때 문법 검사가 조금 더 깐깐한 부분도 있지만, 전반적으로 만족스럽습니다.
이제, 윈도우를 벗어나 자유롭게 닷넷을 사용할 수 있게 되는 기초가 마련된 것 같아 기뻐요!!
MS에서 닷넷을 FreeBSD에서 이용할 수 있는 SSCLI(Shared Source CLI)를 내놓았다는 것은 기억하시나요? 물론, 이 소스 코드를 Mac OS X와 Linux에서 컴파일하는 방법도 인터넷에 있습니다. 어쨌거나 SSCLI를 다른 OS에서도 사용할 수 있도록 하는 오픈 소스 프로젝트가 진행중에 있습니다.
베타 시절부터 모노를 이용하고 있는데, 모노에 불만이 있다면 제가 사용하는 데비안 리눅스에서는 다른 메인테이너가 제공하는 패키지를 이용한다는 점과 컴파일러가 뱉어대는 에러 메시지가 닷넷에 비하면 지나치게 무뚝뚝하다는 점입니다. T.T


6. MS의 새로운 빌드 툴, MSBuild

MSDN TV: Visual Studio 2005 MSBuild에서 알 수 있는 것처럼 VS 2005부터 새로운 빌드시스템이 들어갑니다. 이전부터 이에 대해서 굉장히 말이 많았습니다만 무료라는 점에서 환영해야겠지요. ^^
XML 기반의 빌드 시스템을 도입하는 것은 NAnt가 있는데 바퀴를 다시 만드는 것이라느니, Installer SDK를 만들때 왜 XML 기반으로 만들지 않고서 이제와서 새로운 것을 추가하느냐 등등 의견이 많지만 일단 MSBuild를 지켜보기로 하지요.
MSBuild에 대한 내용은 AKipman"s MSBuild에서 자세히 살펴볼 수 있습니다.


7. RSS ScreenSaver

이것또한 기발한 아이디어라고 생각했습니다. 예전에 푸쉬(Push) 서비스 이야기가 한창일때 화면 보호기에 뉴스나 주식 정보를 뿌려준다는 게 유행했었는데 별로 실효성이 없었죠.
하지만, 이건 꽤 쓸만할 것 같아요. 그 당시엔 푸쉬가 일반적이지 않았지만 이젠 RSS로 푸쉬가 점차 일반화되는 것 같습니다.
불행히도 이 프로그램은 Visual C# Express의 예제로 포함되어 있습니다. ^^


8. 컴퓨터 오류문장으로 만드는 티셔츠

Errorwear에서 이러한 셔츠를 만들고 있습니다. 제가 기억하는 것은 멋진 몸매의 여성이 블루스크린 티셔츠입니다. 어쨌거나 윈도우, 맥, HTTP 등 다양한 에러로 만들어진 옷을 구경하실 수 있습니다.


9. 시간에 따른 변화를 추적하기, Timeformation

어떤 것들을 시간의 흐름에 따라 살펴볼 수 있다는 것은 정보를 매우 시각적으로 다룬다는 점에서 흥미있습니다.
여기 맨하탄, 뉴욕을 시간에 따라 어떻게 변화했는가 보여주는 Timeformations가 있습니다.
그리고 많은 사람들이 좋아하는 리눅스 커널을 시간의 흐름에 따라 시각화한 프로젝트가 있습니다. Treemap Visualization of the Linux Kernel 2.5.33이 바로 그것입니다.
Treemap이 익숙하지 않은 분들께 리눅스 커널 발전과정을 멋진 3D 애니메이션으로 보여주는 프로젝트도 있습니다. A 3D Animation of Linux Source Code Development가 그것입니다. 이러한 3D Animation을 보고 있으면 왠지 80/20 법칙이 생각납니다. 인터넷 사용자의 80%는 전체 사이트의 20%에 집중되어 있다. 회사 수익의 80%는 20%의 종업원에게서 나온다. 라는 이야기가 떠오릅니다.
자신의 디스크 사용량을 Treemap으로 보여주는 SpaceMonger라는 프로그램도 있습니다.


10. 개발자의 필수! 레퍼런스 카드

많은 분들이 책상에 레퍼런스용 책을 가지고 있을 겁니다. 그리고 생각나지 않는 것들을 찾기위해 이곳저곳 뒤지기도 하지요. A4에 보기 좋게 정리한 레퍼런스 카드가 있어서 한 눈에 참조할 수 있다면 좋지 않을까요?

RefCards에 가시면 Apache, C, MySQL, cvs, gdb, XHTML, XML, XSL, CSS등에 대한 레퍼런스 카드를 PDF로 받을 수 있습니다.
PHP를 쓰고 있어서 그에 대한 레퍼런스 카드가 없는데, DigiLife에 가시면 Ada, C, C++, JSP, Java, PHP등 다양한 프로그래밍 언어에 대한 카드가 있습니다.


11. 닷넷으로 만든 Paint.NET

Paint.NET은 MS의 지도아래 학생들이 닷넷 언어를 배우면서 만든 프로그램입니다. 큰 특징은 레이어 기능을 제공하고, Undo/Redo 등의 기능을 제공한다는 점입니다. 졸업 후의 진로에 대해 적혀있는 프로필을 보면서 졸업작품 같은 느낌이 들었습니다. 가을에 신학기가 시작하는 점을 보면 졸업작품같았습니다. 정말 멋진 프로그램입니다. 소스 코드도 곧 공개예정이라고 하네요.

null


12. C# 3.0 소식

C# 2.0 정식버전도 아직 발표되지 않았지만 이미 C# 3.0에 대한 소식들이 전해지고 있습니다.
Channel9의 앤더슨 헤즐스버그(C# 언어 설계자)의 인터뷰가 그것입니다.
C# 3.0에는 드디어 제가 그렇게 기다리던 Polyphonic C#이 추가될 전망입니다. Polyphonic C#은 Modern Concurrency Abstractions for C#에서 참고하실 수 있습니다. 이에 대해 감회가 새로운 건 윈도우 사용자 그룹에서 2002년 경에 제가 닷넷 스레드 프로그래밍에 대한 세미나 후반에 잠시 설명한 적이 있습니다. 3.0은 2007년 이후에나 볼 수 있지 않을까라고 생각하면 제가 지나치게 앞서간 부분도 있는 것 같습니다. 현재, Polyphonic C#은 Join C#이라는 이름에서 현재는 Comega로 불리우고 있습니다. Comega는 C# 언어에서는 Concurrency Abstractions 부분을 확장하고 있고, XML과 데이터 처리에서는 X# 언어의 확장을 시험하고 있습니다.
멀티 스레드 버전의 Buffer 코드를 작성할 때 메서드 선언을 Chord(코드, 뜻은 "화음")라 부릅니다. Chord 선언은 대충 이렇습니다.

public class Buffer
{
   public string Get() & public async Put( string s ) {
      return s;
   }
}

Buffer buffer = new Buffer();
buffer.Put( "Hello" );
buffer.Put( " Cruel World " );
Console.WriteLine( buffer.Get() + buffer.Get() );

async는 Put() 메서드가 비동기임을 나타내며, Get()에 대한 호출과 Put()에 대한 호출이 일치하는 경우에만 메서드 안의 코드(여기서는 return s; )가 실행됩니다. 컴파일시에는 우리가 아는 C# 코드(plain C# code)로 변환됩니다. ^^;

어쨌거나 C# 2.0은 STL 지원이라는 작은 변화라면 C# 3.0은 보다 큰 변화를 예고하고 있습니다. 2.0보다 3.0이 기대되는 것은 저만의 생각일까요??


13. AOP(Aspect Of Programming)과 윈도우 XP SP2

윈도우 XP SP2의 변화는 XP SP2 살펴보기라는 기사에서 제가 한 번 정리한 적이 있습니다. 제 이름이 없다구요? 사실은, "이봐! 전부 당신 글이잖아!!"라는 후문이 있어요. ^^
윈도우 XP SP2의 큰 특징의 하나는 방화벽 기능입니다. 그리고 네트워크 프로그램은 윈도우 XP SP2의 방화벽과 상호작용이 필요할거구요. 일일이 프로그래밍 한다면 어렵겠죠? Mitch Denny의 FirewallPermission: For the XP SP2 Enabled를 참고하세요.

[FirewallPermission(SecurityAction.Demand, Port = 1234)]
public void SomeCode()
{
}

굉장히 멋지지 않나요? 이것 역시 AOP의 힘이라 생각됩니다. 닷넷의 Attribute라는 것은 AOP가 반영된 것입니다. 자바에서는 AspectJ가 있습니다.


14. AOP와 EasyThread

UI에서 처리시간이 긴 작업을 백그라운드로 처리할 수 있다면 멋지지 않을까요? 자바에서는 처리속도가 느리므로 UI에서 스레드를 이용하는 경향이 있습니다. 하지만, 백그라운드 작업을 진행하려면 그에 따른 코딩 작업과 스레드 안정성 문제로 인해 프로그램은 복잡해져 버립니다. 이를 간단히 특성(Attribute)을 이용해서 해결합니다. 메서드에 변화가 필요하지 않아요. 굉장히 멋지지 않나요?

[BgThread]
void BuildList()
{
   // some codes
}

[FgThread]
void ClearList()
{
   // some codes
}

VC++에서 ATL 등을 사용하시는 분이라면 이미 Attribute based programming을 하셨을 거에요. 굉장히 충격적이죠. ^^

Attribute에 대해서 추가로 얘기하자면, 위와 같이 작업을 추상화하는 것도 좋지만 분산 환경에서도 그 위력이 발휘됩니다. const가 들어간다면 DLL을 참조해서 컴파일한다해도 컴파일시에 이미 그 상수값이 들어가 버립니다. 따라서 참조한 DLL에서 상수값을 5에서 10으로 변경했어도, 이미 컴파일된 프로그램에서는 상수값을 5로만 알고 있게됩니다. DLL을 배포할 때 이런 점이 문제가 되는데 Attribute를 이용하면 이런 문제를 해결할 수 있습니다.(물론, 설정파일 이용등도 있겠지만요)
따라서, 분산환경에서 const는 현재 거의 사용하지 않아야 할 것이 되고 있습니다.
Attribute의 또 재미있는 특징은 [FirewallPermission(SecurityAction.Demand, Port = 1234)]에서 볼 수 있는 것처럼
FirewallPermissionAttribute가 클래스이므로(C#에서는 Attribute를 생략할 수 있지요) []안의 구문은 실제로 생성자 구문입니다.
클래스의 생성자에 인자를 전달할 수 있는 특이한 구조를 취한다는 점도 생각해 보시면 즐거울 것 같아요. Attribute에 대한 심도 있는 공부가 필요할 것 같습니다. C++ Template이 입문서에 챕터 하나로 다뤄지던 것이 이제는 두꺼운 책으로 다뤄지고 있는 것처럼 Attribute 역시 언젠가 두꺼운 책으로 다뤄지는 날이 오기를 기대해봅니다. ^^
앞으로도 닷넷에 좋은 기능들이 추가될 것을 기대해 봅니다.
Attribute에 대해 심도있는 학습을 원하시는 분은 Applied .Net Attribute, APress를 권합니다. 사실, 출간되자마자 구입하느라 고생했습니다. 책을 입수하기까지 무려 3개월이 걸렸거든요. ^^


15. IA32와 IA64에서 SQL Server의 수행성능 비교

Microsoft SQL Server and Itanium 2: High Performance and Low TCO에서 수행성능 비교한 자료를 내놓았습니다. 윈도우 2003 64비트 버전과 SQL Server 2000 64비트 버전에서의 수행성능을 비교하고 있네요.


16. C#/VB.NET 코드를 이쁜 HTML로 변환

codebraian이 있습니다.
웹에 코드를 올리는 일이 잦은 저에겐 유용한 툴이 되겠네요 ^^


17. VisualBlogger 2004

VisualBlogger는 닷넷으로 제작된 프로그램입니다. TypePad, MovableType 등을 쓰이는 분들은 이 툴을 이용해서 자신의 블로그에 글을 올릴 수 있습니다. 이 프로그램은 HTML을 직접 코딩할 필요없이 위지윅 편집으로 편하게 글을 올릴 수 있게 해줍니다. 동영상을 보여줄때도 클릭 몇 번으로 올릴 수 있게 해줍니다. ^^
TAG :
댓글 입력
자료실

최근 본 책0