Work/Java

[Head First Java] 1. 껍질을 깨고

kevin. 2007. 6. 24. 23:51

껍질을 깨고


  1. 나의 서문 
    우연한 기회에 Head First Java라는 책을 접하게 되었다.
    책을 좀 들춰보니 책의 서문에도 써 있듯이 이게 그림책인지.. 프로그래밍 책인지.. 헷갈릴 정도였고..
    거기다가 글의 단락이 보기좋게 나뉘어 있는 편이 아니라서 참 보기 난감했다.
    게다가 글자가 너무 작게 쓰여있어서 사실 읽기조차 싫어졌다.. 그치만 남들보다 한글자 한글자 자세히 읽어야 했기 때문에....
    일단 몇 장 본 것으로 전체를 판단할 수 는 없지만, 개인적인 느낌을 이야기 하자면 ..

    첫째, 완전 초보자가 이 책으로 공부하기에는 힘들겠다.
    둘째, 어느 정도 아는 사람들이 보기에는 그다지 하드코어하지 않겠다.
    셋째, 기존의 자바 관련 서적들과는 다른 구성이 이해를 약간 어렵게 할 수 있으나 그럭저럭 재미있다.

    앞으로 Head First Java를 읽어가면서 앞으로 글을 계속 포스팅 할 예정인데, 그 목적은 지식의 공유라는 측면도 있지만..(진짜??)
    개인적으로 나중에 필요하지 않을까... 라는 생각에서... 이력을 남기기 위함이다.
  2. JRE, SDK, JDK??? (http://java.sun.com/javase/downloads/index.jsp)
    JRE : Java Runtime Environment 의 약자로 자바 실행 환경을 뜻한다.
            알겠지만 자바는 플랫폼에 영향을 받지 않도록 구성되었고, 이를 위해서는 실행 환경을 바탕에 깔아주어야 하는데, 이것이 JRE다.
            간단하게 얘기하면 OS <-> JRE <-> 바이트코드 의 구성을 갖게되는 것이다.
           
    사용자 삽입 이미지

    SDK : Software Development Kit 의 약자로 소프트웨어 개발 환경을 뜻한다.
             소프트웨어를 자바로 개발할 경우 소스를 컴파일 하기 위해서는 자바 API들이 필요하고 또 컴파일러도 필요한데, 이것을들의 묶음을 SDK라고 보면 된다.
    JDK : Java Development Kit의 약자로 JRE와 SDK를 포함한다.
             
    사용자 삽입 이미지
     
  3. 자바 버전 (실제버전 - 부르는 이름 순)
    Java 1.2 - 1.2, 1.3, 1.4 를 모두 자바 1.2라고 칭한다.
    Java 1.5 - 자바 5
    Java 1.6 - 자바 6
  4. 바이트코드 (Byte Code)
    자바는 소스 파일을 바로 실행파일로 만들지 않고 중간 단계격인 바이트코드로 만든다.
    이것은 JVM에 의해 해석되어 실행되게 되는데 이렇게 만든 이유는 자바의 플랫폼 독립성 때문이다.
    물론 인터프리터 언어들 처럼 바로 소스코드를 JVM에 넘기고 실행하게 해도 별 문제가 없으나(물론 SUN에서 처음에 그렇게 구성해야 되겠죠~?)
    그렇게 되면 JVM에서 해야할 일이 얼마나 많아지겠는가.. 가뜩이나 느리다고 JNI니 KNI니.. 해서 속도가 문제시 되는 곳들은 C를 쓰도록 해주고 있는데 말이다.

    바이트코드(영어: Bytecode)는 특정 하드웨어가 아닌 가상 기계에서 돌아가는 실행 프로그램을 위한 이진 표현법이다. 하드웨어가 아닌 소프트웨어에 의해 처리되기 때문에, 보통 기계어보다 더 추상적이다.

    역사적으로 바이트코드는 대부분의 명령 집합이 0개 이상의 매개 변수를 갖는 1바이트 크기의 동작 코드(opcode)였기 때문에 바이트코드라 불리게 되었다. 바이트코드는 특정 하드웨어에 대한 의존성을 줄이고, 인터프리팅도 쉬운 결과물을 생성하고자 하는 프로그래밍 언어에 의해, 출력 코드의 한 형태로 사용된다. 컴파일되어 만들어진 바이트코드는 특정 하드웨어의 기계 코드를 만드는 컴파일러의 입력으로 사용되거나, 가상 기계에서 바로 실행된다.

    사람이 읽기 쉽도록 쓰여진 소스 코드와 비교하면, 바이트 코드는 덜 추상적이며, 더 간결하고, 더 컴퓨터 중심적이다. 예를 들어 바이트코드는 변수의 접근 범위(지역변수 또는 전역변수 인지 여부) 등과 같은 의미 분석 단계의 결과를 코드화한다. 그래서 일반적으로 소스 코드를 직접 분석/실행하는 것보다 더 좋은 성능을 갖는다.

    바이트코드 프로그램은 보통 한번에 하나의 명령어를 읽은 후 실행한다. 이러한 형태의 바이트코드 인터프리터는 높은 이식성을 갖는다. 또 다른 형태로서 실시간 번역기 또는 저스트 인 타임(just-in-time, JIT) 컴파일러라 불리는 시스템은 실행 중에 필요에 따라서 바이트코드를 기계어로 번역한다. 이 방법은 가상 기계의 이식성을 없애지만, 바이트코드 자체에 대한 이식성을 잃지는 않는다. 예를 들어, 자바C# 코드는 보통 바이트코드 형태로 컴파일되어 저장되며, 실행 전에 JIT 컴파일러에 의해 기계 코드로 번역된다. 이 번역으로 인해 프로그램 실행 전에 지연시간이 발생하게 되지만, 보통 인터프리터보다는 훨씬 좋은 성능을 갖는다.
    출처 : 위키피디아

  5. 자바 코드의 구조
    자바 소스 코드는 클래스로 구성되어있다.
    클래스는 변수와 메소드로 구성되어있는데 변수는 클래스가 저장해야 하는 정보를 가지고 있고, 메소드는 그 정보들을 가공하는 역할을 한다.
    모든 자바 프로그램은 클래스로 이루어져 있고 반드시 main 메소드를 하나 가져야 한다.

    public class HelloApp {
        public static void main(String[] args) {
            System.out.println("Hello~");
        }
    }
  6. 자바코드의 실행
    자바 코드를 실행하기 위해서는 다음의 과정을 가진다.
    소스파일의 작성 -> 바이트코드로 컴파일 -> JVM에서 바이트코드 실행
  7. 선언문, 순환문, 분기문 생략 ^^;;

이 글은 스프링노트에서 작성되었습니다.