C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[4014] 흠... 난 자바가 더 어렵던데...-_-;;
김백일 [cedar] 4531 읽음    2002-03-26 20:57
: 자바나 C#을 보고 쉬운 언어라고 하면 자바 혹은 C#의 고급 개발자들이 발끈하시겠지만, C++과
: 비슷하거나 더 어렵다고는 누구도 말하지 못할 것입니다. 사실, 지금은 아니겠지만, 90년대 후반에
: 자바를 시작하셨던 지금의 자바 고급 개발자 분들은 C++의 어려움에 중도에 포기하고 자바로 전향
: 하셨던 분들이 많았습니다. 또 지금의 MS의 정책을 보더라도, C# 개발자 층을 단기간에 채워서
: 자바에 대항하기 위해, VB 개발자로부터 C# 초급자를, VC로부터 C# 고급자를 보충하려는 의도가
: 군데군데 엿보입니다.
:
: C++은 원래부터가 강력한 성능을 위한 시스템 언어로서 설계된 것이므로 80~90년대의 C++ 열기는
: 다소 과열된 면이 없지 않았습니다. 이에 반해, 자바나 C#의 경우, 물론 각자 내세우는 언어 자체의
: 이상이 있기는 하지만 그보다는 먼저 쉬운 개발을 최우선으로 하고 있습니다.
:
: 다시말해, C++은 분명히 어려운 언어입니다. (문법보다는 사용하기가 어렵다는 말입니다. C++ 문법
: 자체는 대단히 단순하지요.) 먼 길이라는 것을 시작부터 분명히 인식하시고, 차근차근 한발한발
: 나아가셔야 합니다. 더 깊이 들어가시기 전에, 적어도 왜 다른 언어가 아닌 C++을 선택했는지를
: 다시 한번 깊이 고려해보시는 것이 좋을 겁니다. 그 고려의 결론이 돌아서는 것이든 혹은 남아있기로
: 결정하는 것이든 어느쪽이든 조해진님께 도움이 될 겁니다.

'자바는 C++보다 어렵다!'

저는 C++을 먼저 공부했어서 그런지...
저한테는 자바가 훨 어렵던데요. -_-;;
저만 그런건 아닐 겁니다.
임프님 말대로 문법 자체는 자바가 C++보다 훨씬 복잡하고 어렵습니다.
배우면 배울수록 C++과 많이 다르다는 걸 알 수 있으실 겁니다.

좋은 글 하나 소개하죠.

마소 작년 12월호의 특집의 '프로그래밍 언어의 숨겨진 진실과 거짓'에서 퍼왔습니다.
블루엣의 김재우님의 글입니다.

--------------------------------------------------------------------------------------------
(前略)

헛소문1. 자바는 쉽다.

워낙 자바가 유행하다보니, 자바를 프로그래밍 언어로 처음 배우
는 사람이 많다. 심지어 일부 대학에서도 신입생에게 자바를 가르
친다고 들었다. 하지만 함부로 그런 결정을 내리기 전에 배우는 이
들이 어떤 영향을 받게 될지 진지하게 고민해 볼 필요가 있다. 만
일 졸업하기 전, 한 5~6개월 정도 ‘실무적응훈련’식으로 자바나
C#을 가르치겠다면 말릴 이유가 없다. 그리고 그런 연습은 학생
스스로 할 수 있어야 한다. 그것이 안 된다면 잘못 가르치거나 제
대로 공부를 안한 것이다. 정말 자바(여기서 자바라고 하면 J2EE
등 관련 기술을 아우른다)나 C#(물론 닷넷을 아우른다)외에는 공
부할 게 없다면 몰라도 말이다. 운 좋게도 ‘뭘 배워야 할지’또는
‘뭘 가르쳐야 할지’를 아직 정하지 못했다면 이 글에서 실마리를
찾을 수 있었으면 좋겠다. 먼저 다음의 코드를 살펴보자.

import java.lang.*;

public class Test {
  public static void main(String [] args)){
    System.out.println("Hello,World");
  }
}

지겹도록 유명한 ‘Hello,World ’프로그램이다.
C만큼이나 질기게도 버텨온 ‘불후의 예제’다.
Hello,World 프로그램은 보통처음 언어를 배우는 사람에게 가장 간단한
프로그램 구조를 보여줄 때 사용한다.
말하자면 앞의 코드가 ‘가장 간단한’ 자바 애플리케이션인 셈이다.
그런데 수백 명이 모인 강단에서 이 가장 간단한 예제를 제대로 설명해야 한다고 하자.
모인 사람들은 처음으로 프로그래밍을 배워보겠다고 눈을 말똥거리며 앉아있다.
한 번 해보면 알겠지만 생각처럼 그리 쉽지 않다.
이 짧은 코드에는 정말 설명해야 할 것이 많다.
알다시피 이 예제에 나오는 모든 언어 구성요소를 정확히 알고 있다면
(그 때문에 이 예제를 쓰겠지만), 적게 잡아도 자바 언어의 3분의 1은 익힌 것이다
(JDK는 또 다른 문제이므로 여기서 JDK는 뺀다).

