자바 변수에 들어가기 전에 예시 코드를 한번 봐보겠습니다.
Var1
public class variable {
public static void main(String[] args) {
System.out.println(10);
System.out.println(10);
System.out.println(10);
}
}
숫자 10이라고 적혀 있는 곳을 모두 찾아서 20으로 변경해야 합니다. 총 3번의 코드 변경이 발생합니다.
Var2
public class variable {
public static void main(String[] args) {
System.out.println(20);
System.out.println(20);
System.out.println(20);
}
}
단순한 예제여서 3번만 변경을 했지만, 만약 100개의 코드를 모두 바꿔야 합니다.
추가로, 사용자가 숫자를 입력하고 사용자가 입력한 숫자를 출력하고 싶을 때, 사용자가 입력한 값은 항상 변합니다.
누군가는 100을 입력할 수도, 누군가는 200을 입력할 수도 있습니다.
어딘가에 값을 보관해두고 필요할 때 값을 꺼내서 읽을 수 있는 저장소가 필요합니다.
데이터를 담을 수 있는 그릇이 필요합니다.
변수(variable)
그래서 모든 프로그래밍 언어는 변수(variable)라는 기능을 제공합니다.
이름 그대로 변할 수 있다는 뜻입니다.
Var1
package variable;
public class Var2 {
public static void main(String[] args) {
int a; //변수 선언
a = 10; //변수 초기화
System.out.println("a = " + a);
System.out.println("a = " + a);
System.out.println("a = " + a);
}
}
a를 20으로 출력하고 싶다면,
a = 20; 으로만 변경을 해주면 됩니다.
review
✅ 자바에서 = 은 오른쪽에 있는 값을 왼쪽에 저장한다는 뜻입니다.
✅ 숫자를 보관할 수 있는 데이터 저장소인 변수 a에 값 10을 저장합니다.
✅ 선언한 변수에 처음으로 값을 대입해서 저장한느 것을 변수 초기화라고 합니다.
✔️ 변수의 값을 읽는다고 값이 없어지지 않습니다. 여러 번 반복해서 읽을 수 있습니다.
변수 값 변경
변수는 이름 그대로 변할 수 있는 수입니다. 변수 a에 저장된 값을 언제든지 바꿀 수 있습니다.
Var3
package variable;
public class Var3 {
public static void main(String[] args) {
int a; //변수 선언
a = 10; //변수 초기화
System.out.println(a);
a = 50; //변수 값 변경 (10 -> 50)
System.out.println(a);
}
}
실행 결과
10
50
프로그램은 한 줄씩 순서대로 실행됩니다.
변수의 값을 변경하면 변수에 들어있던 기존 값은 삭제됩니다.
변수 선언과 초기화
변수를 선언하면 컴퓨터의 메모리 공간을 확보합니다. 그곳에 데이터를 저장할 수 있습니다.
변수의 이름을 통해서 해당 메모리 공간에 접근할 수 있습니다.
데이터를 보관할 수 있는 공간을 만들고, 그곳에 이름을 부여합니다.
초기화는 변수를 선언하고, 선언한 변수에 처음으로 값을 저장하는 것을 변수 초기화라고 합니다.
변수 선언
package variable;
public class Var4 {
public static void main(String[] args) {
int a;
int b;
int c, d;
}
}
변수 초기화
package variable;
public class Var5 {
public static void main(String[] args) {
//1. 변수 선언, 초기화 각각 따로
int a;
a = 1;
System.out.println(a);
//2. 변수 선언과 초기화를 한번에
int b = 2;
System.out.println(b);
//3. 여러 변수 선언과 초기화를 한번에
int c = 3, d = 4;
System.out.println(c);
System.out.println(d);
}
}
변수의 선언과 초기화를 각각 따로 할 수 있고, 한번에 할 수 있습니다.
여러 변수를 선언하면서 초기화도 동시에 진행할 수 있습니다.
변수는 초기화를 해야합니다.
변수를 초기화 하지 않으면 ?
컴퓨터에서 메모리는 여러 시스템이 함께 사용하는 공간입니다. 그래서 어떠한 값들이 계속 저장되는데,
변수를 선언하면 메모리상의 어떤 공간을 차지하고 사용합니다. 그런데, 그 공간에 어떤 값이 있었는지는 아무도 모르고, 초기화 하지 않으면 이상한 값들이 출력될 수 있습니다.
이러한 문제를 자바는 예방하기 위해서 변수를 초기화 하도록 강제합니다.
Var6
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
변수가 초기화되지 않았다는 오류 메시지이며 컴파일 에러입니다.
컴파일에러
컴파일 에러는 자바 문법에 맞지 않을 때 발생하는 언어입니다.
에러를 빠르게, 명확하게 찾을 수 있기 때문에 친해져야 하는 에러이고, 좋은 에러입니다.
변수 타입
데이터를 다루는 종류에 따라 다양한 형식이 존재합니다.
Var7
package variable;
public class Var7 {
public static void main(String[] args) {
int a = 100; //정수
double b = 10.5; //실수
boolean c = true; //불리언(boolean) true, false 입력 가능
char d = 'A'; //문자 하나
String e = "Hello Java"; //문자열, 문자열을 다루기 위한 특별한 타입
}
}
종류에 따라 다양한데, 이러한 형식을 영어로는 타입(type)이라 하고, 우리말로는 형식또는 형이라 합니다.
타입, 형식, 형등으로 부르는데 특별히 구분하지 않고 섞어서 부르기 때문에 모두 같은 말로 이해하면 됩니다.
리터럴(Literal) = 단어의 어원이 문자 또는 글자를 의미한다.
코드에서 개발자가 직접 적은 100, 10.5, true, 'A', "Hello Java' 와 같은 고정된 값을 프로그래밍 용어로 리터럴이라 합니다.
변수의 값은 변할 수 있지만, 리터럴은 개발자가 직접 입력한 고정된 값입니다. 따라서 리터럴 자체는 변하지 않습니다.
Var8
package variable;
public class Var8 {
public static void main(String[] args) {
//정수
byte b = 127; // -128~127
short s = 32767; //-32,768 ~ 32,767
int i = 2147483647; //-2,147,483,648 ~ 2,147,483,647 (약 20억)
long l = 922337036854775807L; //대충 엄청 큼.
//실수
float f = 10.0f;
double d = 10.0;
}
}
메모리를 작게 사용하면 작은 숫자를 표현할 수 있고, 메모리를 많이 사용하면 큰 숫자를 표현할 수 있습니다.
변수를 언선하면 표현 범위에 따라 메모리 공간을 차지합니다.
✅정수형
- byte : 1byte
- short : 2byte
- int : 4byte
- long : 8byte
✅실수형
- float : 4byte
- double : 8byte
✅기타
- boolean : 1byte
- char : 1byte
차지하는 메모리 공간을 정리하는 이유는 정처기 자격증 시험 볼 때 나옵니다.
범위가 나오는 게 아니라, 이제 메모리 크기로 값들을 구해야 하는 문제들이 출제 되기 때문에 정리해두었습니다.
출처 | 김영한 자바 입문
'language > Java' 카테고리의 다른 글
Java Array #자바 배열 (4) | 2025.02.10 |
---|---|
Java Iteration #자바 반복문 (5) | 2025.02.03 |
Java Condition #자바 조건문 (8) | 2025.01.30 |
Java Operator #자바 연산자 (9) | 2025.01.24 |
주석(comment) (5) | 2025.01.21 |