목표
- 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
참고 자료
- 자바의 정석 => https://coupa.ng/b93eFX
# 리터럴이란(literal)?
원래 12, 123, 3.14, 'A'와 같은 값들이 상수이다.
프로그래밍에서는 상수를 값을 '한번 저장하면 변경할 수 없는 저장공간' 으로 정의 해서 다른 이름으로 불러야만 했다.
그래서 상수 대신 리터럴이라는 용어를 사용한다.
=> 리터럴은 기존에 알던 '상수' 의 다른 이름일 뿐이다.
변수(variable) : 하나의 값을 저장하기 위한 공간
상수(constant) : 값을 한번만 저장할 수 있는 공간
리터럴(literal) : 그 자체로 값을 의미하는 것
# 리터럴의 타입과 접미사
변수에 타입이 있는 것처럼 리터럴에도 타입이 있다.
- 리터럴은 접미사를 붙여서 타입을 구분한다.
- 정수형의 경우, long타입의 리터럴에 접미사 'l' 또는 'L'을 붙이고,
접미사가 없으면 int 타입의 리터럴이다.
# 2, 8, 16진수로 표현된 리터럴
int octNum = 010; // 8진수 10, 10진수 => 8
int hexNum = 0x10; // 16진수 10, 10진수 => 16
int binNum = 0b10; // 2진수 10, 10진수 => 2
# 큰 숫자를 편하게 읽게 만드는법
long big = 100_000_000_000L; // 접미사 f 대신 F를 사용해도 된다.
long hex = 0xFFFF_FFFF_FFFF_FFFFL; // 접미사 d 대신 D를 사용해도 된다.
# 실수형 (float, double)
float pi = 3.14f; // 접미사 f 대신 F를 사용해도 된다.
double rate = 1.618d; // 접미사 d 대신 D를 사용해도 된다.
* 접미사가 붙은 타입은 long, float, double 뿐인데, double은 생략가능므로 long과 float만 신경쓰면 된다.
# 타입의 불일치
리터럴의 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만,
타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 혀용된다.
int i = 'A'; // OK, 문자 'A' 의 유니코드인 65가 변수 i에 저장된다.
long l = 123; // int보다 long 타입이 더 범위가 넓다.
double = 3.14f; // OK, float보다 double타입이 더 범위가 넓다.
그러나 리터럴의 값이 변수인 타입의 범위를 넘어서거나,
리터럴의 타입이 변수의 타입보다 저장범위가 넓으면 컴파일 에러 발생한다.
int i = 0x123456789; // 에러. int 타입의 범위를 넘는 값을 저장
float = f = 3.14; // 에러. float 타입보다 double 타입의 범위가 넓다.
* float는 접미사나 정밀도 등신경 쓸 것이 많다. 이런 것들이 귀찮다면 그냥 double을 사용하자.
# 문자, 문자열 리터럴
char ch = 'J'; // char ch = 'Java'; 이렇게 할 수 없다.
String name = "Java"; // 변수 name에 문자열 리터럴 "Java"를 저장