물론 편하게 넘어가고 싶다면 아주 좋은 방법이 있다. “자 이
예제는 이런 저런 글자를 화면에 찍습니다. 그러니 그런 줄 알고
외워 두도록 합시다”. 이렇게 간단하게 말하고 시험삼아 컴파일
이나 한 번 해주는 것이다. 대부분 첫 수업은 이런 예제로 별다른
설명 없이 지나가는 경우가 대부분일 것이다. 물론 몇 마디 설명
을 덧붙이겠지만 필자가 말하는 ‘가장 편한 방법’과 크게 다르지
는 않을 것이다. 어떤 방법을 쓴다고 해도 어려운 건 마찬가지다.
사실 지금까지 필자도 바로 이 예제를 그렇게나 잘 설명해보려
고 여러 방법을 다 써봤다. 아니, 여태까지 새로운 언어를 가르칠
때마다 비슷한 예제로 설명했으니 ‘Hello,World 전문가’라 불릴 만하다.

예를 들어 import는 package와 함께
‘전국을 왜 시.도.군.면으로 나누는가(Namespace Partition)’로,
System.out은 ‘전라도.돌쇠(Qualified Naming)’를 부르는 것과 같다는
식으로 부족한 유머를 섞어가며 설명하곤 했다(‘전라도.돌쇠’는
처음부터 거기 있었다(static object)’라고 설명해야 겠다). 어쨌
거나 배우는 사람들은 무척 재미있어 했다. 그런데 문제는 그 다
음이다. 재미있다고 문제가 해결되는 것이 아니란 말이다.나중
에 알고 보면, 자바만 수개월 공부한 사람도 처음에 배운 이 예제
속에 들어있던 ‘언어 구성요소(Language Constructs)’의 의미
(Semantics)를 제대로 모르는 경우가 아주 많았다.
그렇게나 쉽게 설명했는데 왜 잘 이해하지 못하는 걸까.
배우는 이가 노력을 덜한 탓일까. 물론 그럴 수도 있다. 그러나 꼭
그 때문 만은 아니다. 자바가 정말 처음 배우는 프로그래밍 언어라면
절대 저 예제를 쉽게 이해할 수 없다.
그냥 글자 몇자 찍는데도 저난리 법석을 떨어야하는데 어떻게 쉬울 수 있
을까. 세상에 저렇게 어렵고 가혹한 첫 번째 예제는 없다.
다시 말하지만, 그냥 배우는 사람의 지능이나 노력이 모자라서가 아니다.
이유는 딱 하나, 자바가 어렵기 때문이다.

초보자에게 자바는, 자바로 짜야할 프로그램보다 훨씬 어려운 언어다.
은사의 말씀대로 ‘자바는 쉽다(Java is easier)’뒤에 ‘C++ 보다(than C++)’
라는 말이 숨어 있는 것일지도 모르겠다.
그러나 자바는 지금까지 쏟아져 나온 다른 객체지향 언어와 비교해
봐도 절대 쉽지 않다. 그 ‘의미의 부모’라 할 수 있는 스몰토크에
비한다면 정말 복잡하다. 이제 이 예제를 다시 보자. 그리고 뭘 얼
마나 알아야 이해할 수 있는지 살펴보자. 다음은 Hello, World
예제를 이해하기 위해 알아야 하는 사항들이다.

◆먼저 import를 이해해야 한다.import는 package로 갈라놓은 name
space를 다시 뭉치는 기능이라, 이 둘을 한꺼번에 알아야 한다. 그리고 하
나 하나의 정확한 기능이 뭔지를 제대로 알려면 namespace가 뭔지, 왜
필요한지, 어떻게 써야 하는지 아는 것이 중요하다.

◆java.lang/java.io 같은 namespace가 왜 있고 어떤 것들이 그곳에 살고
있는지,적어도 동네 관광 정도는 해야 하지 않을까.

◆public과 같은 access modifier를 알아야 한다. 이때, private/protected까지
건드려야 하는 것인지 한참 고민하게 된다.

◆class와 static 사이에 알 수 없는 관계를 파헤쳐야 한다.특히 static
member 눈에 class는 그저 namespace일 뿐이다. 그 유명한 객체지향
과는 아무런 상관이 없다. 동시에 System.out이란 녀석도 static object
라는 걸 설명해야 한다. 더 나아가서는 그게 singleton instance라는 것
과 그 이유도 살펴봐야 할 지 모르며, System 안에 있는 그 형제들도 알
아야 할 필요가 있다.

◆void main(String []args)를 외우던지 아니면 이해해야 한다. C라도 다
뤄본 적이 있으면 그나마 다행인데 아니라면 정말 힘들다. 아마 예제를 몇
개는 더 만들어 설명해야 한다. 배보다 배꼽이 크다.

(中略)

