Q & A

오픈지식

오픈지식 자바(JAVA)란 무엇인가?? 2008.06.10 신고
  • 자바란 무엇인가요?


    1. Java를 아세요?


      1.  "Write once, Run anywhere" 라는 특성을 내세우며

    무섭도록 성장하고 있는 자바라는 언어의 특징, 개발 방법 그리고 구문에 대해 배우게 됩니다.


      2. Oak라는 가전제품 제어용 프로그램으로 시작된 자바는, 대부분의 운영체제 환경에서 활용이 가능하다는 장점을 내세우며, 어느덧 웹분야 뿐 아니라 임베디드 및 기업용 솔루션 분야에서도 이미 그 기술을 인정받으며 주류의 물살을 타고 있습니다.

    물론, 이러한 추세는 자바라는 언어 자체가 가지는 플렛폼 독립성, 다양한 기능의 API 지원, 객체지향언어 등의 장점 외에도 자바라는 언어 한 가지만 제대로 익혀도 다양한 분야 즉, 임베디드, 웹 프로그래밍, 서버 프로그래밍, CORBA, EJB 등 모든 컴퓨터 기술에 쉽게 적응할 수 있다는 자바의 방대함 때문이기도 할 것입니다.


      3. 자바는 분야별 전문화를 위해 다음과 같은 Edition이 있습니다.

    • J2SE(Java 2 Standard Edition) /Java SE : 일반적인 자바 프로그래밍을 위한 표준화된 기술을 정의 J2EE(Java 2 Enterprise Edition) /Java EE : 기업용(클라이언트/서버) 제반 기술에 대한 정의 J2ME(Java 2 Micro Edition) /Java ME : 제한된 사이즈 및 메모리를 사용하는 제품에 대한 명세 정의


    2. 자바의 방대함이라...


    자바의 방대함이라는 것에 자칫 두려움을 가지지 않을까 조심스레 염려가 됩니다.  여기서 말하는 방대함이란, 자바가 보유하고 있는 기술적 배경이나 제공하는 API가 많다라는 의미입니다.


    1. 기술적인 배경에 대한 이해가 필요하다.
    자바는 객체지향이나 TCP/IP 같은 기술적인 배경을 정확히 이해해야 제대로 사용할 수 있습니다. 객체지향을 제대로 이해하지 못하면, C언어 같이 프로시저에 의한 프로그램이 탄생할 수 있으며 그것은 자바를 자바답게 사용하지 못하는 것입니다. 또한 네트웍 프로그래밍에 필요한 소켓에 대한 이해가 없다면 Socket 클래스를 아주 편리하게 사용하면서도 막연하게만 프로그래밍하게 되는 조금은 우스운 상황도 생기게 될 겁니다.
    하지만, 모든 개발자가 그 같은 기술들을 미리 알고 개발하지는 않습니다. 요컨데, 개발자는 새로운 기술들에 대한 공부를 게을리 하지 말아야 하며, 자바라는 언어는 그러한 개발자를 자신의 품에 안을 것입니다.


      2. 매일같이 새로운 자바 기술 앞에 주눅들지 말자.
    앞에서 자바의 방대함에 대해 이야기했지요. 그렇습니다. 자바는 다루고 있는 기반 기술이 많아서 단지 언어의 구조나 구문만 익히던 것에 더하여 분산처리, 네트워크, 쓰레드 등의 다양한 방면에 연관지어 고려할 것이 많습니다.
    따라서, 새롭게 배우게 되는 자바 초심자들은 새로운 기술에 대한 소개를 만나게 되면 "이거 언제 쫓아가나...." 하며 망연자실하는 경우가 허다합니다. 하지만, 언제나 필요한 것은 자바에 대한 기본적인 이해이니 만큼 새로운 기술 역시 기본적인 자바의 이해 아래 만들어진 사항들임을 잊지 말고 지금의 기초 연마에 매진하시기 바랍니다.


    3. 자바는 무슨 특징이 있는가...

    자바는 기존의 프로그래밍 언어에 비해 여러 장점 혹은 특징을 가지고 있습니다. 이 중 몇가지만 살펴보니...

        1. simple - 자바는 그 구조가 간단합니다. 탄생과정에서 C++을 기반으로 탄생했지만, C++이 가지고 있던 혼란을 줄 수 있는 요소인 메모리 관리, 포인터 등을 삭제했습니다.

        2. OO(Object-Oriented) - 즉, 객체지향언어입니다. 자바 프로그램의 모든 요소는 객체로 표현됩니다. 이러한 객체지향은 소프트웨어의 재사용성과 정보의 캡슐화 같은 장점을 제공합니다. 게다가 객체지향 방식은 실제 세계와 비슷한 프로그래밍 방식입니다.
    자바는 설계 당시부터 객체지향언어입니다. 설계 당시부터 객체지향 개념을 갖고 있었다는 것은, 프로그램이나 기타 기술과의 연계에서 매우 큰 유연성을 제공해 줍니다. 자바가 방대하다는 그 이면에는 이같은 객체지향의 개념으로 다른 많은 기술들을 쉽게 수용할 수 있다는 이유가 숨어있기 때문이기도 합니다.

        3. distributed - 즉, 분산환경에 적합하다는 것입니다. 자바는 인터넷이나 네트웍 솔루션 개발에 아주 강합니다. 다양한 프로토콜에 대한 라이브러리를 제공하며, 원격지에 있는 객체나 컴포넌트를 호출할 수 있는 RMI(Remote Method Invocation)나 CORBA(Common Object Request Broker Architecture), EJB(Enterprise Java Beans) 등의 기능을 제공합니다.

        4. interpreted - 자바는 인터프리터에 의해 실행됩니다.

    자바는 독특한 실행방식을 가지는데, 컴파일과 인터프리터 방식 둘 다 사용합니다. ( Compiled Interpreted Language )

    • 컴파일 방식이란?
      원천소스를 컴파일을 하면 해당 CPU가 인식할 수 있는 바이너리 코드(binary code)가 생성됩니다. 0과 1밖에 모르는 CPU는 이 코드를 해석하면서 프로그램을 진행시키지요.  당근 CPU가 아는 언어로 만들어 주기에 속도가 빠릅니다. 하지만, 전혀 다른 시스템(예를 들어, 윈도에서 컴파일한 것을 리눅스에서 동작하려고 한다면)에서도 같은 동작을 할 수, 아니 실행하는 것 자체가 가능할까요? 인터프리터 방식이란?
      별도의 컴파일 과정 없이 실행될 곳에 있는 해석기 원천소스를 해석하고 실행하는 방식입니다. 이 방식은 컴파일 과정이 필요없기 때문에 어디에서든 실행이 가능합니다. 물론 해석기가 있는 곳에서지요... 예를 들면 자바스크립트 같은 경우는 웹 브라우저만 있으면 어느 시스템에서도 동작이 가능합니다. 하지만, 요청할 때마다 한 줄 한 줄 읽어서 실행하기 때문에 실행속도가 느리다는 단점이 있습니다.

    자바는, 원천소스(HelloWorld.java)를 컴파일해서 자바가상머신(Java Virtual Machine)이 실행할 수 있는 바이트 코드(byte code)를 만들어 냅니다. 이 바이트 코드는 이 코드를 실행할 수 있는 해석기인 자바가상머신이 있는 어느 기종의 시스템에서도 실행할 수 있게 됩니다. 즉, 컴파일 방식에의 장점인 소스 번역기능과 인터프리터 방식의 장점인 이식성(이동성)이 서로 절묘하게 만난 결과가 자바의 실행 방식인 것입니다.

        5. robust(adj. 강건한,굳센) - 말 그대로 견고한, 안정화된 프로그래밍이 가능합니다. 한번 작성되어 여러 가지 시스템에서 동작해야 하기에, 자바는 견고화 혹은 안정화를 위한 몇가지 장치가 있습니다.

    • 자바는 데이터 형을 아주 엄격하게 점검합니다. 보안에 치명적인 결함을 유발할 수 있는 포인터를 사용하지 않습니다 자동으로 메모리를 관리하는 Garbage Collection 기능 예외 처리 구문으로 실행시 발생하는 에러를 효과적으로 처리

        6. secure - 자바는 안전합니다. 분산환경에 맞도록 개발환경과 실행환경이 분리되어 있는데요, 자바가상머신은, 개발시 만들어진 코드와 실제 실행 환경에 변화가 없는지 이  바이트 코드에 대한 무결성 검사를 수행합니다.


        7. architecture neutral- 즉, 어느 시스템 환경에도 적응이 강합니다. 운영체제가 무엇이건 CPU가 32비트이건 64비트이건 가리지 않습니다. 자바는 어느 시스템이건 int 타입은 32비트입니다. 데이터 타입 역시 시스템 중립적인 것을 알 수 있습니다. 이를 가능하게 하는 것이 바로 바이트 코드와 자바가상머신입니다. 이 둘을 사용함으로써 특정 시스템에 종속되지 않습니다.

        8. portable - 이식성입니다. 한 번만 작성되면 JVM(자바가상머신)이 있는 모든 종류의 컴퓨터에서 사용이 가능합니다.

        9. multithread - 자바는 시스템과 무관하게 언어 차원에서 멀티스레드를 지원합니다. 쓰레드(Thread)란, 프로그램(프로세스) 안에서 독립적으로 실행되는 작은 실행단위를 말하는데, 하나의 프로그램 안에서 실행되기 때문에 메모리 공유가 가능하면서 프로그램이 보다 효율적으로 실행되도록 해 줍니다.

       10. memory - 자바는 자바가상머신이 자동으로 쓰지 않는 메모리를 찾아서 해제시켜주기 때문에 개발자의 부담을 상당부분 해소시켜 주고 있습니다.

       11. performance - 바이트 코드는 인터프리터에 의해 효율적으로 수행되도록 설계되어 있습니다. 또한 더 나은 효율성을 위해 마치 처음부터 그 시스템에 맞게 컴파일된 듯한 파일을 만들어주는 JIT(Just-in-Time) 컴파일러도 제공하고 있습니다.

       12. cost - 맘만 먹으면 JDK(Java SE Development Kit)부터 툴, 서버까지 공짜(합법적인... ^^)를 받을 수 있지요.


    4. 자바의 구조 좀 보자...

    자바의 전체적인 구조를 볼려면 상당한 노력이 필요합니다. 그러나 자바를 익히려고 하는 지금 시점에서는 바이트 코드와 자바가상머신에 대한 개념만으로도 자바의 구조를 이해하는데 별 문제가 없으리라 봅니다.


      1. 바이트 코드(byte code)
    C나 C++로 프로그램을 작성한 후에 이 프로그램을 실행하기 위해서는 반드시 컴파일러를 이용하여 해당 컴퓨터의 CPU에서 실행할 수 있는 기계어(0과 1로 표현되는 이진코드)로 바꾸어 주어야 합니다. 컴퓨터의 CPU 마다 수행할 수 있는 기계어가 다르기 때문에 다른 기종의 컴퓨터에서 이 프로그램을 실행하고자 하면 다시 해당 CPU에 맞는 컴파일러로 컴파일하는 과정을 거쳐야 합니다.

    하지만, 자바의 프로그램 작성 후 컴파일 과정은 다소 다릅니다.
    자바의 컴파일러는 단지 소스(*.java의 형태)에 오류가 있는지 확인하고 제대로 돌아가는 경우에만 컴파일 결과인 바이트 코드(*.class의 형태가 된다)라는 중간 단계의 문서를 만들어 줍니다. 이 바이트 코드는 CPU 타입과는 무관하게 자바가상머신에서 동작하는 "자바용 기계어"입니다. 이 코드를 직접 운영체제(CPU)에서 동작시킬 수는 없습니다. 하지만, 컴파일된 바이트 코드는 자바실행환경이 구축된 곳에서는 어디라도 재컴파일 과정 없이 실행이 가능합니다.

      2. 자바가상머신(Java Virtual Machine)
    머신이라고 해서 물리적인 어떠한 장비가 있는 것이 아니라 소프트웨어적으로 구현된 자바용 운영체제입니다. 즉, 자바 바이트 코드를 실행시키는 소프트웨어로 만들어진 가상의 CPU인 것입니다. 자바가 플랫폼 독립적이라는 장점을 지니는 이유가 바로 이 가상머신인데, 가상머신만 설치되어 있는 곳이라면 - 그곳이 노트북일 수도 있고 냉장고일 수도 있고 웹 브라우저라도 상관없지요. - 컴파일된 바이트 코드를 바로 실행시킬 수가 있는 것입니다.


    5. 자바 프로그램의 유형

    자바는 실행 위치와 종류에 따라 4가지 종류의 형태를 가집니다. (물론 Java SE로 한정합니다. )

      1. 애플릿(Applet!)
    위치 - 네트워크의 원격 컴퓨터의 웹서버
    방식 - 네트워크를 통한 원격 전송
    실행 - 로컬의 웹 브라우저나 애플릿뷰어(Applet! Viewer)

      2. 어플리케이션(Application)
    위치 - 자바가상머신이 있는 로컬 컴퓨터
    형태 - 독립적인 자바 실행 프로그램

      3. 서블릿(Servlet)
    위치 - 네트워크의 원격 컴퓨터
    방식 - 웹서버를 통하여 CGI를 대체하는 서비스를 제공
    실행 - 네트워크의 원격 컴퓨터의 Servlet Container

      4. 빈즈(Beans)
    자바로 만들어진 컴포넌트로서 윈도우에서의 ActiveX나 OCX와 같은 역할을 합니다. 독립적인 사용보다는 위에서 언급한 1,2,3의 부품 등으로 사용되지요.



    자세한 내용은 클릭하세요 → 클릭

    추천 0
Q