Java

[Java] 변수

monte6198 2024. 1. 19. 17:11

- 변수(Variable)란?

변수는 단 하나의 값을 저장할 수 있는 메모리 공간이다.

이 공간에 저장된 값은 변경이 가능하며 이 때, 새로운 값이 저장되고 기존의 값은 사라지게 된다.


- 변수의 선언과 초기화

변수는 선언하고 초기화를 해야 사용할 수 있다.변수 선언은 아래 코드와 같이 변수타입과 변수명을 지정해서 한다.

int age;

변수 선언 시 메모리의 빈 공간에 변수타입에 알맞은 크기의 저장 공간이 확보되고, 이 공간을 변수명을 통해 읽어올 수 있다.

 

변수 초기화는 아래 코드와 같이 대입연산자("=")를 이용해서 한다.

int age = 20;

변수 초기화를 하지 않으면 이전에 다른 프로그램이 사용하던 값(쓰레기값, Garbage Value)이 남아있을 수 있으며

java: variable a might not have been initialized 에러가 발생한다.


- 변수의 명명규칙

  1. 대소문자가 구분되며 길이에 제한이 없다.
  2. 예약어(keyword, 아래 표 참고)를 사용 ❌
  3. 숫자로 시작 ❌
  4. 특수문자는 '_' 와 '$' 만 허용

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

- 변수의 명명 관례

  1. 클래스 이름의 첫 글자는 항상 대문자
  2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 (camelCase)
  3. 상수의 이름은 모두 대문자, 여러 단어인 경우 '_'로 단어 구분

- 변수의 타입

변수의 타입은 기본형참조형으로 나눌 수 있다.

기본형 변수는 실제 값(data)을 저장, 참조형 변수는 어떤 값이 저장되어 있는 주소를 저장한다.

- 기본형(Primitive Type)

  1. null 값을 가질 수 없다
  2. 변수의 선언과 동시에 메모리를 생성한다
  3. 모두 메모리의 스택(stack) 영역에 저장된다
  4. 실제 값을 메모리에 저장해둔다
  타입 할당 메모리 크기 기본값(멤버 변수로서) 값의 범위
논리형 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)

  1. 데이터가 저장된 공간의 주소를 저장한다. (따라서, 이 변수를 접근하면 해당 주소로 참조해서 값을 가져오며, 변수에는 객체의 주소값만큼의 메모리(4 byte)만 할당받는다.)
  2. 변수는 스택 영역에 저장되고, 참조 주소에 있는 데이터는 메모리의 힙(heap) 영역에 저장된다.
  3. 기본적으로 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일

정정해야할 내용이 있다면 댓글로 작성 부탁드립니다!