자동 메모리 관리 : 가비지 컬렉터 (Garbage Collector, GC)가 메모리를 알아서 정리
멀티 쓰레드 지원 : 하나의 프로그램에서 동시에 여러 작업 가능
라이브러리가 풍부함
운영체제에 대해 독립적임 -> 자바 가상 머신(JVM) 덕분에 가능
자바 가상 머신 (JVM)
자바 프로그램이 실행되는 가상 머신 (소프트웨어로 만들어진 머신)
이 프로그램 덕분에 운영체제에 대해 독립적으로, 한번 작성하면 어디서든 실행 가능
자바 API
자바로 프로그램 만드는 데 필요한 주요 기능들을 제공
자바 API 문서 : 자바 API가 제공하는 기능에 대한 상세 정보
변수
하나의 값을 저장할 수 있는 메모리 공간(RAM) -> 변경 가능
특정 메모리 영역에 이름을 붙이고, 주소 대신에 이름을 이용해서 메모리의 값을 저장하고 읽을 수 있게 한 것.
클래스 변수
인스턴스 변수
지역 변수 : 0으로 자동 초기화되지 않기 때문에, 값을 읽기 전에 꼭! 초기화 해줘야 함
기본형: Primitive Type >> 오직 8개
- 실제 값을 저장
- 문자: char
- 숫자: 정수 - byte, short, int, long / 실수 - float, double
- 논리: boolean
참조형: Reference Type >> 기본형을 제외한 나머지
- 메모리 주소를 저장 (4byte or 8byte)
- 32bit JVM : 4 byte (최댓값 : 40억 byte = 4GB) >> 실제로 프로그램에서는 2GB 정도만 사용 가능
- 64bit JVM : 8 byte (최댓값 : 160경 byte = 1,600만 TB)
- String, System...
실수형 중, float는 int와 같이 4byte인데 왜 더 큰 값을 저장할 수 있을까? => 메모리를 아래와 같이 사용하기 때문이다.
float type의 메모리는 부호비트 1개와 지수 비트 8개, 가수 비트 23개로 구성되어 있다. (실제로는 정규화를 통해 가수 부분을 24비트를 사용한다.) 이 때문에, 정수형보다 큰 값을 저장할 수 있으나, 오차가 발생할 확률이 있다.
이 때 중요한 개념이 "정밀도"이다.
정밀도란, 값을 몇자리까지 오차없이 정확하게 표현가능한지를 의미한다.
정밀도는 "가수의 자릿수"에 의해 결정이 되는데, float type의 경우, 가수 비트를 실제로 24개를 사용하는데, 이진수로 2^24 개의 숫자 표현이 가능하다. 이는 10^7보다 크고, 10^8보다 작은 수이기 때문에, float type의 정밀도가 7자리로 정의된다.
(자릿수는 소숫점 아랫자리만 포함하는 것이 아니고, 모든 숫자의 자릿수이다. 123.4567 -> 7자리)
이에 반해, double type의 가수의 자릿수는 52개로, float type보다 약 2배이상 많다. 그러므로, 정밀도 또한 약 2배인 15자리이다.
실수는 값 저장 시, 정밀도 또한 고려되어야 한다.
상수, 리터럴
상수 : 한번만 값을 저장 가능한 변수 (변경 불가)
> 표기법 : final int MAX = 100; >> 여기서 MAX가 상수임. 100이 리터럴임!
리터럴 : 그 자체로 값을 의미하는 것 (수학에서 알던 그 상수!) 1, 2, 'A', "abc" 같은 것이 리터럴임