본문 바로가기

Room 102. Back-end/JAVA

뉴 렉쳐 [Java 프로그래밍] 강의 (2)

 05강 ~ 08강 수강 후
 메모하고자 하는 내용 정리.

 

 06강 Java 언어의 특징. 등장 배경

  • C/C++ 언어가 가지는 문제점들을 보완 및 비교되어 등장하게 되었습니다.
    • 객체 생성과 제거 -> delete 키워드 제거
    • 참조변수와 포인터 변수 -> 객체의 포인터 제거
    • 2차 이상의 포인터 문제 -> 모든 포인터 제거
    • 데이터 구조를 정의하는 두 가지 방법 -> struct 키워드 제거
    • 함수지향? 객체지향? -> 함수는 메소드로만 사용하도록 제약
    • 컬렉션의 부재 -> 언어에 컬렉션을 포함
    • 글로벌한 문자 데이터 처리의 복잡성 -> 다양한 인코딩 문자열 기능 개선
    • ...
  • Java 언어의 특징
    • 간결성
    • 언어에 컬렉션 포함
    • 완전한 객체지향 언어

07강 Java Platform 의 특징

  • Java 는 새로운 WORA API 의 탄생을 기반으로 나타나게 되었습니다.
    WORA(Write Once Run Anywhere)는 저희가 만든 프로그램이 운영체제가 다를 경우에
    프로그램이 상이하게 작동할 수 있기 때문에 
    자바는 운영체제 위에 자바 플랫폼이 올라가고, 그 플랫폼에서 단일한, 동일한 Java API 가 동작하도록 해줍니다.


  • 단점이라면 이 플랫폼을 반드시 먼저 설치해야 함과, 운영체제만이 가지고 있는 유일한 기능을
    자바 플랫폼에서 상실할 수 있다는 점이 있습니다.

08강 Java Compiler 의 특징

  • 저희가 만든 Java 프로그램은 WORA 를 지원하는 API 를 만드는 것이 목적입니다.
    한 번 작성하면, 어떠한 환경에서도 동작할수 있도록 말이죠.
  • 그런데 API 문제가 아니라 또 다른 문제가 발생할 수 있는 점이 있었습니다.
    자바코드는 번역기를 통해 어셈블코드(ADD,MOV 등)으로 바뀌고
    이 어셈블코드는 번역기를 통해 기계(이진)코드로 번역됩니다.
     Java Compiler(번역기)가 어셈블코드로 바꿔주는 것 외에 문제가 발생할 수 있는 부분은 바로 
    만약 CPU 가 여러 종류일 경우에는 기계어코드 쪽에서 문제 발생할 수 있습니다.
     Intel CPU 기계어코드로 번역이 되었다면 Intel CPU 에서만 동작하게 되는 것입니다.

  • Java 는 고민 끝에 Java Compiler 의 번역 단계를 들여다보게 됩니다.
    • 1단계 : 형태소 분석 - 코드를 하나하나 쪼개서
    • 2단계 : 구문분석 - 구문이 옳바른지 확인
    • 3단계 : 의미분석 - 의미가 올바른지 확인
    • 4단계 : 중간 코드 - 중간 코드 작성
    • 5단계 : 최적화 - 최적화 단계를 거쳐
    • 6단계 : 물리코드 - 물리코드 생성
  • 위 단계 분석을 통해, 4단계 까지 번역을 한 후 나중에
    전달 받은 후에 CPU에 따른 번역을 한번 더 실행합니다.
    자바는 실제로 2개의 번역기가 사용 됩니다.
    개발자가 컴파일한 컴파일 번역기와, (자바 코드를 바이트 코드로 변환)
    실행하는 사용자가 환경에 따라 사용하는 번역기. (바이트 코드를 사용자 환경을 보고 어셈블 코드로 변환)

  • 컴파일러를 통해 가상의 CPU를 염두해 두고 가상의 CPU 코드를 번역합니다. 
    이 코드를 가상 CPU 코드/바이트코드/의사코드/중간코드/시도코드라고 말합니다. (실제 물리 코드는 아님)
  • 결론적으로, 아래 이미지와 같이 자바 개발자는 두 가지 컴파일러 번역기가 필요합니다.
    보통 JDK 를 설치하면 JRE 가 함께 포함되어 있습니다.
    저희는 아래 도구들을 쓰는데, 여기서 Interpretor를 다른 용어로 JIT(Just In Time Compiler)인 지터 입니다.

  • 실행 환경에서는 번역해온 결과물인 class를 Loader가 보안에 문제없나 확인하고 Compile 하고, 가비지 콜렉션으로 불필요한 요소를 없애고 실행됩니다.

  • 이 내용들은 왜 우리가 java 를 돌렸는데 프로그램이 아니고 class 파일이 만들어 졌는지에 대한 설명도 포함되어있네요!