- 변수(Variable)란?
변수는 단 하나의 값을 저장할 수 있는 메모리 공간이다.
이 공간에 저장된 값은 변경이 가능하며 이 때, 새로운 값이 저장되고 기존의 값은 사라지게 된다.
- 변수의 선언과 초기화
변수는 선언하고 초기화를 해야 사용할 수 있다.변수 선언은 아래 코드와 같이 변수타입과 변수명을 지정해서 한다.
int age;
변수 선언 시 메모리의 빈 공간에 변수타입에 알맞은 크기의 저장 공간이 확보되고, 이 공간을 변수명을 통해 읽어올 수 있다.
변수 초기화는 아래 코드와 같이 대입연산자("=")를 이용해서 한다.
int age = 20;
변수 초기화를 하지 않으면 이전에 다른 프로그램이 사용하던 값(쓰레기값, Garbage Value)이 남아있을 수 있으며
java: variable a might not have been initialized 에러가 발생한다.
- 변수의 명명규칙
- 대소문자가 구분되며 길이에 제한이 없다.
- 예약어(keyword, 아래 표 참고)를 사용 ❌
- 숫자로 시작 ❌
- 특수문자는 '_' 와 '$' 만 허용
Keywords(*는 잘 사용 안 함), 자바 구문에 사용되는 단어 목록
abstract | continue | for | new | switch |
assert | default | goto* | package | synchronized |
boolean | do | if | private | this |
break | double | implements | protected | throw |
byte | else | import | public | throws |
case | enum | instanceof | return | transient |
catch | extends | int | short | try |
char | final | interface | static | void |
class | finally | long | strictfp | volatile |
const* | float | native | super | while |
- 변수의 명명 관례
- 클래스 이름의 첫 글자는 항상 대문자
- 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 (camelCase)
- 상수의 이름은 모두 대문자, 여러 단어인 경우 '_'로 단어 구분
- 변수의 타입
변수의 타입은 기본형과 참조형으로 나눌 수 있다.
기본형 변수는 실제 값(data)을 저장, 참조형 변수는 어떤 값이 저장되어 있는 주소를 저장한다.
- 기본형(Primitive Type)
- null 값을 가질 수 없다
- 변수의 선언과 동시에 메모리를 생성한다
- 모두 메모리의 스택(stack) 영역에 저장된다
- 실제 값을 메모리에 저장해둔다
타입 | 할당 메모리 크기 | 기본값(멤버 변수로서) | 값의 범위 | |
논리형 | boolean | 1 byte (8 bit) | false | true, false |
문자형 | char | 2 byte (16 bit) | '\u0000' (unicode) | 0 ~ 65,535 |
정수형 | byte | 1 byte (8 bit) | 0 | -128 ~ 127 |
short | 2 byte (16 bit) | 0 | -32,768 ~ 32,767 | |
int | 4 byte (32 bit) | 0 | -2,147,483,648 ~ 2,147,483,647 | |
long | 8 byte (64 bit) | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
|
실수형 | float | 4 byte (32 bit) | 0.0F | 1.4 * \(10^{-45}\) ~ 3.4 * \(10^{38}\) |
double | 8 byte (64 bit) | 0.0 | 4.9 * \(10^{-324}\) ~ 1.8 * \(10^{308}\) |
정수형이 가질 수 있는 값의 범위는 \(-2^{n-1}\) ~ \(2^{n-1}-1\)(n은 bit 수) 이다.
실수형은 부동소수점(소수점의 위치를 움직임) 정밀도에 따라 값의 범위가 달라진다. 실수 부분의 표현 범위가 많아지면 정수 부분의 표현 범위는 그만큼 줄어들게 된다.
위 기본형 타입 변수들이 문자열(String)과 덧셈 연산(+)을 하게 되는 경우 문자열로 자동 형변환 되고 연산을 수행하며, 결과값 역시 문자열이 된다.
변수(variable)는 하나의 값을 저장하기 위한 공간 (ex: score)
상수(constant)는 값을 한번만 저장할 수 있는 공간 (ex: MAX_SCORE)
리터럴(literal)은 그 자체로 값을 의미하는 것 (ex: 100)
int score = 100; final int MAX_SCORE = 100;
- 참조형(Reference Type)
- 데이터가 저장된 공간의 주소를 저장한다. (따라서, 이 변수를 접근하면 해당 주소로 참조해서 값을 가져오며, 변수에는 객체의 주소값만큼의 메모리(4 byte)만 할당받는다.)
- 변수는 스택 영역에 저장되고, 참조 주소에 있는 데이터는 메모리의 힙(heap) 영역에 저장된다.
- 기본적으로 null로 초기화된다.
타입 | 기본값 | 메모리 크기 |
배열(Array) | null | 4 byte (주소값 크기) |
열거(Enumeration) | null | |
클래스(Class) | null | |
인터페이스(Interface) | null |
참고
Java의 정석 3판 - 남궁성
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EB%B3%80%EC%88%98%EC%9D%98-%EA%B8%B0%EB%B3%B8%ED%98%95-%EC%B0%B8%EC%A1%B0%ED%98%95-%ED%83%80%EC%9E%85
기준일자: 2024년 01월 19일
정정해야할 내용이 있다면 댓글로 작성 부탁드립니다!
'Java' 카테고리의 다른 글
[Java] 문과 표현식 (3) (0) | 2024.02.20 |
---|---|
[Java] 문과 표현식 (2) (2) | 2024.02.20 |
[Java] 문과 표현식 (1) (0) | 2024.02.20 |
[Java] 컬렉션 프레임워크(Collection Framework), List, Set, Map (0) | 2024.01.19 |
[Java] 자바, JVM, JRE, JDK (1) | 2024.01.19 |