[05/16] JAVA 이론 공부하기

Haisley Jang·2024년 5월 16일

CS

목록 보기
3/5

자바란?

자바는 클래스로만 움직인다! 자바를 오라클이 인수했는데 자바에 라이센스가 있는 버전이 있으니 조심해야 함!

개발할 때는 license가 free인 자바를 꼭 써야함

Write Once, Run Anywhere(WORA), 플랫폼과 독립적이게 모두 동일한 결과를 얻을 수 있음 (확장성이 좋음)

JDK와 JRE

Java Development Kit(JDK) : 가장 큰 소프트웨어 환경 → 개발 할 때의 모든 것 (컴파일러, 디버거, 자바독 등)

Java Runtime Environment(JRE) : 자바를 실행할 때 필요함 → 배포하는 쪽에는 JDK말고, JRE까지만 따로 설치해도 괜찮음)

자바의 컴파일과 런타임

Java 컴파일은 JDK가 함! → 개발 환경에서는 JDK가 필요함

  1. .java 컴파일 시작
  2. javac이라는 Compiler가 Byte Code인 .class로 컴파일함
  3. (runtime) .class를 class loader가 가져옴
  4. runtime data area가 사용하는 변수를 메모리에 올림
  5. Execution Engine은 프로그램을 실행함

3-4-5가 JVM(Java Virtual Machine)에 해당함. 3-4-5는 계속 순환하면서 실행됨.

ClassLoader

클래스 로더는 Javac을 통해 컴파일된 바이트 코드를 Runtime Data Area로 저장함

그런데 한 번에 쓰지도 않는 코드를 올릴 필요 없으니, 필요한 바이트 코드만 실시간으로 동적 로딩함

(사용되지 않은 클래스를 미리 올려두지 않음)

적재 과정

  • 로딩 : .class를 찾아 메모리에 로드
  • 링크 : .class 파일을 실행되는지 확인
  • 초기화 : 클래스 및 static 코드를 실행

Runtime Data Area

일단 스레드에 PC Register, JVM Stack, Native Method Area가 있음

  • PC Register : 어떤 코드를 어떤 명령으로 실행할지 관리, 기록함
  • JVM Stack : 메소드, 변수, 데이터를 관리함
  • Native Method Area : java가 아닌 코드를 실행

스레드 외에 Heap, Method Area가 있음

  • Heap : 모든 스레드가 공유함, 생성한 객체와 배열이 저장됨 → Garbage Collector(GC)가 안 쓰는 데이터 처리함
  • Method Area : 모든 스레드가 공유함, 클래스에 대한 정보가 들어감 (상속 정보, 메소드 정보 등)

Execution Engine

자바는 컴파일 따로, 실행 따로인데 얘가 실행을 담당함

  • 인터프리터 : 코드를 한 줄 씩 읽어서 코드가 읽을 수 있는 기계어로 번역함
  • Just In Time(JIT) 컴파일러 : 미리 컴파일하여 속도를 향상 → 런타임에 실행됨
  • 가비지 컬렉터 : 힙 메모리에서 참조되지 않는 객체를 자동으로 삭제 → 메모리를 효율적으로 관리

자바의 변수 메서드 구조

자바는 변수의 타입을 명시해줘야함. 변수 타입은 primitive type, reference type으로 나뉨

Primitive Type (기본 자료형, 원시 데이터 타입)

원시 타입은 기본적인 데이터 타입을 의미하며, byte short int long float char double boolean을 의미함

Reference Type (참조 자료형)

원시 타입을 제외한 모든 것을 의미함. 클래스, 인터페이스, 배열 등이 있음

Access modifiers (접근 제어자)

public, protected, default, private이 있음. 속성과 메소드에 대한 접근을 제한하거나 허용하기 위해 용도에 맞게 사용됨.

  • public : 전역적으로 사용 가능함
  • protected : 하위 클래스에서만 참조가 가능함
  • default : 패키지 내에서 참조 가능함
  • private : 패키지 내에서도 참조가 불가능하며, 클래스 내에서만 사용 가능함

내용 정리 시간

구분설명
JDK컴파일러, 디버거, 자바독 등 자바에서 제공하는 모든 기능을 포함한 환경 (가장 큰 단위)
JRE자바를 실행할 때 필요한 환경만을 포함함 (컴파일 등은 포함되지 않음)
JVMclass loader, runtime data area, execution engine을 포함함. 실행에 필요한 코드를 동적으로 컴파일하고 데이터를 적재하며 실행되는 순환과정을 관리함.
runtime data area스레드, 힙, 메소드 에리아로 이루어짐. 스레드에서는 명령어와 변수를 관리하고 java외의 코드를 실행함. 힙과 메소드 에리아는 모든 스레드에서 공유됨. 힙은 생성한 객체와 배열을 저장하고, 메소드 에리아는 클래스에 대한 정보를 저장함.
primitive type원시 타입은 기본적인 데이터 타입을 의미하며, byte, int, char 등을 의미함.
reference data type원시 타입을 제외한 모든 것을 의미함. 클래스, 인터페이스, 배열 등이 있음.
access modifierspublic, protected, default, private이 있음. 속성과 메소드에 대한 접근을 제한하거나 허용하기 위해 용도에 맞게 사용됨.
public: 전역적으로 사용 가능함
protected: 하위 클래스에서만 참조가 가능함
default: 패키지 내에서 참조 가능함
private: 패키지 내에서도 참조가 불가능하며, 클래스 내에서만 사용 가능함
profile
안녕하세요

0개의 댓글