이명헌 경영 스쿨
[언어] 자바
www.mackido.com 번역
이명헌 [ 1999-5-1 ]

자바(Java)

Java for mac자바는 byteCode를 사용하는 인터프리티드 언어의 일종으로 여러 종류의 플랫폼 상에서 돌아가는 자체 구문을 갖춘 프로그래밍 언어/환경이다. 자바를 이용해서 작성된 프로그램은 어느 플랫폼에서나 다 실행된다. 이런 크로스플랫폼적 특징을 지닌 언어는 자바 외에 몇 종이 더 있지만 대부분 해당 플랫폼에서 따로 재컴파일해야만 했다. 자바는 딱 한 번만 (byteCode로) 컴파일된 다음 어느 플랫폼에서나 실행될 수 있다는 점에서 다르다.

또한 자바는 기존의 크로스플랫폼 개발 환경과 달리 대단히 풍부한 프레임웍스(Frameworks;프로그래밍 작업을 용이하게 해주는 object libraries)을 갖추고 있다. 그뿐만이 아니다. 자바는 이른바 'pointer'라는 것이 필요없다. 포인터(pointer)는 c/c++로 작업해본 사람들이 모두 지적하듯 제일 골치 아프고 시간을 잡아 먹는 부분이다. 실제 모든 프로그래밍 문제 중 60% 이상이 포인터 때문에 일어난다고 조사된 바도 있다. 포인터로 야기된 문제점을 해결하는 데 드는 비용은 종종 수천 달러에 이르기도 한다.

자바의 장점은 또 있다. 자바는 frameworks/libraries를 손쉽게 패키지화할 수 있기 때문에 다른 프로젝트에서 재사용하거나 상호교환하는 것이 용이하다.(JavaBeans 역자주라는 것을 통해서.)

그러므로 자바를 이용해서 개발하는 경우, 개발 시간 측면에서나 비용면에서나 대단한 잇점이 있을 뿐 아니라 프로그램을 유지하고 디버깅하는 것 또한 훨씬 간편해진다. (이른바 "dangling pointers"와 같은 미묘한 버그가 아예 존재하지 않으므로) 게다가 자바로 작성된 코드는 손쉽게 재사용될 수 있다. 그리고 자바로 작성한 코드는 어느 플랫폼에서나실행된다는 것도 자바의 탁월한 강점 중 하나다. 비용은 적게들면서 장점은 아주 많다. 정말 괜챦은 언어다.

불행히도, 인생에 있어서나 엔지니어링에 있어서나 댓가 없는 혜택은 없는 법.



역자주 자바빈즈의 정의는 "Visual objects at development time"입니다. 개발 툴(비주얼툴 - 이를테면 오러클의 JDeveloper라든지, IBM의 Visual Age for Java , Visual Cafe 같은...)에서 유저인터페이스를 만드는 것처럼 미리 완성해놓은 기능을 손쉽게 가져다가 쓸 수 있게 만든 것입니다. 자바빈즈는 단순히 버튼이나 스크롤 바 같은 유저 인터페이스 구성요소 차원을 넘어 여러 업무와 작업에 필요한 것들을 완제품 형태로 만들어 놓은 것입니다. 이를테면 금융업나 제조업, 의료 등에서 자주 요구되는 작업을 만들어서 제공하는 것입니다. 결국 특정 기능을 부품을 가져다 쓰는 것처럼 손쉽게 이용할 수 있게 하는 것입니다. Enterprise JavaBeans(EJB)는 자바빈즈에 분산 컴퓨팅 기능을 첨가시킨 것입니다. 다른 시스템에 있는 클래스도 내 시스템의 클래스처럼 쓰게 해주는 자바빈즈입니다.

성능(Performance) 문제

