Chapter 02 변수(Varialbe)
1. 변수(variable)
값을 저장할 수 있는 메모리상의 공간.
이 공간에 저장된 값은 변경될 수 있다.
하나의 변수에 단 하나의 값만 저장할 수 있으므로 새로운 값을 저장하면 기존의 값은 사라진다.
변수를 사용하려면 먼저 변수를 선언해야한다.
int age; // age라는 이름의 변수를 선언
/*int는 변수타입 age는 변수이름*/
'변수타입'은 변수에 저장될 값이 어떤 '타입(type)'인지 지정하는 것이다.
저장하고자 하는 값의 종류에 맞게 변수의 타입을 선택해서 적어주면 된다.
'변수이름'은 변수에 붙인 이름이다. 변수는 '값을 저장할 수 있는 메모리 공간'이므로 변수의 이름은 메모리 공간에 이름을 붙여주는 것이다.
그래야 그 이름을 이용해서 저장공간(변수)에 값을 저장하고, 저장된 값을 읽어오기도 할 수 있다. 서로 구별될 수 있어야하므로 같은 이름의 변수가 여러개 존재하면 안된다.
변수를 선언하면 메모리의 빈 공간에 '변수타입'에 알맞는 크기의 저장공간이 확보되고 이 저장공간은 '변수이름'을 통해 사용할 수 있다.
변수를 사용하기 전에 처음으로 값을 저장하는 것.
변수를 선언한 이후부터는 변수를 사용할 수 있으나 그 전에 반드시 변수를 '초기화(initialization)'해야 한다.
메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장된 '알 수없는 값(쓰레기값, garbage value)'이 남아있을 수 있기 때문이다.
변수에 값을 저장할 때는 연산자'='를 이용한다. 오른쪽의 값을 왼쪽(변수)에 저장하라는 뜻이다. 그래서 대입연산자의 왼쪽에는 반드시 변수가 와야 한다.
int age = 25; // 변수 age를 선언하고 25로 초기화한다.
아래의 두 코드는 서로 같은 의미의 다른 코드이다.
변수는 한 줄에 하나씩 선언하는 것이 보통이지만, 타입이 같은 경우 콤마','를 구분자로 여러 변수를 한 줄에 선언하기도 한다.
int a;
int b;
int x = 0;
int y = 0;
int a, b;
int x = 0, y = 0;
class VarEx1 {
public static void main(String[] args) {
int year = 0;
int age = 14;
System.out.println(year); // 변수 year의 값을 화면에 출력
System.out.println(age); // 변수 age의 값을 화며에 출력
year = age + 2000; // 변수 age의 값에 2000을 더해서 변수 year에 저장
age = age + 1; // 변수 age에 저장된 값을 1증가시킨다.
System.out.println(year);
System.out.println(age);
}
}
/*
> 실행결과
0
14
2014
15
*/
두 개의 변수 age
와 year
를 선언한다음, 값을 저장하고 출력하는 코드이다.
변수 year
와 age
를 각각 0과 14로 초기화 한 다음 출력을 한다.
그 다음 문장에서 변수 age
에 저장된 값에 2000을 더한 결과를 변수 year
에 저장한다.
year = age + 2000;
➡️ year = 14 + 2000; // 변수 age에 저장된 값(14)을 읽어와서 식에 사용
➡️ year = 2014; // 변수 year에 2014를 저장한다.
저장된 값을 사용하려면, 그저 변수의 이름만 적어주면 된다.
그리고 변수에 값을 저장하는 '대입연산(=)'은 우변의 모든 계산이 끝난 후에 제일 마지막에 수행된다.
다음의 코드는 변수 age
에 저장된 값을 1증가 시키는데 변수의 값을 읽어다 1을 더한 다음 다시 변수 age
에 젖아하라는 뜻이다.
age = age + 1;
➡️ age = 14 + 1; // 변수 age에 저장된 값을 읽어온다.
➡️ age = 15; // 변수 age에 15를 저장한다.
int x = 10;
int y = 20;
변수 x
와 y
에 담긴 값을 서로 바꾸려면 x
의 값을 위한 임시 저장소로 사용할 변수를 하나 더 선언해야한다.
int x = 10;
int y = 20;
int tmp; // x값을 임시로 저장할 변수를 선언
그리고 아래와 같이 값을 옮기면 된다.
tmp = x; // 변수 x에 저장된 값을 변수 tmp에 저장
x = y; // 변수 y에 저장된 값을 변수 x에 저장
y = tmp; // 변수 tmp에 저장된 값을 변수 y에 저장
두 변수의 값을 교환하는 것은 마치 두 컵에 담긴 내용물을 바꾸려면 컵이 하나 더 필요한 것과 같다.
'변수의 이름'처럼 프로그래밍에서 사용하는 모든 이름을 '식별자(identifier)'라고 하며, 식별자는 같은 영역 내에서 서로 구분(식별)될 수 있어야한다.
그리고 식별자를 만들 때는 다음과 같은 규칙을 지켜야 한다.
1. 대소문자가 구분되며 길이에 제한이 없다.
True
와true
는 서로 다른 것으로 간주된다.2. 예약어를 사용해서는 안 된다.
true
는 예약어라서 사용할 수 없지만,True
는 가능하다.3. 숫자로 시작해서는 안 된다.
top10
은 허용하지만,7up
은 허용되지 않는다.4. 특수무자는 '_'와 '$'만을 허용한다.
$harp
은 허용되지만S#arp
은 허용되지 않는다.
예약어는 키워드(keyword) 또는 '리져브드 워드(reserved word)'라고 하는 데 프로그래밍언어의 구문에 사용되는 단어를 뜻한다.
그래서 예약어는 클래스나 변수, 메서드의 이름(identifier)으로 사용할 수 없다.
그 외에 필수적인 것은 아니지만 자바 프로그래머들에게 권장하는 규칙들은 다음과 같다.
1. 클래스 이름의 첫 글잔ㄴ 항상 대무자로 한다.
- 변수와 메서드의 이름은 첫 글자는 항상 소문자로 한다.
2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
lastIndexOf
,StringBuffer
3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.
PI
,MAX_NUMBER
위의 규칙은 반드시 지켜야 하는 것은 아니지만 자바 개발자들 사이의 암묵적인 약속이다.
변수의 이름은 짧을수록 좋지만 약간 길더라도 용도를 알기 쉽게 '의미있는 이름'으로 하는 것이 바람직하다. 변수의 선언문에 주석으로 변수에 대한 정보를 주는 것도 좋다.
int curPos = 0; // 현재 위치(current position)
int lastPos = -1; // 마지막 위치(last positon)
📑 원본 자료
- Java의 정석(3판) [남궁 성/도우출판/2016]