변수(Variable)
- 컴퓨터 메모리의 데이터 저장소로 데이터에 이름을 부여하여 해당 데이터를 관리함.
- 물리적 관점 : 컴퓨터(RAM)는 0x7ffebc11과 같은 16진수 주소로 데이터를 관리하는데, 인간이 이 숫자를 모두 외울 수 없으므로, 변수는 이름을 붙여 해당 주소를 가리키게 만든 것
- 자료형에 따라 값 또는 참조 값을 저장
- '='을 통해서 CPU에게 연산 작업을 의뢰함
Cf) 컴퓨터 코딩에서 "==" 같다이며, "="는 할당하다라고 이해하면 쉬움.
변수의 작명규칙
1. 대/소문자 구분(Case Sensitivity)
- 자바에서 Score와 score는 완전히 다른 변수임을 기억해야한다.
- 컴퓨터 내부적으로 'S'(아스키 코드 83)와 's'(아스키코드 115)는 전혀 다른 비트 패턴이기 때문
2. 숫자로 시작 불가
- 컴파일러가 코드를 해석(Parsing)할 때, 숫자로 시작하면 이를 '숫자 리터럴(값)'로 인식하려 합니다. 1st라고 쓰면 컴파일러는 1이라는 숫자 뒤에 이상한 문자가 붙은 것으로 간주하여 에러발생
3. 특수문자 제약
4. 카멜 표기법(camelCase)
- 낙타의 등처럼 중간에 대문자가 튀어나온다고 하여 붙여진 이름으로 여러 단어를 붙여 쓸 때 띄어쓰기나 언더바 대신 각 단어의 첫글자를 대문자로 표기하는 방식
- 합성어에 대한 표기법으로 주로 사용

5. 자바 예약어(키워드)를 사용할 수 없음
- 접근제한자(public, private), import, for, if, else if 등은 변수명으로 사용할 수 없음
자료형(Data Type)
- 기본 자료형 : 변수 자체에 값(리터럴, Literal)이 직접 저장됨
- 참조 자료형 : 변수에 참조(레퍼런스, 주소)를 저장하며 기본 값은 null로 아무것도 참조하지 않음을 나타냄
| 타입 | 세부 타입 | 크기 (Byte) | 기본값 | 값의 범위 (Range) | 비고 |
|---|
| 논리형 | boolean | 1 bit* | false | true, false | 조건문 제어 |
| 문자형 | char | 2 byte | \u0000 | 0 ~ 65,535 (Unicode) | 문자 1개 저장 |
| 정수형 | byte | 1 byte | 0 | -128 ~ 127 | 이진 데이터 처리 |
| short | 2 byte | 0 | -32,768 ~ 32,767 | C언어 호환용 (비추천) |
| int | 4 byte | 0 | 약 ±21억 (-2^31 ~ 2^31-1) | 정수 연산의 기본형 |
| long | 8 byte | 0L | 약 ±900경 (-2^63 ~ 2^63-1) | 대용량 ID, 타임스탬프 |
| 실수형 | float | 4 byte | 0.0f | 소수점 7자리 정밀도 | 메모리 절약용 |
| double | 8 byte | 0.0d | 소수점 15자리 정밀도 | 실수 연산의 기본형 |
변수의 선언
- 데이터를 저장할 수 있는 공간을 확보하고 이름을 부여하는 작업
- 자료형과 이름을 통해 선언된다.
ex)
a라는 정수 변수를 만들다.
-> int a;
b라는 실수 변수를 만들다.
-> double b;
변수의 초기화
- 변수에 값을 저장하는 과정으로 선언 후 초기화와 선언과 동시에 초기화 모두 가능하다.
ex1) 선언 후 초기화
int a ;
int a = 10;
ex1) 선언과 동시에 초기화
int b = 1000;
변수의 종류
지역 변수(Local Variable)
- 메서드나 블랙 내부에서 선언하여 해당 범위 내에서만 유효한 변수로 초기화하지 않으면 사용할 수 없음
멤버 변수(Instance Variable)
- 클래스 내부에서 선언
- 객체가 생성될 때 메모리 할당
- 초기화하지 않으면 자료형의 기본 값으로 자동 초기화
클래스 변수(Static Variable)
- static 키워드를 사용하여 선언
- 모든 객체가 공유하는 변수
- 클래스 로드 시 메모리에 한번만 생성
형 변환(Type Casting)
묵시적 형 변환(Implicit Casting)
- 작은 데이터 타입을 큰 데이터 타입으로 변환
- 데이터의 손실이 없음
- 따라서 자동으로 변환
ex) 정수형에서 실수형으로 변환
int a = 1997 ;
double b = a;
** 이 경우 자동으로 형변환이 되며 실질적으로 데이터 손실이 없다.
-> int 보다 double이 더 큰 범위이기 때문이다.
명시적 형 변환(Explicit Casting)
- 큰 데이터 타입을 작은 데이터 타입으로 변환
- 데이터 손실 가능성 있음
- 따라서 직접 명시해 주어야 변환
ex) 실수형에서 정수형으로 변환
double a = 190.7;
int b = (int) a ;
** 이 경우 데이터 손실 가능성이 있기 때문에 int로 바꿔줌을 명확히 명시해줘야한다.
-> int 가 double 보다 더 작은 범위이기 때문이다.
cf) long(8byte)에서 float(4byte)로 바꿀때는 묵시적일까? 명시적일까?
묵시적으로 나타난다. 이유는 실질적으로 byte는 더 적지만 float가 더 큰 범위의 수를 표현할 수 있기 때문이다!!
한줄요약 : 파이썬과 다르게 자바는 자료형 부터 복잡하다..