자바 기초 내용 정리
[1] JVM
1. JVM(Java Virtual Machine)
- 자바를 실행하기 위한 가상 기계
- 자바는 OS에 종속적이지 않기 때문에 OS에 종속받지 않고 실행되기 위해서는 JVM이 필요함 (OS에 종속받지 않고 CPU가 자바를 인식하고, 실행할 수 있게 해주는 가상 컴퓨터)
- JAVA 프로그램용 운영체제로서 자바의 원시코드 .java(소스코드)는 컴퓨터가 인식하지 못하며, 이는 기계어로 컴파일 되어야 하므로 .class(바이너리 파일)로 변환
2. JVM 데이터 영역 = Runtime Data Areas
- Method Area, Heap Area, Stack Area, PC register, Native Method Stack
- 코드의 데이터 타입에 의해 구분되어 각 영역에 메모리 할당
- PC Register, Stack Area, Native Method Stack은 각 쓰레드 별로 존재 (각 쓰레드(Thread)마다 서로 다른 메모리가 할당됨)
- Heap과 Method Area는 각각의 스레드(Thread)가 메모리를 공유
1) Heap
- new 연산자로 생성된 객체 또는 인스턴스와 배열을 저장
- Heap 영역에서 생성된 객체와 배열은 스택 영역의 변수나 다른 객체의 필드에서 참조
2) Method Area
- 프로그램 실행 중 클래스가 사용되면 JVM은 해당 클래스 파일을 읽어서 분석하여 클래스의 인스턴스 변수, 메서드 코드 등을 저장
3) Stack
- 메소드 호출마다 프레임이 생성되어 쌓임
- 프레임에는 리턴 값, 지역 변수, 연산자 스택, 현재 클래스 constant pool의 값을 호출할 레퍼런스 존재
- 이러한 레퍼런스를 통해 클래스, 인스턴스 변수들이나 생성된 참조 자료형 호출 (Heap 영역의 값 호출)
[2] 데이터 타입(자료형)
1. 기본 타입과 참조 타입
1) 기본 타입
- 값 자체가 들어있는 데이터 타입
- 정수 : byte(1byte), short(2byte), int(4byte), long(8byte)
- 실수 : float(4byte), double(8byte)
- 문자형 : char(2byte)
- 논리 타입 : boolean(1byte)
2) 참조 타입
- 배열, 열거, 클래스, 인터페이스
- 값이 있는 주소형 데이터를 가지고 있는 데이터 타입
2. 상수와 리터럴
1) 상수
- 변하지 않는 값
- final(예약어)를 사용하여 값이 바뀌지 않도록 함 + final이 메서드 앞에 있을 경우 오버라이딩을 못하게 함
2) 리터럴
- 프로그램에서 사용하는 모든 숫자, 문자, 논리 값
3. 형 변환
1) 묵시적 형 변환 = 자동 형 변환
- 작은 데이터 타입에서 큰 데이터 타입으로 변환 (byte ▶ int) / (int ▶ float)
2) 명시적 형 변환
- 큰 데이터 타입에서 작은 데이터 타입으로 변환
- 강제 형 변환시킬 값이나 변수 명 앞에 바꿀 자료형을 괄호 안에 명시
- double 값 int로 변경할 경우 double a = 3.14; int b = (int) a; 이렇게 명시해줘야 함