변수
변수는 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름이다.
프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있다.
자바의 변수는 다양한 타입의 값을 저장할 수 없다. 만약 변수 타입이 정수라면, 정수 타입 변수에는 정수값만 넣을 수 있다.
예약어
예약어란, 이미 해당 프로그래밍 언어에서 의미를 갖고 사용되고 있는 단어로 변수 이름으로 사용할 수 없는 단어를 말한다.
기본타입 | boolean, byte, char, short, int, long, float, double |
접근제어자 | private, protected, public |
클래스와 관련된 것 | class, abstract, interface, extends, implements, enum |
객체와 관련된 것 | new, instance of, this, super, null |
메소드와 관련된 것 | void, return |
제어문과 관련된 것 | if, else, switch, case, default, for, do, while, break |
논리값 | true, false |
예외 처리와 관련된 것 | try, catch, filally, throw, throws |
기타 | package, import, synchronized, final, static |
값 저장
자바에서는 변수에 값이 저장되지 않으면 변수가 생성되지 않는다. 선언과 생성은 다른 것이기 때문이다.
변수에 최초로 값이 저장될 때 변수가 생성된다. 이것을 변수 초기화라고 부른다.
그리고 이때 사용된 값을 초기값이라고 한다. (변수에 최초로 저장된 값 = 변수 초기화 = 초기값)
변수가 초기화 되면 메모리가 번지 정보를 갖게 되고, 해당 메모리 번지에 값이 저장된다.
초기화 되지 않은 변수는 아직 메모리 번지 정보를 가지고 있지 않으므로 변수를 통해 메모리 값을 읽을 수 없다.
<잘못된 예>
int value; //변수 value 선언
int result = value + 10; //변수 value 값을 읽고 10을 더해서 변수 result에 저장
//* 라인 3에서 변수 value가 선언되었지만, 초기화되지 않았기 때문에
4라인의 value + 10에서 변수는 존재하지 않는다. 따라서 이 경우 컴파일 에러가 발생한다.*//
<올바른 예>
int value = 30;
int result = value + 10;
변수 사용
변수는 출력문이나 연산식 내부에서 변수에 저장된 값을 출력하거나 연산할 때 사용한다.
int hour =3;
int minute = 5;
//Println() 메소드의 매개값에 변수를 사용하면 변수에 저장된 값을 사용해서 출력할 수 있다.
//메소드란, 어떤 일을 처리하는 실행문들 모아놓은 블록이다.
System.out.println(hour + "시간" +minute + "분");
int totalMinute = (hour * 60) + minute;
int totalMinute = (3 * 60) + minute; //변수 hour에 저장된 값으로 대치
int totalMinute = 180 + 5; //변수 minute에 저장된 값으로 대치
int totalMinute = 185; //185를 변수 totalMinute에 저장
변수는 또 다른 변수에 대입하여 값을 복사할 수 있다.
int x = 10; //변수 x에 10을 저장
int y = x; //x에 저장된 값을 변수 y에 복사
//변수값 교환의 예
public calss varchange {
public static void main(String[] args) {
int x = 3;
int y = 5;
System.out.println("x:" + x + ", y:" + y);
int temp = x;
x = y;
y = temp;
System.out.println("x:" + x + ",y:" + y);
}
}
변수 사용범위
자바의 모든 변수는 중괄호 {} 블록 내에서 선언되고 사용된다.
메소드를 불록 내에서 선언된 변수를 로컬 변수(local variable)라고 부르는데, 로컬 변수는 메소드 블록 내에서만 사용되고 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.
변수는 블록 내 어디에서든 선언할 수 있지만, 변수 사용에는 제한이 따른다. 변수는 자신이 선언된 위치로부터 자신이 속한 블록 내부에서만 사용이 가능하다.
//main() 메소드 블록 내에서 변수가 선언된 모습
public class VariableArea {
public static void main(String [] args) {
int value = 10;
int sum = value + 20;
System.out.println(sum);
}
}
메소드 블록 내에는 다른 중괄호 블록 {}들이 작성될 수 있다.
예를 들어 조건문에 해당하는 if() {},
반복문에 해당하는 for() {}, while() {} 등이 중괄호 블록을 가질 수 있다.
이러한 중괄호 블록 내에서 선언된 변수는 해당 중괄호 내에서만 사용이 가능하고 밖에서는 사용할 수 없다.
// 사용하지 못하는 변수가 존재.
Public static void main(String args) {
int var1; //메소드 블록에서 선언
if (...) {
int var2; //if 블록에서 선언, var1과 var2는 사용 할 수 있음.
}
for(...) {
int var3; //for 블록에서 선언, var1과 var3 사용가능하지만 var2는 사용할 수 없음
}
//여기서부터는 var 1사용 가능, var2와 var3은 각각 if와 for 블록에서 선언됐기 때문에 사용 못함.
}
변수를 선언할 때는 다음과 같은 사항을 주의해야 한다.
- 변수가 어떤 범위에서 사용될 것인지를 생각학호 선언 위치를 결정해야 한다.
- 메소드 블록 전체에서 사용하고 싶다면, 메소드 블록 첫머리에 선언한다.
- 특정 블록 내부에서만 사용된다면 하단 블록 내에 선언한다.
Public calss varScope {
public static void main(String args) {
int v1 = 15;
if(v1 > 10) {
int v2;
v2 = v1 - 10;
}
int v3 = v1 + v2 + 5; //v2 변수 if 구분에서 선언되었기 때문에 메서드 블록에서는 사용 불가.
}
}
정리
변수 : 값을 저장할 수 있는 메모리 번지에 붙인 이름. 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다.
변수 선언 : 변수에 어떤 타입의 데이터를 저장할지, 그리고 변수 이름이 무엇인지를 결정하는 것을 말한다.
변수 사용 : 변수의 값을 읽거나 사용하는 것을 말한다. 변수는 출력문이나 연산식 내부에서 사용되어 변수에 저장된 값을 출력하거나 연산에 사용한다.
변수 사용 범위 : 변수는 자신이 선언된 위치에서 자신이 속한 블록 내부까지만 사용이 가능하고 밖에서는 사용할 수 없다.
자료 출처 : 신용권, 『혼자 공부하는 자바』, 한빛미디어(2019)
'프로그래밍 > Java' 카테고리의 다른 글
JAVA 공부 _기본 개념 및 용어 3 (2) | 2022.09.19 |
---|---|
Java 공부 _기본 개념 및 용어 1 (0) | 2022.09.18 |