[김영한의 자바 입문] 변수1(변수 선언, 변수 초기화, 변수 값 변경)
위 이미지에서 variable
이라고 적힌 폴더명 부분을 패키지라고 한다.
package variable;
public class Var1 {
public static void main(String[] args) {
System.out.println(10);
System.out.println(10);
System.out.println(10);
}
}
1. 패키지(package)와 변수(variable)
- 현재의 단계에서는 자바 파일을 구분하기 위한 폴더로 이해하면 된다.
variable
라는 이름의 패키지를 만들었다면 해당 패키지에 들어가는 자바 파일 첫줄에package varible;
와 같이 소속된 패키지를 선언해줘야 한다.- 자바 파일이 위치하는 패키지와
package variable
선언 위치가 같아야 한다.
이제 위 코드를 이용하여 변수에 대해서 알아보도록 하자.
위 코드에서 숫자 10이라고 적힌 곳을 모두 찾아서 20으로 변경을 하고 싶으면 총 3번의 코드 변경이 발생한다.
위 예제는 단순하기 때문에 3번만 변경하면 모든 숫자 부분의 변경이 완료되지만, 만일 숫자 10이 적힌 부분이 100개라면 100개의 코드를 모두 변경해야 한다.
더 나아가서 사용자에게 숫자를 입력하게 하고 사용자가 입력한 숫자를 출력하고 싶어진다면
결국 어딘가에 값을 보관해두고 필요할 때 값을 꺼내서 읽을 수 있는 저장소가 필요하게 된다.
이때 모든 프로그래밍 언어는 이런 문제를 해결하기 위해 변수(variable) 라는 기능을 제공한다.
변수는 말 그대로 변할 수 있는 값을 의미한다.
2. 변수 선언과 변수 초기화, 변수 값 읽기
package variable;
public class Var2{
public static void main(String[] args) {
int a;
a = 10;
System.out.println(a);
System.out.println(a);
System.out.println(a);
}
}
위 코드를 살펴보자.
2-1. 변수 선언
int a
- 이름이
a
인 숫자 정수(integer)를 보관할 수 있는 데이터 저장소를 만든다. 이것을 변수라 한다. - 이렇게 변수를 만드는 것을 변수선언이라 한다.
- 변수
a
에는 정수를 보관할 수 있다.
2-2. 변수 초기화
a = 10
- 자바에서
=
는 수학에서 이야기하는 equals와는 다른뜻이다. 오른쪽에 있는 값을 왼쪽에 저장한다는 뜻이다. - 숫자를 보관할 수 있는 데이터 저장소인 변수
a
에10
이라는 값을 저장한다. - 이처럼 선언한 변수에 처음으로 값을 대입해서 저장하는 것을 변수 초기화 라고 한다.
2-3. 변수 값 읽기
System.out.println(a)
- 변수에 저장되어 있는 값을 읽고 싶다면, 변수의 이름을 적어주기만 하면 된다.
- 변수
a
에10
이 들어가있다면 자바는 실행 시점에 변수의 값을 읽어서 사용한다.System.out.println(a);
: 변수 a의 값을 읽음System.out.println(10);
: a의 값인 10으로 변경, 숫자 10 출력
- 참고로 변수의 값은 반복해서 읽을 수 있다. 변수의 값을 읽는다고 값이 없어지는 것은 아니다.
3. 변수 값 변경
위에서 변수란, 변할 수 있는 수라고 말했었다.
따라서 a
에 저장된 값을 언제든지 바꿀 수 있다는 뜻이다.
변수에 값을 변경하는 코드를 살펴보자.
package variable;
public class Var3 {
public static void main(String[] args) {
int a; // 변수 선언
a = 10; // 변수 초기화 : a(10)
System.out.println(a); // 10출력
a = 50; // 변수 값 변경 : a(10 -> 50)
System.out.println(a); // 50출력
}
}
// 실행결과
// 10
// 50
프로그램은 한줄씩 순서대로 실행된다.
먼저 a = 10;
변수 초기화에서 변수 a에 10 을 저장한다.
이후, 변수 a의 값을 읽는다. 이때 저장된 값이 10 이므로 10을 출력한다.
다음, 변수 a의 값을 50으로 변경하여 저장한다.
이후, 변수 a의 값을 읽는다. 이때 저장된 값은 50 이므로 50을 출력한다.
4. 변수 선언 방법
변수를 선언하면 컴퓨터의 메모리 공간을 확보해서 그곳에 데이터를 저장할 수 있다.
그리고 변수의 이름을 통해 해당 메모리 공간에 접근할 수 있다.
쉽게 말하자면 데이터를 보관할 수 있는 공간을 만들고, 이후에 그곳에 이름을 부여한다.
package variable;
public class Var4 {
public static void main(String[] args) {
int a;
int b;
int c,d;
}
}
변수는 int a;
, int b;
와 같이 하나씩 선언할 수도 있고,int c,d;
와 같이 여러 변수를 한번에 선언할 수도 있다.
5. 변수의 초기화 방법
package variable;
public class Var5 {
public static void main(String[] args) {
int a;
a = 1;
System.out.println(a);
int b = 2;
System.out.println(b);
int c = 3, d = 4;
System.out.println(c);
System.out.println(d);
}
}
int a;
, a = 1;
과 같이 변수 선언과 초기화를 각각 진행할 수도 있고,int b = 2;
와 같이 변수 선언과 초기화를 한번에 할 수도 있다.int c = 3, d = 4;
와 같이 여러변수 선언과 초기화를 한번에 할 수도 있다.
6. 변수의 초기화., 중요할까?
만약 변수를 초기화하지 않고 사용하면 어떻게 될까?
package variable;
public class Var6 {
public static void main(String[] args) {
int a;
System.out.println(a);
}
}
위 이미지와 같이 오류가 발생하게 된다.java: variable a might not have been initialized
즉, 변수가 초기화되지 않았다는 오류 메세지이다.
왜 이런 오류가 발생할까?
컴퓨터의 메모리는 여러 시스템이 함께 사용하는 공간으로 어떠한 값들이 계속 저장된다.
변수를 선언하면 메모리상의 어떤 공간을 차지하고 사용하게 되는데, 그 공간에 기존에 어떤 값이 있었는지는 아무도 모른다.
따라서 초기화를 하지 않으면 이상한 값이 출력될 수 있기때문에 이런 문제를 예방하기 위해 자바는 변수를 초기화하도록 강제한다.
- 지금 학습하고 있는 변수는 지역 변수(Local Variable)라고 하는데, 지역 변수는 개발자가 직접 초기화를 해줘야 한다.
- 컴파일이 진행되지 않은 Var6.java파일은 out폴더에도 Var6.class가 생성되지 않는다.