정리 : 박성신 (sspark@sbmedia.co.kr)
작성 : 김승민 (kimsm@dreamwiz.com)
편집 : 한창우 (andre518@nownuri.net/hitel.net/chollian.net)
출처 : 지프데이비스
▶ MS의 자바 누르기 전략 C#의 실체를 파헤쳐라
▷ VB의 생산성과 C++의 파워를 결합한 객체지향 언어, C#
MS가 표준화 기관인 ECMA에 C#이라는 새로운 객체지향 언어의 스펙을 제출한
이후, 여러 매체에서 C#에 대한 갑론을박이 펼쳐지고 있다. 반 MS 진영의
수장격인 썬에서는 '전혀 고려할 만한 대상이 아니다'고 평가한 반면,
C#이 .NET 환경에서 가장 대표적인 언어가 될 것이라는 얘기도 흘러나오고
있다. 비주얼 베이직의 생산성과 C++의 강력함을 결합한 최신 객체지향 언어로
알려진 C#에 대한 갈증을 해소할 만한 자리를 마련했다.
지난 6월 26일, MS는 ECMA(http://www.ecma.ch)라는 표준화 기구에 C#이라는 새
로운 언어 스펙을 제출했다고 발표했다.
C#은 Microsoft.NET 플랫폼에서 실행되는 광범위한 응용 프로그램을 신속하게
작성할 수 있는 최신 객체지향 언어로, 모든 플랫폼의 모든 언어에서 쉽게
작성해 인터넷에서 실행되는 웹 서비스로 변환할 수 있다는 것이 MS 측의 설명.
특히 C#은 C와 C++의 장점인 성능과 세밀한 제어 기능을 희생하지 않고 신속한
개발이 가능하도록 설계됐으며, 이러한 설계에 따라 C#은 C와 C++ 기능의
대부분을 갖고 있다고 한다.
따라서 C와 C++ 언어에 익숙한 개발자는 C#을 쉽게 사용할 수 있음은 물론이다.
특히 C#은 MS가 드러내 놓고 강조하진 않지만, 그 동안 자바의 위세에 눌려있던
위축된 분위기를 탈피하겠다는 MS의 '자바 누르기' 전략을 내포하고 있다.
이러한 전략을 내포한 C#에 개발자의 이목이 집중되면서, 그에 대한 궁금증
또한 증폭되고 있다. 이에 MS의 객체지향 언어인 C#에 대한 궁금증을 해소할 수
있는 자리를 마련했다.
▷ Hello, World!를 출력하는 C#
음악 기호로서 #은 반음 올림을 의미한다. C++는 C 언어에 하나를 더했다는
상징적인 의미라는 것은 다 알고 있는 사실이다. 그렇다면 C#은 C 언어에
하나가 아닌, 반을 더했다는 의미일까? 다르게 말하면 C++에서 반을 빼냈다는
이야기인데 과연 그럴까.
프로그램 언어를 이해하는 가장 빠른 방법은 누구나 알고 있듯이, 그 언어를
이용해 직접 프로그램을 짜보는 것이다. 그렇다면, C#에 대한 이해도 이 방법을
취하는 것이 바람직할 것이다. 그럼 시작 프로그램으로 무엇을 먼저 작성해
볼까? 필자와 독자의 머리 속에는 당연히 'Hello, World!'를 화면에 출력하는
프로그램이 떠오를 것이다.
using System;
class Hello
{
static void Main()
{
Console.WriteLine(Hello, World!);
}
}
더 이상의 설명이 필요없을 정도로 간결하다. 그런데 좀 이상하지 않은가. 전혀
낯설지 않은 것이 예전에 어디서 본 듯한 느낌이 들 것이다.
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println(Hello, World!);
}
}
위의 프로그램은 자바로 작성한 'Hello, World!' 출력 프로그램이다. 앞서
살펴본 C#으로 작성한 프로그램과 비교해 보자. 그러면 자바 코드로 혼동할 수
있을 정도로 C#이 자바와 많이 닮았음을 확인할 수 있다. 물론, 닮아보이지
않게 다음과 같이 시도해 볼 수도 있겠지만 말이다.
using System;
class Hello
{
static void Main()
{
goto H;
W: Console.WriteLine(World!);
return;
H: Console.Write(Hello, );
goto W:
}
}
[** 그린비주 - 위의 내용 보시고 웃으신 분들 많죠? 프로그래머를 웃기는
이런 방법도 있네요... ^_^]
▷ 썬, ‘전혀 고려할 만한 대상 아니다’
지난 6월 26일, MS의 C# 발표 이후 여러 매체에서 C#에 대한 논의가 활발히
진행되고 있다. MS에서 IT 관련 기술을 발표하면 항상 그랬던 것처럼 C#에
대해서도 반 MS 진영, 특히 자바를 개발한 썬에 의해 '전혀 고려할 만한 대상이
되지 않는다’는 평가를 받은 반면, C#이 .NET 환경에서의 가장 대표적인
프로그래밍 언어로 중요한 대상이 될 것이라는 평가도 함께 나오고 있다.
.NET이라는 인터넷 플랫폼 기반의 차세대 MS의 컴퓨팅 전략이 발표된 지난
2월 22일, 스티브 발머(Steve Ballmer)는 지난 6개월이 그를 포함한 MS 경영진
전체에게 아주 힘든 시기(The last six mon ths has frankly been wild,
absolutely wild…)였다고 솔직하게 고백했다. 그러한 어려움의 주된 원인은
누구나 잘 알고 있다시피, MS에 대한 미국 법무부의 반독점 소송(인터넷
익스플로러와 윈도우 운영체제를 결합해 판매한 것에 대해)에 있을 것이다.
인터넷 환경으로의 전환에서 볼 때, MS는 분명히 썬, 넷스케이프(지금은
AOL에 합병됐지만)와 같은 경쟁사에 비해 늦게 대처했다. 첫 걸음부터 늦게
출발한 입장에서 이미 두세 걸음 이상 앞선 경쟁사들의 기술을 따라 가기에
바쁠 때, 아마도 MS의 입장에서는 웹 브라우저 부분과 함께 썬이 개발한
자바라는 인터넷 기반 프로그래밍 언어가 가장 경쟁하기에 벅찬 상대였을
것이다.
지금 싸워야 할 적이 둘이라면 그 중에서 상대적으로 약한 적과 먼저 경쟁하고
나서, 강한 적과 자웅을 가려보려하지 않았을까? 인터넷 익스플로러라는
웹 브라우저를 계속 개발하면서 앞서 나가던 넷스케이프 네비게이터와 대응하는
반면, 자바 언어를 윈도우 운영체제의 프로그래밍 언어로 지원했던(비주얼 J++)
MS의 전략도 이런 맥락으로 해석할 수 있을 것이다. 어찌됐든, 인터넷
익스플로러는 점유율이나 기능적인 면에서 안정적인 위치에 들어 선 상태이다.
▷ '자바의 MS화를 더 이상 하지 않겠다'
모두가 다 아는 사실이지만 MS는 대부분의 자바 프로그래머들 특히, JDK기반
으로 코딩을 해 온 프로그래머들에게 많은 비난을 받고 있다. 그리고 이러한
비난은 MS가 자바를 비주얼 J++라는 이름으로 비주얼 스튜디오(Visual Studio)
에서 사용할 수 있도록 한 이후에 더욱 심화되고 있다.
특히, 비주얼 J++로 COM 컴포넌트를 생성할 수 있도록 만든 다음부터는
(자바 VM도 당연히 MS에 의해 수정됐을 것이고), 썬과의 관계도 더욱 악화됐다.
아마 MS의 입장에서도 자바라는 언어를 지원하고 있지만, 그건 지금까지의
추세를 거스를 수 없었기 때문이 아니었을까. 액티브 컨트롤(Active Control)로
자바 애플릿을 대체할 수 있다고 그 동안 줄곧 강조해왔지만 많은 수의 웹
프로젝트 설계자와 프로그래머들은 자바의 애플릿에 손을 들어주었다.
그런데 이제는 상황이 달라졌다고 판단을 내린 것 같다. .NET이라는 이름으로
그들의 차세대 컴퓨팅 솔루션과 비전을 정한 것도, XML의 표준화 작업에
주도적으로 관여해온 것도 이런 전략에 기반을 둔 것으로 보인다. 인터넷
기술에서 앞선 회사를 따라 가는 것이 아니라 그들의 솔루션으로 앞서 갈 수
있다는 자신감, 그러한 자신감을 보여주는 예가 바로 C#이라고 여겨진다.
C#에 대한 여러 공개 문서를 살펴보면, MS는 C#을 'a simple, modern, object-o
riented, type-safe한 프로그래밍 언어', 그리고 '비주얼 베이직의 높은
생산성과 C++의 파워를 결합한 프로그래밍 언어'라고 정의하고 있다. 또한
다음과 같은 단계로 윈도우 플랫폼에서의 프로그래밍 언어를 열거하고 있다.
>> 어셈블리 언어
>> C, C++
>> C#, J++
>> VB
>> VBA, 스크립팅 언어
여기서 우리가 주목해야 할 것은 C#과 J++를 같은 레벨에 두고 있다는 것이다.
그리고 아직 비주얼 스튜디오 7(또는 Visual Studio. NET)이 정식으로
릴리즈되지 않아 100% 확실성을 갖고 말할 수는 없지만, 더 이상 비주얼 J++가
비주얼 스튜디오 제품군에 포함되지 않을 것이라는 근거 있는 소문이 돌고
있다. 물론 MS는 써드파티에서 개발하는 어떠한 언어라도 비주얼 스튜디오에
포함시킬 수 있도록 지원한다고 말하고 있지만….
결국 이런 흐름을 정리해 보면, C#의 등장은 MS에서 '자바 언어의 MS화'를 더
이상 진행하지 않겠다는 의미로 받아들여야 하지 않을까? 그리고 자바, COM
프로그래머들에게 C#을 권유하고 있는 게 아닐까?
"Microsoft bids bye-bye to Java!!!"
▷ 최신 객체지향 언어인 C#의 특징
몇 가지 알려진 C#의 특징을 소개하면 다음과 같다. 특징이라고 표현했듯이,
반드시 장점이라고는 할 수 없는 것도 있다. 그리고 거듭 말하지만, 정식으로
C# 컴파일러가 릴리즈되지 않았으므로 변경 가능한 항목도 포함돼 있을 수
있다.
1. 기본 C# 프로그램 파일 확장자는 .cs
2. 애플리케이션의 시작점(entry point)은 클래스의 Main() 메쏘드
3. 단일 상속(Single inheritance), 다중 인터페이스 구현(Multiple interface
implementation) 지원
4. 자동 가비지 컬렉션(automatic garbage collection) 지원
5. 모든 것이 오브젝트(object) - 오브젝트라는 정의된 타입(predefined type)
이 최상위 오브젝트 타입(object type)
6. 전역 변수, 전역 함수 허용하지 않음
7. object, string, sbyte, short, int, long, float, double, bool, char 등의
자료형 지원. 이때 char는 UNICODE character임
8. 다차원 배열(multi-dimensional array)을 [,] 기호를 이용해 지원
9. 연산자 오버로딩(operator overloading) 지원
10. XML 데이터를 클래스 대신 직접 struct 데이터 형식으로 매핑할 수 있음
11. 모든 오브젝트는 자동적으로 COM object IUnknown 등의 필수적인 COM 인터
페이스 구현에 대한 부담을 줄여 줌. 그리고 오브젝트 프로퍼티(object
properties)에 대한 접근을 COM 메쏘드를 이용하지 않고, 비주얼 베이직과
같이 '.' 을 이용해 접근하도록 지원
12. 플랫폼에 의존적인 또는 플랫폼에 가장 최적화된 실행 코드 생성
13. 'unsafe'라는 키워드로 묶은 블럭(block)에서는 포인터를 이용해 C/C++와
같이 메모리 관리를 할 수 있음
14. 메쏘드들은 기본적으로 가상(virtual)이 아님
15. goto 문장 지원
16. MIDL보다 인터페이스 지원 강화 - 둘 이상의 인터페이스를 상속한
인터페이스 정의 지원
17. Forward declaration 필요 없음
18. 클래스 멤버(class member)의 접근(accessibility)을 5단계(public,
protected, internal, protected internal, private)로 세분화해 지원
19. foreach 문장을 지원해 주어진 컬렉션에서 자동으로 하나씩 구성 원소들에
operation 적용
20. lock 문장을 사용해 임의의 객체에 mutual-exclusion locking 지원
21. 이벤트 처리 기본 지원
22. 메쏘드 인자 개수 변화 지원
23. 네임 스페이스(Name space)와 네임 스페이스의 앨리어스 지원
24. Storage location과 무관한 속성(attribute)인 프로퍼티 지원
25. Struct는 call-by-value만 허용
26. 'delegate' 키워드를 이용해 C/C++의 함수 포인터(function pointer) 기능
이용 가능
▷ .NET 플랫폼의 핵심 언어?
.NET 플랫폼에서는 C#이라는 언어가 프로그래밍 언어로는 가장 핵심 역할을
하게 될 것 같다.
세계의 프로그래머 가운데 50% 이상이 비주얼 베이직으로 프로그래밍한다고
하는데, 그렇다면 C#이라는 언어는 어느 정도의 인기를 얻을 수 있을까? 자바,
COM 프로그래머들은 얼마나 빠른 속도로 C#으로 전환할까? C#에서 모든
객체들이 다 COM 객체라면, 이제 더 이상 'COM 프로그래밍은 접근하기가
어렵다'는 통념은 사라져버릴 것인가?
C#이라는 언어 그 자체보다 이런 것들을 더욱 궁금해하며 C#의 미래에 대해서는
독자들의 상상력에 맡긴다.
'내발자국[동호회]' 카테고리의 다른 글
[기사] 썬의 「다국어 지원 소스」 공개 의미 (0) | 2000.09.15 |
---|---|
[잡담] 서태지 자기만의 색깔과 장르... (0) | 2000.09.10 |
[잡담] 추천 정보 올렸습니다. ^_^ (0) | 2000.08.27 |
[정보] 추천 : 자바는 어디로 가고 있는가 (0) | 2000.08.27 |
[린비] 일본 갔다옵니다. ^^* (0) | 2000.08.04 |