책을 보면서 새롭게 눈에 들어온 부분만 담았다. 이전에 배운 부분이기도 하고, 비교적 간단한 내용을 다루고 있기 때문이다,
클래스 블록 안에는 필드와 메소드가 있으며, 메소드 블록 안에는 실행문이 담겨져 있다.
클래스 명은 소스파일명과 일치해야 한다.
main 메소드는 JVM 실행시 가장 먼저 찾는 메소드이며, 따라서 다른 이름으로 바꿀 수가 없다. 그래서 main메소드를 프로그램 실행 진입점(entry point)이라고도 한다.
변수란, 하나의 값을 저장할 수 있는 메모리 공간이며, 데이터 타입 + 변수 이름 (ex. int x)으로 이루어진다.
이 때 데이터 타입으로 메모리 공간을 정하고, 변수 이름으로 메모리 주소에 이름을 붙인다. (참조 변수는 아님. 자세한 내용은 아래 데이터 타입을 참고)
그러므로 초기화되지 않은 변수는 값을 읽거나 사용할 수가 없다.
프로그램 실행 시 변수 이름으로 메모리 주소에 접근하여 값을 저장하거나, 읽게 된다.
리터럴 값이란, 소스코드 내에서 직접 입력한 값을 말한다.
중괄호 블록 안에서 선언된 변수를 지역 변수(local variable)라고 하며, 이는 블록 내에서만 사용이 가능하다.
이와 반대되는 개념은 전역 변수(global variable)로, 어떤 변수 영역 내에서도 사용될 수 있는 변수이다.
- 기본(원시, primitive) 타입은 값을 메모리에 직접 저장하는 타입이다.
- String 타입은 클래스 타입이며, String 변수는 참조변수로 값을 직접 저장하지 않는다. 객체 class를 생성하여 그곳에 값을 저장하고, 이후 변수 이름으로 객체의 번지를 참조한다.
- 여기서는 기본 타입을 다루도록 한다.
1byte의 크기로, -128~127의 수를 표현할 수 있다. 최상위 비트는 부호를 표현하며, 0을 표현할 때 양수 부호를 사용하므로 양수는 127까지의 크기를 가지게 된다.
색상 정보 및 파일과 이미지 등의 이진 데이터를 처리할 때 사용한다.
2byte의 크기로, unicode를 저장하기 위한 타입이라고 할 수 있다.
따라서 양수만을 저장하며, 0~ 약 6.5만의 크기를 가지고 있다. 알파벳과 특수기호는 0~127에, 한글은 4.5만~5.5만에 저장되어 있다.
char 타입 변수를 int 타입으로 저장하여 출력하면, 해당 유니코드의 숫자를 알 수 있다.
char x = 'A';
int y = x;
//y를 출력하면 65가 나오게 된다.
8byte의 크기로, 수치가 큰 데이터들을 다룰 때 사용한다. ex) 은행, 우주 관련..
변수를 초기화할 때 숫자 뒤에 'l'이나 'L'을 붙여주어야 컴파일러가 인식할 수 있다.
높은 정밀도를 요구하려면 double 타입을 사용하는 것이 좋다.
float 타입을 사용하려면 뒤에 'f', 'F'를 사용해야 한다.
정수 리터럴에 지수를 나타내는 'E'나 'e'가 붙어 있으면 실수 타입 정수로 저장해야 한다.
작은 크기의 타입이 큰 크기의 타입으로 변환되는 것을 의미한다.
작은 그릇의 물이 큰 그릇으로 갈 수 있듯이 작은 크기 타입도 큰 크기 타입으로 갈 수 있다.
크기의 차이는 메모리 크기의 차이를 의미한다.
다만 float는 표현범위가 크므로 int, long보다 크다. 또한 byte와 short는 부호로 인하여 char로 변환이 불가하다.
큰 크기의 타입을 강제로 작은 타입으로 변환시키는 것을 의미한다.
바이트를 쪼개어 뒤쪽에 있는 것들을 가져간다고 생각하면 된다. 그러므로 쪼갠 바이트로 표현이 되면 문제 없다.
실수에서 정수로 변환시 소수점 아래는 없어진다.
강제 타입변환 시 타입변환 검사를 할 수 있다.
if(i<Byte.MIN_VALUE||i>Byte.MAX_VALUE)
//다른 타입도 비슷하게 가능하다 ex) Int.MAX_VALUE, Int.MIN_VALUE
정밀도 손실을 피하기 위해서 정수에서 실수로 변환시에는 double을 써야 한다.
다른 타입 간 연산 시에는 큰 타입으로 자동 변환된다.
정수는 연산 시 int로 변환된다. 그러므로 타입을 유지하기 원한다면 강제변환을 사용해야 한다.