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

한빛출판네트워크

컬럼/인터뷰

Programming C#의 저자 제스 리버티와의 인터뷰

한빛미디어

|

2001-08-16

|

by HANBIT

11,774

C#의 목적은 닷넷 개발을 위해 단순하고 안전하며, 객체 지향적이고, 인터넷 중심적인 성격을 가진 고성능의 언어로서의 역할을 하는 것이다. 제스 리버티는 윈도우 관련 개발 경력이 많으며, C#과 닷넷을 처음부터 작업해 왔다. 제스는 오라일리의 『Programming C#』을 저술하느라 그 동안 고군분투해 왔다. 이 책은 경험 있는 프로그래머를 대상으로 하였으며, C#이라는 새로운 언어에 대해 마이크로소프트 닷넷 플랫폼과 데스크톱, 인터넷 애플리케이션의 개발이라는 맥락에서 설명하였다. 우리는 이 인터뷰에서 제스에게 C#과 닷넷에 대해 개발자가 알고 싶어하는 것을 물었다.
Programming C#
스튜어트: 닷넷에 대해 언급하지 않고는 C#에 대해 논의할 수 없겠죠. C#과 이번에 새로 출간한 책에 대해 세부적으로 들어가기 전에 큰 그림을 그려 봅시다. 닷넷 프레임워크란 무엇입니까? 리버티: 닷넷 플랫폼은 현존하는 운영 체제의 상층부에 있는 새로운 운영 체제입니다. 그것은 적어도 새로운 개발 프레임워크 입니다. 닷넷은 마이크로소프트가 지난 몇 년간 개발했던 기술과 구조적인 접근을 한 데 모은 집약체 입니다. 여기에는 COM+ 컴포넌트 서비스도 포함됩니다. 이것은 ASP 웹 개발 프레임워크를 현저히 업그레이드한 것이며, XML과 객체 지향 디자인을 연결한 것이며, SOAP 등의 새로운 웹 서비스 프로토콜을 지원하고, 인터넷에 초점을 맞추고 있습니다. 이 모든 것이 DNA 구조 안에 통합되어 있습니다. 마이크로소프트는 80 퍼센트의 조사비와 개발비를 닷넷이나 관련 기술에 투자하였습니다. 즉, 매 년 몇 십 억 달러를 개발비로 사용했다는 것이지요. 이렇게 투자한 결과 닷넷이라는 거대한 프로그램이 탄생하였습니다. 전체 플랫폼은 네 부분의 제품군으로 구성되어 있습니다. 첫 번째 그룹은 C#, VB.NET 등의 언어, Visual Studio.NET 등의 툴, 웹 서비스와 웹, 윈도우 애플리케이션을 구축하는데 필요한 포괄적 클래스 라이브러리, 프레임워크 내에서 구축된 객체를 실행하기 위한 CLR(Common Language Runtime)입니다. 제가 저술한 『Programming C#』에서는 닷넷 중 이 부분에 초점을 맞추었습니다. 두 번째 그룹은 닷넷 엔터프라이즈 서버입니다. SQL Server 2000, Exchange 2000, BizTalk 2000 등이 이전에 알려졌던 엔터프라이즈 서버였습니다. 서버는 관계형 데이터 저장, 이메일, B2B 상업 등을 위해 특화된 기능을 제공합니다. 세 번째 그룹은 상업적인 웹 서비스로 구성되어 있는데, 최근 헤일스톰(Hailstorm)이라는 프로젝트로 발표되었습니다. 개발자는 비용을 약간만 지불하면 사용자의 신원을 알아야 하는 애플리케이션을 구축하는 데에 이러한 서비스를 사용할 수 있습니다. 마지막으로 네 번째 그룹은 닷넷이라는 새로운 개념을 사용할 수 있는 장치입니다. PC를 말하는 것이 아니라 핸드폰이나 게임 박스 등을 말하는 것이죠.
 데스크톱 애플리케이션이라는 개념은 이제 구식이 되어 가고 있습니다.
