2.1.1 변수(variable)
1. 변수(variable)란?
값(data)을 저장할 수 있는 메모리 공간
하나의 변수에는 단 하나의 값만 저장할 수 있으므로, 새로운 값을 저장하는 경우 기존의 값은 사라진다.
2. 변수의 선언
변수를 선언하기 위해서는 변수 타입과 이름을 지정해준다.
변수를 선언하면, 메모리의 빈 공간에 '변수 타입'에 알맞는 크기의 저장 공간이 확보되고,
'변수 이름'을 통해 저장 공간을 사용할 수 있다.
변수 타입 : 변수에 저장될 값이 어떤 타입(type)인지 저장
변수 이름 : 변수에 붙인 이름
변수 이름을 선언할 때에는 같은 이름의 변수를 여러 개로 설정할 수 없다. (서로 구별되어야 하기 때문이다.)
int age;
* 예시에서는 정수형인 int 타입을 지정했으며, 이름은 age로 설정했다.
(자바의 경우 한 줄의 코드가 끝나면 세미콜론(;)으로 문장을 마무리 해주어야 한다.)
3. 변수의 초기화
변수를 사용하기 위해서는 변수를 초기화(initialzation)해야 한다.
왜나하면 메모리는 여러 프로그램이 공유하는 자원이므로 알 수 없는 값(쓰레기 값)이 남아있을 수 있기 때문이다.
따라서 변수의 초기화란, 변수를 사용하기 전에 처음으로 값을 저장하는 것이다.
변수를 초기화 할때는 대입 연산자 '='를 사용하며, 오른쪽의 값을 왼쪽의 변수에 저장한다.
int a;
int b;
int a, b;
int x = 0;
int y = 0;
int x = 0, int y = 0;
* 변수는 한 줄에 하나씩 선언하는 것이 보통이나, 타입이 같은 경우는 콤마','를 이용해 여러 변수를 한 줄에 선언할 수 있다.
* 변수의 종류에 따라 초기화를 생략할 수 있지만, 사용되기 전에 적절한 값으로 초기화 하는 것이 좋다.
* 변수의 초기화 예제 2-1

* psvm + tab 으로 public static void main(String[] args) 자동완성
* soutv + tab 으로 System.out.println("year = " + year); 자동완성
화살표 키로 변수 변경이 가능하다.
* year과 age를 선언하면서 각각 0과 14로 초기화 했다.
이후 year는 변수 age 값에 2000을 더해준 값으로 저장하고, age는 기존의 age 값에 1을 더해서 저장한다.
* 앞의 포스트에서와 같이 패키지를 책의 순서와 동일하게 생성해 준 후, 예제의 이름과 동일한 클래스를 생성하여 코드를 작성했다.
4. 두 변수의 값 교환하기
두 변수의 값을 서로 바꾸기 위해서는 새로운 변수를 선언해서 임시 저장소로 사용해야 한다.
* 두 변수의 값 교환하기 예제 2-2

System.out.println("x = " x + " y =" + y); // 이 줄에서 command + D를 누르면
System.out.println("x = " x + " y =" + y); // 바로 밑에 똑같은 코드가 생성된다.
* 해당 줄의 코드를 이동하고 싶으면 shift + option + 화살표 키 (위/아래) 로 원하는 자리에 코드를 이동시킬 수 있다.
* 한 줄의 코드를 한 번에 없애고 싶으면 command + X를 눌러준다.
5. 변수의 명명규칙
변수의 이름처럼 프로그래밍에서 사용하는 모든 이름을 식별자(identifier)라고 하며,
식별자는 같은 영역 내에서 서로 구분(식별)될 수 있어야 한다.
* 식별자 생성 규칙
1. 대소문자가 구분되며 길이에 제한이 없다. (True와 true는 서로 다르다.)
2. 예약어는 사용해서 안된다. (true는 예약어이기 때문에 사용할 수 없지만, True는 예약어가 아니므로 사용할 수 있다.)
* 예약어란?
키워드(keyword), 리저브드 워드(reserved word)라고 하며 프로그래밍 언어의 구문에 사용되는 단어이다.
3. 숫자로 시작할 수 없다. (top10은 문자로 시작하기 때문에 가능하지만, 7up은 숫자로 시작하기 때문에 사용할 수 없다.)
4. 특수문자는 '_'와 '$'만 사용할 수 있다. ($harp은 가능하지만, S#arp은 사용할 수 없다.)
* 식별자 생성시 권장 규칙
1. 클래스의 이름의 첫 글자는 항상 대문자로 한다.
2. 변수와 메소드의 이름의 첫 글자는 항상 소문자로 한다. (예: totalMoney)
3. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다. (예: StringBuffer)
4. 상수의 이름은 모두 대문자로 하며, 여러 단어로 이루어진 경우 '_'로 구분한다 . (예: PI, MAX_NUMBER)
5. 용도를 알기 쉽게 의미있는 이름으로 하는 것이 좋다. (예: 현재위치 - curPos, 마지막 위치 - lastPos)