현재까지는 속도가 떨어진다는 점이 자바의 대표적 문제점으로 지적된다. 자바 app들은 실행속도가 늦다. 자바는 기본적으로 인터프리티드 언어이므로 컴퓨터가 곧바로 이해할 수 있는 언어가 아니다. 각각의 명령어를 일단 컴퓨터가 이해할 수 있는 언어로 바꾸어주는 인터프리터가 필요하다. 이를 JVM(Java Virtual Machine,자바 가상 머쉰)이라고 한다. 이렇게 중간에 JVM이 끼어 있으므로 속도가 느리다. 하지만 자바 속도문제가 해결될 조짐이 여러 형태로 나타나고 있다.

  • 컴퓨터 자체가 점점 빨라지고 있다. 매년 엄청난 속도로 빨라지고 있다. 오늘 자바가 느리게 동작한다고 해서 내일도 자바가 느리게 동작할 것으로 생각해서는 안된다.


  • 자바 인터프리터도 점점 빨라지고 있다. 소위 "JIT(Just-In-Time) Compiler"라는 것이 자바 실행 속도 향상에 큰 기여를 하고 있다. JIT Compiler는 어떤 인스트럭션을 처음 실행할 때 최적의 기계어로 컴파일 해 둔 다음, 그 인스트럭션이 다시 사용될 때마다(컴퓨터 프로그램에는 많은 루프가 있다) 그 최적화된 것을 참조하므로 굉장한 속도 향상이 이루어진다. 기존 방식보다 통상 10배에서 20배정도 빠른 속도를 보여준다. 게다가 점점 더 빨라지고 있다.


  • 어떤 씨피유는 제작 단계에서부터 자바를 'native'로 이해할 수 있도록 만들어 지고 있다. 이런 류의 컴퓨터는 무척 빠른 자바 실행 속도를 갖는다. 자바가 점점 더 대중화 됨에 따라 더 많은 컴퓨터가 이런 방식을 채택하게 될 것이다. 자바가 그야말로 네이티브로 실행된다는 얘기다.


  • 자바의 기능 중 상당수가 라이브러리, 프레임웍스(frameworks) 형태로 만들어 지고 있는 추세다. 그리고 프레임웍스(JFC나 AWT 같은)들은 네이티브다. 결국 실행되는 자바코드의 80% 이상이 네이티브화 된다는 얘기다.
  • Swing
  • Native-Java를 만들기위한 여러 가지 작업이 진행 중이다. 자바로 프로그래밍한 다음 각 플랫폼에서 따로 컴파일하여 standalone application을 만드는 것이다. 한 번 코딩으로 모든 플랫폼에서 실행된다는 크로스플랫폼적 성격을 유지하면서도 Native speed application을 자바로 만들 수 있는 것이다. (물론 각 플랫폼 고유의 특성을 가미하기 위해서는 그런 부분들이 미리 컴파일된 것들이 필요하겠지만)

컴퓨터의 속도 향상만으로도 자바는 충분히 빨라질 수 있는 데다가 여러 가지 자바 기술 자체의 발전도 자바 속도를 보다 빠르게 해 줄 것이다. 자바 속도 향상은 단지 시간 문제일 뿐이다.

변화의 댓가

두 번째 자바의 단점으로는 기존의 환경으로부터 자바로의 전환에 다소 시간과 비용이 요구된다는 점이다. 사람들은 일반적으로 변화를 달가워하지 않는다. 그 변화가 훨씬 더 좋은 결과를 가져올 경우에도 그렇다. 자바의 발목을 잡을 마지막 장애물은 자바로의 전환에 소요될 시간이 될 것이다. 기존의 언어들은 많은 사용자 숫자와 툴,코드들이 있다. 하부구조가 탄탄하다. 그런 부분을 자바가 따라 잡으려면 어느 정도 시간이 걸릴 것이다. 하지만 이미 십 수 개의 판매용 자바 개발환경이 나와 있을 만큼 자바의 발전 속도가 빠르고, 판매용 자바 라이브러리도 많이 쏟아져 나와서 자바의 영역을 날로 넓혀 가고 있다. 따라서 자바로의 전환에 드는 비용이 자바의 발전 속도를 늦추기는 하겠지만, 발전 자체를 막을 수는 없다. 변화에 대한 저항 심리나 자바의 다소 둔한 성능에도 불구하고 이미 자바 세력 확장에 힘이 실리고 있다. 결국, 자바가 과연 최고의 자리에 오를 수 있을 것인지가 문제가 아니고 언제 오를 수 있는가가 문제다.

자바스크립트(JavaScript) 와 JScript

자바스크립트는 자바와 아무런 상관이 없다. 사실 원래 이름도 "LiveScript"였다. 하지만 넷스케잎사는 마케팅적인 측면에서의 잇점이 있을 것이라는 바보같은 생각으로 LiveScript를 JavaScript로 바꾸어 명명했다. 썬의 Java가 몰고온 미디어의 관심을 업어보겠다는 속셈이었던 것이다. 비유를 하자면 보잉사가 자사의 747 여객기를 '스페이스 셔틀'로 바꾸어 부른 것과 같다. 덕분에 사용자는 평생토록 자바와 자바스크립트를 혼동하게 되었다.