◆자바는 수많은 언어(Lisp, Simula67, CLU, 스몰토크 등)의 계보를 이어
가는 프로그래밍 언어다.
◆자바는 C나 C++에서 문법을 빌어왔기 때문에 겉으로는 닮았지만 깊이
들여다보면 그 언어들과 매우 다르다.

앞 구절을 인용한 까닭은 프로그래밍 언어를 겉으로만 봐서는
잘 알 수 없다는 말을 하고 싶어서다. 특히 자바나 C#같이 더 좋
은 프로그래밍 언어를 만들겠다는 것 이외에, 여러 다른 목적(사
업성,플랫폼 의존성(?)등)을 한꺼번에 이루려는 야심을 갖고
있다면,더더욱 그럴 수밖에 없다. 하물며 고상한 목적을 위해서
만들기 시작한 언어도 얼마든지 잘못된 길로 갈 수 있다.
자바에는 수십 개의 언어가 하나로 뭉쳐있다. 프로그래밍 언어
표현력이 그렇다기보다 전체 환경이 그렇다. 자바를 쓰는 사람은
JDK를 써야 뭐라도 만들 수 있다. 세상 어디에도 프로그래밍 언
어 그 자체만으로 프로그래밍을 하지도 않고 할 수도 없다(너무
당연한 얘기다). 그래서 보통 표준 라이브러리는 그 언어의 일부
며, 대부분 언어의 프로그래밍 도구로서의 결함을 메우거나,운
영체제의 기본 입출력 자원을 가리기 위한 목적으로 언어와 함께
붙어 다닌다. 특히 자바와 같이 갇힌 환경에서는 잘 쓰던 라이브
러리가 있더라도, 그걸 버리고 JDK에 있는 걸 쓰는 게 속 편하
다. 정말 JDK에는 없는 것이 없고 점점 덩치가 커진다.
자바 그 자체를 배우는 것은 JDK를 배우는 것에 비하면 그래
도 작은 문제다. 공룡같은 JDK를 어떤 식으로든 배워야 한다는
건 골칫거리다. 새로 익혀야 할 사람이라면 덜 억울하겠지만, 지
금까지 잘 써오던 걸 내다 버리고 같은 기능을 하는 JDK의 일부
를 다시 익혀야 한다면 참 갑갑할 것이다. 어떤 툴킷(또는 라이브
러리)도 마찬가지지만, 어떤 응용 분야에 해당하는 라이브러리의 일부는
새로운 언어를 하나 더 배우는 것과 같다.
단지 같은 언어를 쓴다고, 즉 문법이 같다고 쉽게 생각하면 곤란하다.
예를 들어 네트워크 프로그래밍을 하려면 네트워크에 대한 기본 지식을 알
아야 하는 것은 물론이거니와 네트워크 라이브러리를 설계한 사람이 배려
한 구성요소와 그 구성요소 간의 결합방법, 효과를 잘 이해해야만 한다.
그 다음에 라이브러리를 잘 써야만 위험을 피할 수 있고,
문제가 발생할 때마다 어떤 식으로 해결해야 하는 지
그 관례와 패턴을 익혀야 한다. 그렇게 보면,라이브러리의
한 응용 분야를 배운다는 것은 정말 ‘특수기능언어’를 하나 더
배우는 것과 다를 바가 없다. JDK 전체로 보자면 자바로도 모자
라서 수많은 언어를 배워야 하는 것과 같은 부담을 안게 된다.

(後略)

-------------------------------------------------------------------------------------------

달빛 [wolfgun]   2007-12-26 12:55 X
오버하셨군요...  전통적인 c 프로그램에서의 핼로월드 어플리케이션의 목적은
출력방법을 갈켜주려는 의도 일 뿐입니다.  만약 님의 설명식으로라면.
c 핼로월드도.. 소스에서 전처리되는 과정, 컴파일 되는과정.. 링크되는것..
. 운영체제에서 어플을 로드해서 메모리에 매핑하는거 출력버퍼로 나가서.. 스트림 처럼 작동되는 원리. 마지막으로 리턴문의 의미 종료시 수행하는 태스크.. 등등 다 알아야 겠군요...

+ -

관련 글 리스트
3996 C++를 공부하는데.... 조해진 3539 2002/03/25
4006     C++문법과 C++ 개발툴... 박지훈.임프 5261 2002/03/26
4014         흠... 난 자바가 더 어렵던데...-_-;; 김백일 4531 2002/03/26
4019             저도 자바가 어렵다고 생각합니다. -_- 지영배 3406 2002/03/27
4009         음 캬캬 또 한차례 바람이 거세게 불겠군~ ^ㅅ^ 에보니.+ㅁ+ 2981 2002/03/26
4008         Re:C++문법과 C++ 개발툴... 조해진 3502 2002/03/26
4017             간단히 덧붙이자면.. lycian 3274 2002/03/27
4010             Re:Re:C++문법과 C++ 개발툴... 박지훈.임프 3249 2002/03/26
4001     Re:C++를 공부하는데.... 하느리 3294 2002/03/26
3999     Re:C++를 공부하는데.... 남병철.레조 3252 2002/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.