스튜어트: 마이크로소프트가 닷넷을 통해 데스크톱 애플리케이션을 만드는 데에서 네트워크 서비스를 만드는 것으로 초점을 바꾸었다고 생각하십니까? 리버티: 우리는 지금 데스크톱 애플리케이션과 웹 애플리케이션을 별개의 것으로 생각하고 있습니다. 닷넷은, 이러한 구분이 의미가 없어질 것이라는 것을 나타냅니다. 웹에 접근하는 것이 데스크톱 애플리케이션으로 통합되고 있고, 데스크톱 애플리케이션은 웹을 통해 분산되고 있습니다. 예를 들자면, Microsoft Streets & Tips라는 프로그램을 통해 지도와 방향을 알 수 있습니다. 출발 지점과 목적지를 입력하면, 어느 길로 가야 할 지 표시될 것입니다. 이것은 지금 웹으로 통합되어, 지도에 있는 도로에 대한 정보를 업데이트할 수 있습니다. 그렇다면 이것은 데스크톱 애플리케이션입니까, 아니면 웹 애플리케이션입니까? 마찬가지로 점점 더 많은 애플리케이션이 원격 컴퓨터에서 실행되는 모듈이나 웹 서비스를 통합하고 있습니다. 데스크톱 애플리케이션이라는 개념은 이제 구식이 되어 가고 있습니다. 스튜어트: 썬이 자바 기술로 달성하고자 했던 것과 닷넷은 많이 비슷한 것 같군요. 닷넷이 자바 플랫폼보다 더 나은 점이 있다면 무엇입니까? 리버티: 닷넷은 윈도우에서 운영되며, 마이크로소프트가 만들었습니다. 다음 질문을 해 주십시오. 진지하게 말씀 드리자면, 그건 대다수의 기업의 필요를 충족시키고도 남을 것입니다. 자바가 어떤 점에서는 더 낫다고 생각하는 개발자도 있겠지만, 마이크로소프트는 이미 예전에 데스크톱 시장에서 승리했습니다. Win2K는 안정적이고 빠르게 웹 개발을 할 수 있는 플랫폼입니다. 많은 개발자가 윈도우에서 애플리케이션을 개발하고 싶어할 것입니다. 기술적인 관점에서도 닷넷은 자바보다 우선적이며, 미적입니다. 저는 이러한 전제에 근거를 대려고 하지는 않겠습니다. 솔직히 말해서 어떤 게 더 나은지에 대해서는 깊이 생각해 본 적이 없습니다. 마이크로소프트는 훌륭한 솔루션을 만들기 위해 계속 노력할 것이며, 저는 어떤 플랫폼을 사용할 지 고민하기 보다는 저의 기술을 높이는 데 에너지를 쏟아 부을 것입니다. 스튜어트: 네, 그렇다면 C#이라는 언어에 대해 살펴 보도록 하지요. 닷넷 프레임워크에 C#이 어떻게 조화될 수 있죠? 리버티: 마이크로소프트는 닷넷이라는 것으로 급진적인 일을 했습니다. 이러한 개념에 익숙해지기 까지는 시간이 다소 걸렸죠. 언어를 만들기 전에, 공통 언어 규약(CLS: Common Language Specification)이라는 것으로 시작했죠. CLS로 컴파일하는 언어는 무엇이든 닷넷 플랫폼에서 실행될 수 있습니다. 게다가 CLS를 따르며, 공통 타입 시스템(CTS: Common Type Sysrem)으로 정의된 타입만을 사용한다면, 객체는 모든 CLS 언어와 상호 운영될 수 있습니다. 즉, C#에서 파생된 VB.NET에 있는 클래스를 만들 수 있으며, 그 다음에 C#에서 파생된 클래스를 다시 VB.NET에 만들 수 있습니다. 이렇게 하기 위해 새로운 언어를 만들었고, 그리고 나서 그 언어를 두 가지 구문으로 구현했습니다. 하나는 C#인데, C++이나 자바와 성격이 비슷합니다. 다른 하나는 VB.NET이며, VB와 유사합니다. C#과 VB.NET은 구문은 다르지만 그 본질은 같습니다. C#은 VB.NET보다 약간 낫지만 그리 중요한 차이점이 있는 것은 아니고, 대부분의 차이는 개념적인 것입니다. 나는 VB 6 프로그래머들이 어쨌든 C#을 배워야 하기 때문에, C#으로 많이 바꿀 것이라고 생각했습니다. 스튜어트: C#의 주요 강점은 무엇입니까? 당신이 좋아하는 점이 있다면 말해 주세요. 리버티: 저는 가비지 컬렉션 기능이 마음에 듭니다. 프로퍼티와 foreach 루프도 매우 좋습니다. 아, 그리고 클래스 선언을 할 때 세미콜론이 필요 없습니다. 이거 대단하지 않습니까? 사실 언어의 특성을 설명하는 것보다 중요한 점이 있습니다. 그것은 바로 프레임워크 자체입니다. 메타데이터에 대한 지원(속성과 리플렉션), 병행(overlapped) I/O, 스트림, 네트워킹 등이 있기 때문에 당신은 가까이 있는 일에만 집중하면 되고, 배관을 다시 만들 필요가 없습니다. 아마 닷넷에서 가장 좋은 점은 웹폼(WebForm)과 윈도우 폼(Windows Form)일 것입니다. 이것 때문에 산업의 프로그래밍에서 고속 응용 프로그램 개발(RAD: Rapid Application Development)을 사용할 수 있게 되었습니다. 스튜어트: 웹폼과 윈도우 폼은 어떤 기능을 합니까?
 C#과 VB.NET은 구문 다르지만 그 본질은 같습니다.