자바는 컴퓨터 언어와 라이브러리 세트 모음(Frameworks)을 통칭한 것이다. 자바스크립트는 HTML 페이쥐에 포함시킬 수 있는 스크립팅 언어로 자바와는 전혀 다른 모양새를 갖고 있다. 자바는 분명히 잘 돌아간다. 하지만 자바스크립트는 많은 문제가 있는 경우가 많고 심지어 넷스케잎을 충돌로 몰고가기도 한다. 하지만 몇 몇 기능을 추가하는데 있어 자바스크립트만이 유일한 해결책이기에 어쨌든 쓰이고는 있다.

마이크로소프트는 너무 많은 기술발전이 이루어지는 것을 좋아하지 않기 때문에 (그리고 그들은 표준을 극도로 증오한다, 자기가 만든 것이 아니라면) 자바스크립트의 아류작 비슷한 JScript를 만들어 내었다. 그리고는 자바스크립트와는 다른 방식으로 작업을 엉망진창으로 만들어서 프로그래머를 고문할 수 있음을 보여주었다. 아주 미묘한 형태로 말이다. 이런 마이크로소프트의 행보 때문에 웹사이트를 만드는 사람은 인터넷 익스플로러와 넷스케잎 브라우져 사이에서 선택을 강요받게 되었다. IE와 Netscape 양쪽 모두에서 부드럽게 실행되는 자바스크립트는 상당히 만들기 곤란했기 때문이다. 마이크로소프트는 항상 자신들이 주도권을 갖지 못한 기술이 출현하면 어떤 방식으로든 발전 속도를 늦추는 사악한 마케팅을 펼쳐 왔었다. 그 결과 수 천명의 프로그래머와 수 백만의 사용자들이 고통을 받게 되더라도 말이다. 자바스크립트도 예외가 아니었다.

결론

짧게 요약하자면 결국 자바는 대부분의 일반적 용도의 프로그래밍 언어를 끌어내리고 최고의 위치에 오를 것이다. 하지만 사람들이 생각하고 있는 것만큼 빠른 속도로 이루어지지는 않을 것이다. 사실은 자바라는 말이 떠돈지도 벌서 몇년이 흘렀고, 아직까지는 대부분의 프로그래머들 사이에서 대단한 영역을 확보하지 못한 것도 사실이다. 하지만 몇 년내에 자바의 진정한 위력을 확실하게 느껴볼 수 있을 것이다.

참고로, 자바로 만든 프로그램은 두 가지 형태로 배포할 수 있다.

첫째, Applet이라는 미니 애플리케이션으로 만들 수 있다. 애플릿은 웹브라우져 내에서 돌아가는 프로그램이다. (네트웍 상에서도 실행시킬 수 있다) 애플릿은 보안성을 갖추고 있고, 크기가 작고, 제한된 작업만 가능하다. 애플릿은 이미 인터넷을 통해 상당히 보편화 되었다. 애니메이션이라든지 데이타 입력같은 작업을 가능케 해주는 애플릿이 인터넷에 널려 있다. 애플릿은 이미 자신의 존재를 분명히 각인시켰고, 앞으로도 더욱 발전해 나갈 것이다.

둘째, 자바 애플리케이션(Java Application, Java Apps)으로 만들수도 있다. Apps는 stand-alone 프로그램이다. 따라서 실행시키기 위해 웹브라우져를 띄울 필요가 없다. 현재까지는 자바 애플리케이션을 실행하기 위해서는 실행환경인 JVM(Java Virtual Machine)이 필요하다. JVM은 운영체계 자체와 함께 번들로 제공되고 있거나 애플리케이션 패키지에 포함되어 배포되고 있다. 자바 Apps도 점점 더 사용자층을 넓혀가고 있다. 포츈 500위 안에 드는 주요 기업체에서도 자바 애플리케이션으로 데이타베이스의 프런트엔드(front end)를 만들어서 여러 종류의 플랫폼 상에서 운용하고 있기도 하다. 몇 몇 시장에서는 자바 Apps가 이미 상당한 위치를 점하고 있기도 하다. 여러 분야에서 점점 자바로 힘이 쏠리고 있다. 상당수 대학에서 자바를 강의하고 있으며, 몇 몇 컴퓨터 관련 학과에서는 자바로만 이루어진 커리큘럼을 선보이고도 있다. 점점 더 많은 프로그래머가 자바를 배우고, 보다 더 많은 자바 개발 툴이 만들어져 나오고, 이에 따라 많은 자바 라이브러리들이 출시되고 있다. 한 번 힘이 실리면 계속 힘이 실리는 것이다. 산꼭대기에서 눈덩이가 굴러 내려오는 것처럼.

지금 계신 곳은: TECH > [언어] 자바