자바는 클래스로만 움직인다! 자바를 오라클이 인수했는데 자바에 라이센스가 있는 버전이 있으니 조심해야 함!
개발할 때는 license가 free인 자바를 꼭 써야함
Write Once, Run Anywhere(WORA), 플랫폼과 독립적이게 모두 동일한 결과를 얻을 수 있음 (확장성이 좋음)
Java Development Kit(JDK) : 가장 큰 소프트웨어 환경 → 개발 할 때의 모든 것 (컴파일러, 디버거, 자바독 등)
Java Runtime Environment(JRE) : 자바를 실행할 때 필요함 → 배포하는 쪽에는 JDK말고, JRE까지만 따로 설치해도 괜찮음)
Java 컴파일은 JDK가 함! → 개발 환경에서는 JDK가 필요함
3-4-5가 JVM(Java Virtual Machine)에 해당함. 3-4-5는 계속 순환하면서 실행됨.
클래스 로더는 Javac을 통해 컴파일된 바이트 코드를 Runtime Data Area로 저장함
그런데 한 번에 쓰지도 않는 코드를 올릴 필요 없으니, 필요한 바이트 코드만 실시간으로 동적 로딩함
(사용되지 않은 클래스를 미리 올려두지 않음)
적재 과정
일단 스레드에 PC Register, JVM Stack, Native Method Area가 있음
스레드 외에 Heap, Method Area가 있음
자바는 컴파일 따로, 실행 따로인데 얘가 실행을 담당함
자바는 변수의 타입을 명시해줘야함. 변수 타입은 primitive type, reference type으로 나뉨
원시 타입은 기본적인 데이터 타입을 의미하며, byte short int long float char double boolean을 의미함
원시 타입을 제외한 모든 것을 의미함. 클래스, 인터페이스, 배열 등이 있음
public, protected, default, private이 있음. 속성과 메소드에 대한 접근을 제한하거나 허용하기 위해 용도에 맞게 사용됨.
| 구분 | 설명 |
|---|---|
| JDK | 컴파일러, 디버거, 자바독 등 자바에서 제공하는 모든 기능을 포함한 환경 (가장 큰 단위) |
| JRE | 자바를 실행할 때 필요한 환경만을 포함함 (컴파일 등은 포함되지 않음) |
| JVM | class loader, runtime data area, execution engine을 포함함. 실행에 필요한 코드를 동적으로 컴파일하고 데이터를 적재하며 실행되는 순환과정을 관리함. |
| runtime data area | 스레드, 힙, 메소드 에리아로 이루어짐. 스레드에서는 명령어와 변수를 관리하고 java외의 코드를 실행함. 힙과 메소드 에리아는 모든 스레드에서 공유됨. 힙은 생성한 객체와 배열을 저장하고, 메소드 에리아는 클래스에 대한 정보를 저장함. |
| primitive type | 원시 타입은 기본적인 데이터 타입을 의미하며, byte, int, char 등을 의미함. |
| reference data type | 원시 타입을 제외한 모든 것을 의미함. 클래스, 인터페이스, 배열 등이 있음. |
| access modifiers | public, protected, default, private이 있음. 속성과 메소드에 대한 접근을 제한하거나 허용하기 위해 용도에 맞게 사용됨. public: 전역적으로 사용 가능함 protected: 하위 클래스에서만 참조가 가능함 default: 패키지 내에서 참조 가능함 private: 패키지 내에서도 참조가 불가능하며, 클래스 내에서만 사용 가능함 |