변수

변수는 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름이다. 

프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있다.

자바의 변수는 다양한 타입의 값을 저장할 수 없다. 만약 변수 타입이 정수라면, 정수 타입 변수에는 정수값만 넣을 수 있다.  

 

예약어

예약어란, 이미 해당 프로그래밍 언어에서 의미를 갖고 사용되고 있는 단어로 변수 이름으로 사용할 수 없는 단어를 말한다.

 

기본타입 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
블로그 이미지

unpractical human

수없이 거듭되는 실패를 양분 삼아 한 걸음씩 나아가자

,