리버티: 네, 이것은 물론 너무 방대한 주제입니다. 하지만 간단히 대답하자면, 닷넷은 고속 응용프로그램 개발 툴을 VB6에서 C#으로 가져왔으며, 드래그 앤 드롭 컨트롤(리스트 박스, 라디오 버튼 등)을 이용하여 윈도우 애플리케이션과 웹 애플리케이션을 만들 수 있게 했습니다. 대부분의 웹과 윈도우 애플리케이션은 데이터를 중심으로 데이터 접합(data gathering)과 디스플레이를 중심으로 되어 있으며, 그러한 형식이 알맞은 것이라는 가정입니다. 웹 폼과 윈도우 폼은 다른 컨트롤을 사용하지만, 공통점도 많고, 프로그래밍 모델이 매우 비슷합니다. 본질적으로, 그 형식으로 컨트롤을 드래그하고, 이벤트 핸들러를 작성하여 각 컨트롤이 일으키는 이벤트를 구현합니다. 컨트롤은 사용자 행동에 응답하여 이벤트를 일으킵니다. 예를 들면 사용자가 어떤 버튼을 클릭하면, 버튼이 클릭 이벤트를 일으키고, 이벤트 핸들러 코드가 버튼 클릭에 응답하여 원하는 액션을 발생시킬 것입니다. 웹 폼은 ASP 기술 위에 구축되었으며, 이벤트 핸들링 코드와 다른 지원 코드를 aspx 페이지에 HTML과 함께 작성할 수 있긴 하지만 그리 좋은 방법은 아닙니다. 그대신 웹 폼에서는 aspx 페이지와 결합된 "code behind" 페이지를 제공합니다. 하지만 aspx 페이지는 전시 코드(html)과 구현 코드(C#이나 기타 닷넷 언어)를 분리할 수 있습니다. 웹 폼과 ASP.NET에 대한 가장 좋은 소식은 구현 코드가 스크립트 형식이 아니라는 것입니다. C#으로 완전히 컴파일되고, 예외 처리, 속성, 리플렉션 등을 지원합니다. 닷넷 버전 1에서는 윈도우 애플리케이션과 웹 애플리케이션을 작성하는 것이 거의 차이가 없으며, 둘 사이의 차이는 시간이 지날수록 줄어들 것입니다. 스튜어트: 그렇다면 웹 폼과 윈도우 폼의 차이점은 뭐죠? 리버티: 웹 폼과 윈도우 폼의 주된 차이점은 웹 애플리케이션을 작성할 때에는 이벤트 처리가 서버에서 발생한다는 것입니다. 새로운 HTML 페이지를 브라우저에 돌려보내서 이벤트를 서버에 보내고 그에 응답을 하는 데에는 시간이 걸리기 때문에, 웹 폼에서는 더 적은 이벤트로 응답을 처리합니다. 이러한 규칙에 맞는 이벤트만 페이지를 업데이트할 것입니다. 마우스가 통제의 영역으로 들어와서 윈도우 폼을 조정할 때, 통제 영역 안에서 돌아다닐 때, 그리고 마우스가 영역에서 나갈 때 이벤트가 각각 발생하지만, 이러한 이벤트는 웹 폼 컨트롤에서는 발생하지 않습니다. 웹 폼은 전형적으로 클릭 이벤트에 응답하며, 프로그래머가 선택한다면, 통제의 상태를 변경하는 다른 이벤트에도 응답합니다. 어느 이벤트가 페이지를 서버로 다시 보낼 지에 대해서는 선택의 폭이 넓습니다. 스튜어트: C#은 C++과 비교하면 어떻습니까? 리버티: 저는 MSDN magazine에 C++에서 C#으로 전환하는 것에 대해 글을 썼습니다. 그 글에서 저는 C++과 C#의 진정한 차이는 구문이 아니라, C#이 닷넷 관리 환경에 맞추어 디자인되었다는 점을 강조하였습니다. C++에서는 객체의 생성과 레이아웃을 통제할 수 있었는데, C#에서는 그러한 통제를 플랫폼에서 합니다. 그래서 객체의 생명 주기에 대해서 명시적으로 통제할 수 없습니다. 마무리는 가비지 컬렉터에서 하게 됩니다. 구문의 차이는 아주 사소합니다. 제 웹사이트에 FAQ for Programming C#이라는 항목을 만들어서 구문적인 차이의 목록을 작성하였습니다. C++ 프로그래머는 이러한 변화 중 대부분을 쉽게 이해할 수 있을 것입니다. C++에서 C#으로 전환하는 것은 쉬울 것이며, 닷넷의 이점을 활용할 수 있다는 데에서 즐거움을 느낄 수 있을 것입니다. 개인적으로 나는 C#에서 다시 C++로 돌아가지 않을 것이며, 아무도 저를 그렇게 설득할 수 없을 것입니다. 스튜어트: 비주얼 베이직은 어떻습니까? 조슈아 트루핀이 MSDN Magazine에서 C#을 "비주얼 베이직에서 좋은 점을 모두 취해서 그것을 C++에 붙인 것이다. 하지만 C와 C++에서 전통적으로 모호하게 생각했던 것을 다듬었다."고 평가했습니다. C#이 VB의 쉬움과 C++의 강력함을 결합한 것이라고 말할 수 있습니까? 리버티: 나는 조쉬와 논쟁한 적이 전혀 없습니다. C#은 VB6에서 고속 응용프로그램 개발의 특성을 많이 따왔으며, 이 점은 훌륭합니다. 루프와 특성을 빼면 언어 자체가 VB에서 차용해 온 것이 무엇인지 확실히는 모르겠습니다. 하지만 C++에서 애매했던 특성을 C#에서는 잘 다듬었다는 것은 분명합니다. C++의 핵심적인 특징이었던 포인터의 역할을 많이 줄인 것을 예로 들 수 있겠지요. C#은 다중 상속성을 제공하지 않지만, 이것이 크게 부담이 되지는 않습니다. 자바 프로그래머라면 이 점에 대해 잘 알고 있을 것입니다. 없어진 기능의 대부분은 별로 중요하지 않거나 사용하지 않는 것들이죠. 나는 지난 몇 년간 C++과 VB를 사용하였습니다. 저는 둘 다 좋아했지만, 제 생각에 C#은 이 두 언어보다 탁월한 것 같습니다. 스튜어트: 마이크로소프트는 C#의 디자인이 현대적이기 때문에 C++로 프로그램을 할 때 생겼던 에러를 대부분 없앴다고 주장하고 있습니다. 왜 C#을 사용하면 에러가 덜 생깁니까? 리버티: 가장 큰 변화는 가비지 컬렉션입니다. 프레임워크에서 메모리를 관리하기 때문에 가장 처리하기 어려웠던 에러가 몇 가지 없어질 것입니다. 게다가, 가비지 컬렉션 기능이 있기 때문에, 예외가 있는 상황에서 힙(heap) 기반의 변수를 처리하기가 훨씬 쉽습니다. C++을 사용해서 객체를 힙에 생성하고 예외가 생겼다면, 스택을 풀고 객체를 절대 지우지 않는 것이 가능했습니다. 이렇게 하면 일시적으로 메모리가 유출되었습니다. 스마트 포인터로 이렇게 할 수 있는 방법이 있었지만, 에러가 생기기 쉬웠습니다. 하지만 C#을 사용하면 이런 일이 생기지 않습니다. 사소한 에러를 막아 주는 특성은 그 밖에도 많습니다. 예를 들어 "if" 문에는 부울(Boolean) 값이 필요하고, 정수 값은 부울 명시적으로 부울로 정하지는 않습니다. 따라서 if(foo==bar)를 쓰려다가 if(foo=bar)라고 썼기 때문에 생기던 고전적인 에러는 완전히 없어졌습니다. 즉, if(foo=bar)는 컴파일되지 않는다는 것입니다. 스튜어트: 『Programming C#』이 마이크로소프트에서 제공하는 온라인 문서 등 다른 정보 소스에 비해 좋은 점은 무엇입니까? 리버티: 마이크로소프트는 많은 정보를 제공합니다. 전 거기에 경쟁하려는 생각은 없습니다. 제 책은 레퍼런스가 아니라 튜토리얼입니다. 저는 책에 대해 꼭 하고 싶은 말이 있습니다. 저는 독자들이 주제에 대해 꿰뚫어볼 수 있는 눈을 가질 수 있게 할 것이며, C#의 가장 중요한 부분을 구분할 수 있도록 도울 것이며, 이 언어로 소프트웨어를 개발할 수 있게 할 것입니다. 마이크로소프트가 내놓은 프로그램은 방대합니다. 저는 방대한 것에 대한 가이드가 되기 위해 책을 썼습니다. 오라일리와 몇 달간 교정과 편집을 한 후, 왜 다른 책이 아니라 오라일리 책을 보아야 하는지 알게 되었습니다. 편집자들의 실력이 대단하기 때문이죠. 그래서 좋은 책이 나오는 것입니다. 스튜어트: 『Programming C#』은 어느 정도 수준의 독자를 대상으로 하였습니까? 리버티: 『Programming C#』은 프로그래밍 경력이 있는 독자를 대상으로 하고 있습니다. 전에 프로그램을 한 경험이 전혀 없다면, 아무리 똑똑한 사람이라도 이 책을 읽기 좀 어려울 수 있습니다. 이 책은 초보자를 대상으로 하지는 않았습니다. 대부분의 독자는 아마 C++이나 자바, VB에서 C#으로 바꾸려는 사람일 것이며, 이 책도 그러한 독자에 맞추어 집필되었습니다. 하지만 언어에 대한 사전 지식이 없는 사람들을 대상으로 책의 베타 판에 대한 설문 조사를 해 보았는데, 그러한 배경 지식이 없어도 내용을 대강 알 수 있다고 하더군요. 스튜어트: 『Programming C#』는 어떤 내용으로 되어 있습니까? 리버티: 이 책은 세 부분으로 구성되어 있습니다. 첫 번째 부분에서는 언어와 객체 지향 프로그래밍에 대해 설명합니다. 두 번째 부분에서는 언어로 애플리케이션을 구축하는 방법을 설명하였으며, 마지막으로 닷넷 프레임워크의 핵심 기능을 언급하였습니다. 『Programming C#』을 읽으면 C#의 세부 사항에 대해 이해할 수 있을 것입니다. 언어 자체의 구문 뿐 아니라, 객체 지향 프로그램을 디자인하고 구축하는 방법, 캡슐화(encapsulation), 전승(inheritance), 다형성(polymorphism) 등을 구현하는 방법을 이해할 수 있을 것입니다. 당신은 C#으로 어떻게 윈도우 애플리케이션이나 웹 서비스를 구축하는지에 대해 핵심을 이해해야 합니다. 그리고 속성과 리플렉션, 마샬링, 시리얼화, 스레딩, 병행 I/O, 파일을 만들거나 파일에 내용을 써넣고, 스트림을 이용하여 네트워크를 가로지르는 등의 일들에 익숙해져야 합니다. 마지막으로 어셈블리, 애플리케이션 도메인, 컨텍스트와 애플리케이션을 만들고 배치하는 것 등에 대해 이해를 잘 하고 있어야 합니다. 스튜어트: C#은 읽을 수 있는 문서를 소스 코드로부터 직접적으로 생성하기 위해 컴파일러에서 사용될 수 있는 XML 설명 태그와 융화할 수 있는 최초의 언어입니다. 그런 특성을 사용해 본 적이 있습니까? 그리고 개발자가 웹 서비스를 만드는 데 XML이 얼마나 중요하다고 생각합니까? 리버티: XML 문서는 매우 좋고, 책에서도 그것을 소개하였습니다. 대부분의 C# 개발자가 XML 자체를 중요하게 생각하는 한편, 자신과 무관한 것으로 생각합니다. 많은 하부구조가 XML을 중심으로 구축되었기 때문에 XML은 중요합니다. SOAP 프로토콜은 문서화나 다른 툴과 마찬가지로 XML에 기반하여 대부분의 원격 서비스와 웹 서비스에서 사용됩니다. 한편, 비주얼 스튜디오 닷넷은 XML의 세부 사항을 거의 숨기고 있으며, 대부분의 C# 프로그래머는 원하지 않는다면 XML의 복잡성을 이해할 필요가 없습니다. 스튜어트: C#이 개발자 커뮤니티에서 얼마나 수용이 잘 될 것 같습니까? 이 언어가 전에는 윈도우 애플리케이션을 개발한 적이 없는 개발자에게도 어필할 것이라고 생각합니까? 리버티: 아주 좋은 질문이군요. 표본 집단을 제 동료로 삼은 설문조사 결과 많은 C++ 프로그래머가 1년 안에 C#으로 바꿀 거라고 하더군요. C++이 2년 안에 한물 갈 거라고 하는 사람도 있었습니다. 윈도우 개발은 C#으로 하고, 유닉스 개발도 C#이나 자바 중 하나로 할 거란 말이지요. 이러한 주장은 너무 급진적일 수도 있지만, C++ 프로그래머가 오랫동안 C#을 무시할거라고는 생각하기 어렵습니다. 자바 프로그래머는 두 그룹으로 나눌 수 있을 것 같습니다. 한 그룹은 C#이 레드몬드(Redmond)가 만든 것이 아니라는 이유로 C#에 손을 대지 않을 것입니다. 다른 그룹은 두 가지 플랫폼 중에서 어떤 것이 상대적으로 좋은지 살펴볼 것이며, 아마 그들의 고객이 윈도우 기반의 솔루션을 만들어 달라고 요청한다면 C#을 사용하게 될 것입니다. 스튜어트: 시간 내 주셔서 감사합니다. 매우 재미있는 이야기였습니다. 확실히 개발자가 C#에 관심을 기울여야 할 필요가 있을 것 같군요. 리버티: 저야 말로 만나서 반가웠습니다. 『Programming C#』을 좋아하는 독자들이 많았으면 좋겠네요. 제스 리버티는 컴퓨터 컨설턴트이고, 교육자이자 닷넷과 웹 개발에 대한 책을 썼다.
TAG :
댓글 입력
자료실