값(data)의 종류(type)에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것.
실제 값(data)를 저장한다.
기본형 타입의 메모리 크기는 다음과 같다.
1 byte | 2 byte | 4 byte | 8 byte | |
---|---|---|---|---|
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
정수형에서는 int
를, 실수형에서는 double
을 기본으로 사용한다.
어떤 값이 저장되어 있는 메모리 주소를 값으로 갖는다.
참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용
(참조형 변수의 타입 == 클래스의 이름)
따라서 새로운 클래스를 작성하는 것은 새로운 참조형을 추가하는 것과 같다.
String sentence = "I love Java!";
변수 sentence
는 문자가 아닌 문자열을 값으로 갖는다. 문자열은 참조형 변수의 일종이고 String
이라는 타입이다.
상수 또한 값을 저장할 수 있는 메모리 공간을 지칭하지만, 변수와 달리 한번 값을 정하면 변경할 수 없다. 변수의 타입 앞에 final
이라는 수식어를 붙여 선언한다.
final int MAX_SPEED = 10;
"상수가 갖고 있는 값 자체"를 리터럴이라고 부른다.
위의 예시로 치면 10 을 리터럴이라고 지칭할 수 있다.
변수나 상수처럼 리터럴에도 타입이 있다.
정수형이나 실수형은 타입이 여러 종류이기 때문에 접미사를 붙여 구분한다.
정수형:
long
타입 리터럴: 접미사 l
또는 L
(L
권장)long bigNum = 1_000_000_000L;
int
취급실수형:
float
타입 리터럴: 접미사 f
또는 F
float height = 182.5f;
double
타입 리터럴: 접미사 d
또는 D
double price = 1.4208d;
double
취급 (따라서 d
, D
는 생략 가능)
일반적으로는 변수의 타입과 리터럴의 타입이 일치하지만, 불일치하더라도 변수의 타입 범위가 더 넓다면 저장이 가능하다.
int intChar = 'A'; // char인 'A'의 유니코드값인 65가 int 범위 안에 들어가므로 OK
long longInt = 123; // long이 int보다 큰 범위이므로 OK
double doubleFloat = 182.58f; // double이 float보다 큰 범위이므로 OK
반대의 경우에는 컴파일 에러가 발생한다.
문자(char) 리터럴에는 단 하나의 문자만 저장 가능하고, 문자열(String) 리터럴에는 0개 이상의 글자들을 저장 가능하다.
char singleLetter = 'H'; // 홑따옴표 사용
String zeroOrMoreLetters = "Hyun"; // 쌍따옴표 사용
String
은 ""과 같이 0개의 문자 할당이 가능(empty string)하지만char
는 무조건 1개의 문자를 할당해야만 한다.
println()은 변수의 값을 그대로 출력하기 때문에 사용이 불편할 때가 많다. 반면, printf()는 원하는대로 변수를 가공하여 출력할 수 있어 용이하다.
String name = "Hyun Jun";
System.out.printf("My name is %s", name);
//출력 값: My name is Hyun Jun
%s
와 같은 표현을 지시자(specifier)라고 하며, 문자열 내에 들어간 개수 만큼 그 지시자에 들어갈 값(혹은 변수명)을 나열해주면 된다.
String currentMonth = "January";
int currentYear = 2022;
System.out.printf("This month is %s of %d", currentMonth, currentYear);
//출력 값: This month is January of 2022
지시자 | 의미 |
---|---|
%b | 진위값(boolean) 출력 |
%d | 10진 정수(decimal) 출력 |
%o | 8진 정수(octal) 출력 |
%x, %X | 16진 정수(hexa-decimal) 출력 |
%f | 부동소수점(float) 출력 |
%e, %E | 지수(exponent) 출력 |
%c | 문자(char) 출력 |
%s | 문자열(string) 출력 |
%f는 소수점 아래 6자리까지 출력 (7번째 자리에서 반올림)
정수형 지시자의 알파벳 앞에 숫자를 붙이면 출력될 총 자리수를 명시할 수 있다.
System.out.printf("[%10d]", 77);
// 출력 값: [ 77]
// 77 앞에 10칸의 자리수를 맞추기 위한 공백 8자리가 있다
부동소수형 지시자도 앞에 숫자를 붙여 총 자리수와 소수점 자리수를 명시할 수 있다.
System.out.printf("[%8.4d]", 82.58);
// 출력 값: [ 82.5800]
// 소수점 4자리를 맞추기 위해 없는 자리는 0으로 채워졌고, 나머지 4자리를 정수부로 맞추기 위해 앞자리에 빈칸이 1개 생겼다.
지시자 앞에 붙는 숫자에 음의 부호(-)가 있으면 좌측 정렬된다.