일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 포맷은 최후의 보루
- 스파르타내일배움캠프TIL
- 회고록
- 클래스
- 성장기록
- TiL_1st_0419
- KPT
- Git
- 스파르타내일배움캠프
- Java
- 생성자
- 객체지향 언어
- diary
- 내일배움캠프
- JVM
- #스파르타내일배움캠프TIL
- Github_token
- GitHub
- 인스턴스
- #내일배움캠프
- 감사기록
- 해우소
- 변수의 다양성
- #스파르타내일배움캠프
- Java의 이점
- static
- 스레드
- 메서드
- Diary 해우소
- Token
- Today
- Total
몬그로이
컴파일러를 두 번이나 거쳐서 얻는 것? 본문
컴퓨터에 말을 걸기 위한 언어 Java
사람이 작성을 하면 Java 소스코드로 입력하게 되는데 (확장자: .Java)
컴퓨터는 이를 바로 읽을 수 없어 컴파일러라는 것이 번역을 해줘야 한다
.Java 파일은 일반적으로 텍스트 형식으로 작성되며,
Java 프로그램의 소스 코드는 사람이 읽고 이해할 수 있는 형태이
컴파일러를 총 두 번 거치게 되는데,
처음 컴파일러는 .Java를 바이트코드로 번역하여 확장자가 .Class인 클래스 파일에 저장한다
이 때의 바이트 코드를 중간언어라고 부른다
후에 이 중간언어를 마저 번역해주는 두 번째 컴파일러를 거치게 된다
첫번째 컴파일러를 통해 바이트코드로 변환될 때,
모든 소스코드가 바이트코드로 변환되는 것이 아니므로
두 번째 컴파일러가 필요하다
바이트코드로 변환되지 않은 소스코드는
추상 메서드로 남아있거나 변경 또는 생략되기도 한다
클래스 파일은 클래스 로더가 옮겨서 JVM( Java Virtual Machine )으로 넣어주고
JVM은 클래스 파일을 분석해 실행하게 만든다
JVM은 크게 번역부와 실행부로 나뉘는데
번역부에는 Java Interpreter와 JIT(Just-In-Time) compiler가 존재한다
Java Interpreter가 바이트코드를 해석할 때
필요한 경우 JIT compiler가 (Just-In-Time이라는 이름에 걸맞게)
실시간으로 바이트코드를 컴파일해 도움을 준다
이 변환된 언어를 기계어라고 부른다
Java에서 소스코드를 컴파일 하면 바이트 코드로 변환되는데
바이트코드를 기계가 이해할 수 없기에 직접 실행할 수가 없다
하지만 JVM에서는 컴파일러를 통하여 실행될 수 있다
그런데 굳이 컴파일러를 두 번 거쳐서 이용하는 이점은 뭐가 있을까?
1. 편리성 & 범용성 & 유연성
바이트 코드는 JVM에서 실행되는데, 이는 특정 플랫폼에 의존하지 않아도 됨을 뜻한다
Java가 한 번 작성되면 여러 운영체제와 하드웨어에서 실행될 수 있으므로
개발자가 각 플랫폼 하나하나에 맞춰 재작성할 필요가 없어짐을 뜻한다
또한, 기존 시스템에 손쉽게 통합되거나 재사용이 가능하다
2. 보안 & 유연성
또한 바이트 코드는 고수준 언어로 작성된 코드의 중간 언어이므로,
일부 정보를 제거하여 원래 소스 코드의 논리를 숨기고 보호할 수 있다
이는 모두 JVM 덕분이라 할 수 있다
JVM은 바이트 코드를 실행하는 데 필요한 기능들을 제공하는데
메모리 관리, 스레드 관리, 예외 처리, 클래스 로딩 및 동적 링크 등을 포함한다
또한, JIT 컴파일러를 통한 실행 속도 향상도 한 몫 한다
'Dev 언어 정리 & Self QnA > Java' 카테고리의 다른 글
한 클래스는 한가지 인터페이스만 구현할까? (0) | 2024.04.24 |
---|---|
인터페이스, 클래스, 인스턴스, 메서드 그리고 생성자? (0) | 2024.04.24 |
ArrayList와 List의 관계? (0) | 2024.04.23 |
Java 정수형 변수는 왜 네 가지나 있을까? (0) | 2024.04.22 |
Java는 객체지향 언어다 _객체지향이 뭔데? (0) | 2024.04.22 |