값을 저장할 수 있는 메모리상의 공간
: 변수는 단 하나의 값을 저장할 수 있으며, 새로운 값을 저장하면 기존의 값은 사라짐
변수를 사용하려면 먼저 변수를 선언해야 함
class Exam {
public static void main(String[] args) {
int num; // num이란 이름의 변수를 선언
// 변수타입 + 변수이름
}
}
변수의 초기화(할당)란 변수를 사용하기 전에 처음으로 값을 저장하는 것
class Exam {
public static void main(String[] args) {
int num; // 변수를 선언
num = 1; // 변수의 초기화
}
}
상수 : 변하지 말아야 할 데이터를 저장하는 공간
: 변수와 같이 선언과 초기화하여 사용할 수 있지만 값은 변경할 수 없음]
상수를 선언하는 방법은 변수와 동일하며 변수의 타입 앞에 'final'을 붙여주면 된다. 이름은 모두 대문자로 하는 것이 암묵적인 관례이며 여러 단어로 이루어져 있는 경우 '_'로 구분한다
final int MAX_AGE = 134;
어떤 값의 유형 및 종류를 의미하고, 타입에 따라 값이 차지하는 메모리 공간의 크기와 값이 저장되는 방식이 결정된다
자바의 타입은 기본 타입과 참조 타입으로 나눌 수 있다
리터럴 (Literal) : '문자 그대로의'라는 뜻으로 프로그래밍에선 문자가 가리키는 값 그 자체를 의미하며, 리터럴을 사용할 때는 두 가지 사항을 주의해야 함
1. float 타입의 변수에 실수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 f를 붙여야 한다
2. long 타입의 변수에 정수형 리터럴을 할당할 때, 리터럴 튀에 접미사 L을 붙여야 한다
정수타입은 숫자를 나타내는 타입으로 btye, short, int, long까지 총 4개의 타입으로 분류된다
일반적으로 int 타입을 사용하며 타입별로 차지하는 메모리 공간의 크기와 표현할 수 있는 범위가 다르다
각 타입의 표현 범위를 넘어설 경우 오버플로우와 언더플로우가 발생한다
| 타입 | 메모리 | 표현 범위 |
|---|---|---|
| byte | 1byte | -128(-27) ~ 127(27 - 1) |
| short | 2byte | -32,768(-215) ~ 32,767(215 - 1) |
| int | 4byte | -2,147,483,648(-231) ~ 2,147,483,647(231 - 1) |
| long | 8byte | -9,223,372,036,854,775,808(-263) ~ 9,223,372,036,854,775,807(263 - 1) |
실수타입은 소수점을 가지는 값을 의미하며 float, double으로 분류된다
| 타입 | 메모리 | 표현 범위 | 정밀도 |
|---|---|---|---|
| float | 4byte | 음수 : -3.4 x 1038 ~ -1.4 x 10-45 양수 : 1.4 x 10-45 ~ 3.4 x 1038 | 7자리 |
| double | 8byte | 음수 : -1.8 x 10308 ~ -4.9 x 10-324 양수 : 4.9 x 10-324 ~ 1.8 x 10308 | 15자리 |
논리타입의 종류는 boolean형 한가지로 참(true) 또는 거짓(false)을 저장할 수 있는 데이터 타입이다
단순히 참과 거짓을 표현하기 위해선 1bit가 필요하지만 JVM이 다룰 수 있는 데이터의 최소 단위가 1byte이기 떄문에 boolean형은 1byte의 크기를 가진다
문자타입은 2byte 크기의 char형 하나만 존재하며 문자타입 변수를 선언하면 해당 변수에 오직 하나의 문자형 리터럴을 저장할 수 있다
문자형 리터럴을 작성할 떄는 반드시 작은 따옴표를 사용해야한다
자바는 유니코드로 문자를 저장한다. 유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 다루기 위한 국제 표준으로 각 문자에 숫자 코드 번호를 부여한 것이다. 따라서 문자형 리터럴을 문자형 변수에 할당하면 유니코드 숫자값이 저장된다
이를 응용하여 숫자를 문자형 변수에 할당할 수 있다. 숫자가 저장된 변수를 참조할 때 해당 변수가 저장하고 있는 숫자값을 유니코드로 인식하여 해당 숫자와 일치하는 코드를 가진 문자로 변환해준다
char exam = 65;
Syetem.out.println(exam); // 출력 결과 : A
변수는 타입을 변환할 수 있으며 자동 또는 수동으로 변환하는 경우가 다르다
// int 타입으로 선언된 변수 intNum을 더 작은 단위인 byte로 변환한다
int intNum = 128;
byte byteNum = (byte)intNum;
System.out.println(byteNum); // -128
// 타입이 변환되며 byte형의 표현 범위를 벗어나게 되어 오버플로우가 발생
자바는 String 클래스 타입을 사용하여 문자열을 다루며 문자열과 관련된 메서드들을 가지고 있다
String 타입은 기본적으로 큰따옴표로 감싸진 문자열을 의미한다
// 문자열 리터럴을 String 타입의 변수에 할당하는 방법
String myName = "Mason";
// String 클래스의 인스턴스를 생성하는 방법
String myName2 = new String("Mason");