일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 데이터베이스
- 스프링
- orderedDict
- 121
- Spring Framework
- 오버라이딩
- DAO
- java
- GCP Storage
- 외부조인
- spring
- JIT
- defaultdict
- 쓰는이유
- DAO의 분리
- 싱글톤 레지스트리
- 리스트 자르기
- 싱글톤
- react
- overriding
- ChainMap
- 파이썬
- Oracle
- PYTHON
- 개발기록
- 백준
- 자바
- select
- 청크
- null
- Today
- Total
PengTory
[Java] Compile언어 / Interpreter언어 / JIT / Java의 특징 본문
1. Compile 언어
특징: 소스 -> 컴파일 -> 실행
소스파일을 컴파일이라는 행위를 하게되면 기계어로 변환되고, 기계어가 실행이 되는 방식이다.
장점: Interpreter언어에 비해 속도가 빠르다.
단점: 수정사항이 일어나면 수정이 불편하기때문에 편리성이 좋지 않다.
컴파일러는 OS마다 다르다. 따라서 기계어가 OS마다 달라지게 된다. (OS 구분이 있다.)
종류: C, C++
2. Interpreter 언어
특징: 소스 -> 실행
인터프리터가 소스 한 줄을 해석에서 실행하고, 다음 줄을 해석해서 실행하는 방식으로 반복한다.
단점: Compile언어에 비해 속도가 느리다.
장점: 수정사항이 일어나도 수정이 편리하기 때문에 편리성이 좋다.
소스만 있으면 돌릴 수 있기 때문에 OS의 구분이 없다. (자체에 설치되어 있기 때문에 개발자가 구분할 필요가 없다.)
종류: JavaScript, Python, PHP, ASP 등 (최근에는 Python, JavaScript와 같은 경우에는 내부 엔진등이 있어서 JIT 방식을 유사하게 차용하고 있다.)
그렇다면 Java는 어디에 해당할까?
3. JIT (Just In Time)
Java의 소스는 .java파일로 이루어져 있다.
.java (소스) 를 .class(바이너리 파일)로 컴파일해 JVM이 실행을 시킨다.
그렇다면 JAVA가 컴파일 언어일까? 그렇지 않다. JAVA는 JIT에 해당한다.
장점: OS에 상관이 없다. JVM(Java Virtual Machine)만 OS에 맞게 설치가 되어있다면 상관이 없어진다. => Compile언어와 Interpreter언어의 장점을 모두 가지고 있다. 속도도 비교적 빠른 편이다.
단점: 물론 Compile언어의 단점과 Interpreter언어의 단점도 모두 가지고 있다는 특징이 있다.
* JRE (Java Runtime Environment)
자바 실행 환경 (현재는 JDK를 깔면 JRE가 함께 포함되어있다.)
4. JAVA의 특징
1) 모든 운영체제에서 실행이 가능하다. 단, OS에 JVM이 설치되어야한다. (위 JIT 설명 참고)
2) 객체 지향 프로그래밍
3) 메모리 자동 정리: 자바는 GC (Garbage Collector) 가 메모리를 자동 관리하므로 개발자가 편리하다.
(단점: 수작업으로 할 수 없기 때문에 언제 정리가 되는지 예상할 수가 없다.)
4) 무료 라이브러리 풍부
cf) 우리가 자바를 설치할때 시스템 변수에 JAVA_HOME을 추가하는 이유가 무엇일까?
Tomcat, Hadoop과 같이 JAVA로 만들어진 프로그램은 JAVA_HOME을 가지고 있다. 따라서 이러한 프로그램을 사용할때 미리 JAVA_HOME이라는 변수를 지정해두면 연결 프로그램을 사용할 때 편리하다.
'Java' 카테고리의 다른 글
[Java] static과 instance (+ final, package) (0) | 2023.03.09 |
---|---|
[Java] 클래스 (필드/생성자/메서드) (0) | 2023.03.09 |
[Java] 참조타입/ String / 배열 (0) | 2023.03.07 |
객체지향 - 객체란? feat. 상태, 행동, 식별자 (0) | 2022.12.27 |
[Java] 오버라이딩(Overriding)이란? (0) | 2022.12.09 |