Chapter 02. 변수 (Variable)
1. 변수(Variable)란?
값을 저장할 수 있는 메모리상의 공간
변수란, 단 하나의 값만 저장할 수 있는 메모리 공간
int age; // 변수 선언
age = 25; // 값 저장 (초기화)
int score = 90; // 선언과 동시에 초기화변수 초기화
- 초기화: 변수를 사용하기 전에 처음으로 값을 저장하는 것
- 메모리에 **쓰레기값(garbage value)**이 남아 있을 수 있으므로 반드시 초기화 필요
2. 변수 명명규칙
| 규칙 | 설명 | 예시 |
|---|---|---|
| 대소문자 구분 | 길이 제한 없음 | True ≠ true |
| 예약어 사용 불가 | 키워드 사용 불가 | int, class 등 |
| 숫자로 시작 불가 | 첫 글자는 문자 | top10 ✓, 7up ✗ |
| 특수문자 | _와 $만 허용 | $harp ✓, S#arp ✗ |
권장 명명법
| 대상 | 규칙 | 예시 |
|---|---|---|
| 클래스 | 첫 글자 대문자 | StringBuffer |
| 변수/메서드 | 첫 글자 소문자 (camelCase) | lastName |
| 상수 | 모두 대문자, _로 구분 | MAX_VALUE |
3. 자료형(Data Type)
기본형 vs 참조형
| 구분 | 설명 | 종류 |
|---|---|---|
| 기본형 (primitive) | 실제 값 저장 | 8개 |
| 참조형 (reference) | 객체 주소 저장 | 기본형 제외 모든 타입 |
기본형 8가지
┌─────────────────────────────────────────────────┐
│ 기본형 (Primitive Type) │
├──────────┬──────────┬──────────┬───────────────┤
│ 논리형 │ 문자형 │ 정수형 │ 실수형 │
├──────────┼──────────┼──────────┼───────────────┤
│ boolean │ char │ byte │ float │
│ (1) │ (2) │ short │ double │
│ │ │ int │ │
│ │ │ long │ │
└──────────┴──────────┴──────────┴───────────────┘
(괄호 안은 byte 수)기본형 크기와 범위
| 타입 | 크기 | 범위 |
|---|---|---|
boolean | 1 byte | true, false |
char | 2 byte | 0 ~ 65,535 (유니코드) |
byte | 1 byte | -128 ~ 127 |
short | 2 byte | -32,768 ~ 32,767 |
int | 4 byte | 약 ±21억 |
long | 8 byte | 약 ±922경 |
float | 4 byte | 정밀도 7자리 |
double | 8 byte | 정밀도 15자리 |
n비트로 표현 가능한 범위: -2^(n-1) ~ 2^(n-1)-1
4. 상수와 리터럴
final int MAX_SPEED = 100; // 상수: 한 번 저장하면 변경 불가
int year = 2024; // 2024가 리터럴| 용어 | 정의 |
|---|---|
| 변수 | 하나의 값을 저장하기 위한 공간 |
| 상수 | 값을 한 번만 저장할 수 있는 공간 (final) |
| 리터럴 | 그 자체로 값을 의미 (123, 3.14, ‘A’) |
리터럴 접미사
| 타입 | 접미사 | 예시 |
|---|---|---|
long | L | 100L |
float | f | 3.14f |
double | d (생략 가능) | 3.14d |
진법 접두사
| 진법 | 접두사 | 예시 |
|---|---|---|
| 2진수 | 0b | 0b0101 |
| 8진수 | 0 | 077 |
| 16진수 | 0x | 0xFF |
5. 형식화된 출력 - printf()
| 지시자 | 설명 | 예시 |
|---|---|---|
%d | 10진 정수 | 123 |
%x, %X | 16진 정수 | 7b, 7B |
%o | 8진 정수 | 173 |
%f | 부동소수점 | 3.140000 |
%e | 지수 표현 | 3.14e+00 |
%c | 문자 | A |
%s | 문자열 | Hello |
%b | boolean | true |
6. 진법
진법 변환
10진수 → 2진수: 2로 나누기 반복, 나머지를 역순으로
2진수 → 10진수: 각 자리수 × 2^n 합산
2진수 → 8진수: 3자리씩 묶기 (2³ = 8)
2진수 → 16진수: 4자리씩 묶기 (2⁴ = 16)음수 표현 - 2의 보수법
양수 5: 0101
↓ 1의 보수 (비트 반전)
1010
↓ +1 (2의 보수)
음수 -5: 1011MSB(Most Significant Bit): 최상위 비트, 0이면 양수, 1이면 음수
7. 문자형 (char)
문자와 유니코드
char ch = 'A'; // 실제로는 65(유니코드) 저장
char ch2 = 65; // 위와 동일
int code = (int)ch; // 유니코드 값 확인: 65특수 문자
| 이스케이프 | 의미 |
|---|---|
\t | 탭 |
\n | 줄바꿈 |
\\ | 역슬래시 |
\' | 작은따옴표 |
\" | 큰따옴표 |
인코딩 방식
| 방식 | 특징 |
|---|---|
| ASCII | 7bit, 128개 문자 |
| UTF-16 | 2byte 고정, Java 내부 사용 |
| UTF-8 | 1~4byte 가변, 웹 표준 |
8. 정수형 오버플로우
최대값 + 1 → 최소값
최소값 - 1 → 최대값byte b = 127; // byte 최대값
b++; // 오버플로우 발생
// b = -128 // 최소값으로 순환정수형 선택: 기본적으로
int사용 (CPU가 가장 효율적으로 처리) 약 ±20억 초과 시long사용
9. 실수형
float vs double
| 항목 | float | double |
|---|---|---|
| 크기 | 4 byte | 8 byte |
| 정밀도 | 7자리 | 15자리 |
| 기본형 | - | ✓ (기본) |
실수형 저장 구조
float (32bit): S(1) + E(8) + M(23)
double (64bit): S(1) + E(11) + M(52)
S: 부호 (0=양수, 1=음수)
E: 지수 (Exponent)
M: 가수 (Mantissa) - 정밀도 결정오버플로우 vs 언더플로우
| 현상 | 결과 |
|---|---|
| 오버플로우 | 무한대 (Infinity) |
| 언더플로우 | 0 (양의 최소값보다 작은 값) |
요약
| 항목 | 핵심 |
|---|---|
| 변수 | 값을 저장하는 메모리 공간, 초기화 필수 |
| 기본형 | 8가지 (boolean, char, byte, short, int, long, float, double) |
| 참조형 | 객체 주소 저장, null 가능 |
| 상수 | final 키워드, 변경 불가 |
| 리터럴 | 값 자체, 접미사로 타입 구분 (L, f, d) |
| 정수형 | int 기본, 오버플로우 시 순환 |
| 실수형 | double 기본, 정밀도가 핵심 |