Java의 변수 타입은 크게 기본형(Primitive Type) 과 참조형(Reference Type) 으로 나뉜다.
| 구분 | 메모리 저장 방식 | 종류 | 크기 | 표현 범위 | 특징 |
|---|---|---|---|---|---|
| 정수형 | 실제 값을 Stack에 저장 | byte, short, int, long | 1B, 2B, 4B, 8B | -128~127 … ±2^63-1 | 정수만 저장 |
| 실수형 | 실제 값을 Stack에 저장 | float, double | 4B, 8B | IEEE 754 표준 | 소수 저장 가능 |
| 문자형 | 실제 값을 Stack에 저장 | char | 2B | 0~65535 (유니코드) | 문자 1개 저장 |
| 논리형 | 실제 값을 Stack에 저장 | boolean | 1B | true / false | 논리 값만 |
| 타입 | 크기 | 표현 범위 |
|---|---|---|
| byte | 1바이트 | -128 ~ 127 |
| short | 2바이트 | -32,768 ~ 32,767 |
| int | 4바이트 | -2,147,483,648 ~ 2,147,483,647 |
| long | 8바이트 | 약 ±9.22×10^18 |
| 타입 | 크기 | 표현 범위 | 리터럴 표기 |
|---|---|---|---|
| float | 4바이트 | 1.4×10^-45 ~ 3.4×10^38 | F / f |
| double | 8바이트 | 4.9×10^-324 ~ 1.7×10^308 | D / d (생략 가능) |
| 타입 | 크기 | 범위 |
|---|---|---|
| char | 2바이트 | 0 ~ 65535 (유니코드) |
| boolean | 1바이트 | true, false |
| 구분 | 저장 방식 |
|---|---|
| 참조형 | 실제 데이터는 Heap에 저장, 변수에는 주소(참조값) 저장 |
| 타입 | 저장 위치 | 저장되는 값 |
|---|---|---|
| 기본형 | Stack | 실제 값 |
| 참조형 | Stack + Heap | Stack에는 참조값, 실제 객체는 Heap |
int x;
int y = 3;
double pi, rate, avg;
double height = 180.5, weight = 75.0;
| 연산자 종류 | 연산자 | 설명 |
|---|---|---|
| 형변환 연산자 | (cast) | 하나의 값을 지정된 타입으로 변환 |
| 산술 연산자 | +, -, , /, %, +=, -=, =, /=, %= | 기본 사칙연산 및 대입 복합연산 |
| 관계 연산자 | >, <, >=, <=, ==, != | 비교 결과를 boolean값으로 반환 |
| 비트 연산자 | &, | , ^, ~, <<, >>, >>> |
| 논리 연산자 | &&, |
| 연산자 | 설명 |
|---|---|
| + | 두 피연산자 더함 |
| - | 두 피연산자 뺌 |
| * | 곱셈 |
| / | 나눗셈 (정수/정수 → 정수) |
| % | 나머지 연산 |
| +=, -=, … | 복합 대입 연산 |
int intNum = 13;
double number = 1.1;
number + number → 2.2
intNum * 2 → 26
byte → short → int → long → float → double
.getClass().getName()으로 실제 타입 확인 가능예:
short → java.lang.Short
long → java.lang.Long
double → java.lang.Double
예:
int result = Integer.MAX_VALUE + 1;
→ -2147483648
예:
1e-300 * 1e-300 → 0.0
| 연산자 | 설명 |
|---|---|
| ++i | 먼저 증가 후 계산 |
| i++ | 계산 후 증가 |
| --i | 먼저 감소 후 계산 |
| i-- | 계산 후 감소 |
| +i | 양수 유지 |
| -i | 음수 전환 |
int i = 3;
i++; → 4
++i; → 5
--i; → 4
| 연산자 | 설명 |
|---|---|
| > | 왼 > 오른 |
| < | 왼 < 오른 |
| >= | 왼 ≥ 오른 |
| <= | 왼 ≤ 오른 |
| == | 같다 |
| != | 다르다 |
firstNumber = 10;
secondNumber = 20;
10 > 20 → false
(10 + 30) <= 20 → false
10 != 20 → true
| 연산자 | 설명 |
|---|---|
| && | AND, 둘 다 true일 때 true |
| ! | NOT |
| ^ | XOR (서로 다르면 true) |
| ?: | 조건 부 연산자 |
예:
(num1 > num2) && (num1 < num2)
조건식 ? 값1 : 값2
예:
int bTemp = 21
0001 0101
| 연산자 | 설명 |
|---|---|
| & | 비트 AND |
| ^ | 비트 XOR |
| ~ | 비트 반전 |
| << | 왼쪽 시프트 |
| >> | 오른쪽 시프트(부호 유지) |
| >>> | 오른쪽 시프트(부호 무시) |
비트 단위로 데이터를 처리하는 연산자.
특정 비트 정보를 추출하거나, ON/OFF 처리할 때 자주 사용.
예)
0x15 & 0x04 → 0x04
예)
0x15 | 0x02 → 0x17
권한과 같은 플래그 값을 다룰 때 흔히 사용됨.
userPermission |= readPermission;
userPermission & readPermission
userPermission &= ~readPermission;
정수의 모든 비트를 왼쪽/오른쪽으로 이동시키는 연산자.
| 연산자 | 설명 |
|---|---|
| << | 왼쪽 시프트(값이 2배 증가하는 효과) |
| >> | 오른쪽 시프트(부호 유지) |
| >>> | 오른쪽 시프트(부호 없는 시프트, 앞을 0으로 채움) |
예)
0x80000039 << 3 → 0x000001C8
encrypted = original ^ key
decrypted = encrypted ^ key
XOR은 (A ^ K) ^ K = A 의 성질을 이용하기 때문.
예)
0x15 ^ 0x2C → 0x39
여러 연산자가 함께 쓰이면, 우선순위가 높은 연산자부터 계산됨.
| 우선순위 | 연산자 |
|---|---|
| 1 | (), [], {}, ++/--(postfix) |
| 2 | !, ~, ++/--(prefix), (cast) |
| 3 | *, /, % |
| 4 | +, - |
| 5 | <<, >>, >>> |
| 6 | <, <=, >, >= |
| 7 | ==, != |
| 8 | & |
| 9 | ^ |
| 10 | |
| 11 | && |
| 12 | |
| 13 | ?: |
| 14 | =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |
c = a + b * d;
// 곱셈이 더하기보다 우선 → b*d 먼저 계산
(condition || false && false) → true
c = e & f ^ d;
기본형과 다르게, 참조형 값은 주소를 저장하며 null 가능.
| 타입 | 메모리 크기 | 기본값 |
|---|---|---|
| 클래스 | 4바이트 | null |
| 인터페이스 | 4바이트 | null |
| 배열 | 4바이트 | null |
| 열거 | 4바이트 | null |
| 데이터 타입 | 기본값 |
|---|---|
| byte | 0 |
| char | '\u0000' |
| short | 0 |
| int | 0 |
| long | 0L |
| float | 0.0F |
| double | 0.0 |
| boolean | false |
| 배열/클래스/인터페이스 | null |