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 파일이 만들어 졌는지에 대한 설명도 포함되어있네요!
'Room 102. Back-end > JAVA' 카테고리의 다른 글
뉴 렉쳐 [Java 프로그래밍] 강의 (4) - 출력 스트림과 버퍼 (0) | 2020.05.20 |
---|---|
뉴 렉쳐 [Java 프로그래밍] 강의 (3) (0) | 2020.05.20 |
뉴 렉쳐 [Java 프로그래밍] 강의 (1) (0) | 2020.05.15 |
"JSP, 액션 태그(Action Tag)에 대해" (0) | 2019.09.17 |
"Java 개발 환경에 대해, ( java SE,EE 가 가진 API 외 )" (0) | 2019.09.16 |