컴퓨터 메모리(RAM)는 값을 저장할 수 잇는 수많은 번지(주소)들로 구성되어 있음. 메모리의 어디에 저장하고, 어떤 방식으로 저장할지 정해놓지 않으면 프로그램 개발이 무척 어렵게 되는데, 이러한 문제를 해결하기 위해 변수라는 개념을 사용한다.
값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름으로 프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있음.
메모리에 값을 저장하고 싶다면 변수를 선언하고 변수에 값을 지정하면 된다. 그러면 메모리의 어디에 저장하고, 어떤 방식으로 지정할지는 프로그래밍 언어와 운영체제가 정한다. 자바의 경우 JVM이 하는 일이다.
Java에서는 변수를 사용하기 위해서 먼저 변수를 선언해야 함.
변수 선언
은 변수에 어떤 타입의 데이터
를 저장할 것인지 그리고 변수 이름
이 무엇인지를 결정함.
int x;
int y;
int z;
int x, y, z; // 가능 o
타입은 변수에 저장되는 값의 종류와 범위를 결정짓는 요소이며, 같은 타입의 변수는 콤마(,)를 이용해 한꺼번에 선언할 수도 있음.
자바에서는 변수에 값이 저장되지 않으면 변수가 생성되지 않음❗️
선언과 생성은 다름! 변수 선언은 저장되는 값의 종류와 이름만 언급한 것이며 변수에 최초로 값이 저장될 때 변수가 생성됨. 이것을 변수 초기화
라고 하며 이때 사용된 값을 초기값
이라고 한다.
int score = 90;
초기값은 위와 같이 변수를 선언함과 동시에 설정 가능하며 변수가 초기화되면 메모리 번지 정보를 갖게 되고, 해당 메모리 번지에 값이 저장된다.
int value; // 선언
int result = value + 10; // 선언만 되고 초기화되지 않았기 때문에 컴파일 에러 발생
초기화 되지 않은 변수는 아직 메모리 번지 정보를 가지고 있지 않으므로 변수를 통해 메모리 값을 읽을 수 없음.
메소드 블록 내에서 선언된 변수를 로컬 변수
라고 부르는데, 로컬 변수는 메소드 블록 내부에서만 사용되고 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.
public class VariableExample{ // 클래스 블록
public static void main(String[] args){ // 메소드 블록
int value = 10; // 로컬 변수 value
int sum - value + 10; // 로컬 변수 sum
System.out.println(sum);
}
}
변수는 블록 내 어디에서든 선언할 수 있지만, 변수 사용에는 제한이 따름.
변수는 기본적으로 자신이 선언된 위치로부터 자신이 속한 블록 내부에서만 사용할 수 있음❗️
메소드 블록 내에는 다른 중괄호 {} 블록들이 작성될 수 있음. 예를 들어 조건문에 해당하는 if(){}, 반복문 for(){}, while(){} 등이 중괄호 블록을 가질 수 있는데, 이러한 경우 또한 중괄호 {} 블록 내에서 선언된 변수는 해당 중괄호 {} 블록 내에서만 사용이 가능하고 밖에서는 사용할 수 없음!
❗️ 변수 설정 시 주의사항
Ref.
책 - 혼자 공부하는 자바