파게로그
Java에 대한 전반적인 지식 본문
Java Community Process
IDE = Java IDE + WorkBench, C++ IDE + WorkBench, ...
Java 언어의 특징
1. WORA: OS independent
"Write once, run anywhere."
Java application은 JVM과 통신하며, OS 또는 HW와의 통신은 JVM이 담당한다. OS dependent한 JVM을 매개로 하기에 Java application은 OS independent할 수 있다.
2. OOP language
객체지향 개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 OOP language라는 평가를 받는다.
3. GC
Java application이 실해되면 Garbage Collector가 메모리 관리를 자동적으로 수행한다. 이는 프로그래머가 프로그래밍에 보다 집중할 수 있는 환경을 제공한다.
4. 네트워크와 분산처리 지원
풍부한 네트워크 프로그래밍 라이브러리(Java API)를 통해 네트워크 프로그램 개발이 용이하다.
5. supports multi-threading
OS independent하다는 특징과 관련하여, Java API에서 멀티쓰레딩과 관련한 지원을 받을 수 있다. 또한 여러 쓰레드에 대한 scheduling을 자바 인터프리터가 담당한다.
6. Dynamic Loading
Java는 Dynamic Loading을 지원하여, Java application 실행 시에 모든 클래스가 로드되지 않고 필요한 시점에 적절한 클래스가 로드된다. 또한 일부 클래스가 변경되더라도 전체 애플리케이션을 다시 컴파일하지 않아도 되고, 애플리케이션의 변경 사항이 발생해도 비교적 적은 작업만으로도 처리 가능한, 유연한 애플리케이션을 작성할 수 있다.
Java 언어의 특징
Java 플랫폼의 특징
자바 플랫폼을 통한, Java API라는, WORA(Write Once Run Anywhere) API 구현이 기본적인 목적이다.
다만 설치를 필요로 하고 OS 고유의 특징을 살리지 못할 수 있다.
Java 번역기의 특징
자바코드
↓[컴파일러]
바이트코드(가상CPU코드, 의사코드, 중간코드)
↓[인터프리터]
어셈블코드
↓[번역기]
이진코드(기계코드)
JDK: Compiler, Debuger, ...
JRE: JIT(Just-In-Time) Compiler, Garbage Collector, Loader, Security, ...
1단계 형태소분석 → 2단계 구문분석 → 3단계 의미분석 → 4단계 중간코드 → 5단계 최적화 → 6단계 물리코드
1~4단계: 컴파일러 사용(CPU 의존성 없음)
5~6단계: 인터프리터 사용(CPU 의존성 있음)
바로 기계어로 바꾸어버리면, CPU 의존성이 발생한다.
컴파일러는 번역 전문, 인터프리터는 실행을 위주로 하되 필요에 따라 번역도 한다.
속도 문제는 여기에서 발생한다. 바이트코드까지만 컴파일되어 있기에 이것이 JVM을 한 번 더 거쳐야 한다. 이러한 이유로 바이트코드를 바로 기계어로 변환해주는 JIT 컴파일러(바이트코드를 이진코드로 일괄 변환 후 실행하여 Java Interpreter에 비해 약 10~20배 빠름) 및 Hotspot(실행ommunity Process
https://jcp.org
IDE = Java IDE + WorkBench, C++ IDE + WorkBench, ...
Java 언어의 특징
1. WORA: OS independent
"Write once, run anywhere."
Java application은 JVM과 통신하며, OS 또는 HW와의 통신은 JVM이 담당한다. OS dependent한 JVM을 매개로 하기에 Java application은 OS independent할 수 있다.
2. OOP language
객체지향 개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 OOP language라는 평가를 받는다.
3. GC
Java application이 실해되면 Garbage Collector가 메모리 관리를 자동적으로 수행한다. 이는 프로그래머가 프로그래밍에 보다 집중할 수 있는 환경을 제공한다.
4. 네트워크와 분산처리 지원
풍부한 네트워크 프로그래밍 라이브러리(Java API)를 통해 네트워크 프로그램 개발이 용이하다.
5. supports multi-threading
OS independent하다는 특징과 관련하여, Java API에서 멀티쓰레딩과 관련한 지원을 받을 수 있다. 또한 여러 쓰레드에 대한 scheduling을 자바 인터프리터가 담당한다.
6. Dynamic Loading
Java는 Dynamic Loading을 지원하여, Java application 실행 시에 모든 클래스가 로드되지 않고 필요한 시점에 적절한 클래스가 로드된다. 또한 일부 클래스가 변경되더라도 전체 애플리케이션을 다시 컴파일하지 않아도 되고, 애플리케이션의 변경 사항이 발생해도 비교적 적은 작업만으로도 처리 가능한, 유연한 애플리케이션을 작성할 수 있다.
Java 언어의 특징


Java 플랫폼의 특징
자바 플랫폼을 통한, Java API라는, WORA(Write Once Run Anywhere) API 구현이 기본적인 목적이다.
다만 설치를 필요로 하고 OS 고유의 특징을 살리지 못할 수 있다.
Java 번역기의 특징
자바코드
Hello.java
↓[컴파일러 javac.exe]
바이트코드(가상CPU코드, 의사코드, 중간코드)
Hello.class
↓[인터프리터 java.exe]*
어셈블코드
↓[번역기 eg. Assembler]
이진코드(기계코드)
*java Hello 명령어를 입력하면,
1. 프로그램의 실행에 필요한 클래스를 로드한다.
2. 클래스 파일을 검사한다.
3. 지정된 클래스(Hello)에서 main(String[] args)를 호출한다.
JDK: Compiler, Debuger, ...
JRE: JIT(Just-In-Time) Compiler, Garbage Collector, Loader, Security, ...
1단계 형태소분석 → 2단계 구문분석 → 3단계 의미분석 → 4단계 중간코드 → 5단계 최적화 → 6단계 물리코드
1~4단계: 컴파일러 사용(CPU 의존성 없음)
5~6단계: 인터프리터 사용(CPU 의존성 있음)
바로 기계어로 바꾸어버리면, CPU 의존성이 발생한다.
컴파일러는 번역 전문, 인터프리터는 실행을 위주로 하되 필요에 따라 번역도 한다.
속도 문제는 여기에서 발생한다. 바이트코드까지만 컴파일되어 있기에 이것이 JVM을 한 번 더 거쳐야 한다. 이러한 이유로 바이시 트코드를 바로 기계어로 변환해주는 JIT 컴파일러(바이트코드를 이진코드로 일괄 변환 후 실행하여 Java Interpreter에 비해 약 10~20배 빠름) 및 Hotspot과 같은 신기술이 도입되어 속도의 격차가 비교적 줄었다.
---
ECLIPSE
코드에서 마우스 오른쪽 > source > generate getters and setters
'콤퓨타 왕기초 > Java' 카테고리의 다른 글
break문에서의 label (0) | 2020.11.12 |
---|---|
입출력 (0) | 2020.11.08 |
기본 자료형과 연산자 (0) | 2020.11.08 |
Windows에서 cmd로 Java 프로그램 컴파일 (0) | 2020.10.30 |
큰 그림 (0) | 2020.10.30 |