1. 변수 개요
변수란 데이터를 담아 두기 위한 하나의 그릇 또는 상자이다.
어떤 프로그래밍 언어든지 변수가 없는 언어는 없을 것이다. 그 만큼 매우 중요하며 가장 많이 쓰인다.
각 변수는 고유한 이름을 가지고 있으며 컴퓨터는 변수를 선언한 자료형의 사이즈만큼 메모리 공간을 할당한다.
할당된 메모리는 주소를 가지고 있으며 변수는 해당 주소의 대표 이름이 된다.
따라서 변수에 값을 넣는다는 뜻은 변수 이름으로 주소를 찾아 그 공간에 값을 입력한다는 것이다.
2. 변수의 종류
자바에는 5가지의 변수가 존재한다.
· 지역변수
· 매개변수
· 인스턴스 변수
· 클래스 변수
· 인스턴스 참조 변수
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
변수
|
설명
|
할당 위치
|
지역변수
|
메소드 또는 제어문 등의 중괄호 내에서 선언된 변수
|
Stack Area
|
매개변수
|
메소드에 인자를 전달하기 위한 변수
|
Stack Area
|
인스턴스 변수
|
static 없이 메소드 밖 또는 클래스 안에서 선언된 변수
|
Heap Area
|
클래스 변수
|
static이 붙은 메소드 밖 또는 클래스 안에서 선언된 변수
|
method Area
|
인스턴스 참조 변수
|
인스턴스를 생성, 접근하기 위해 선언한 변수
|
Stack Area
|
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
static 및 할당 위치에 대한 설명은 추후 다룰 예정이다.
3. 변수의 생존 시간
위에서 설명한 변수들은 기능, 할당 위치 등 차이점이 존재한다.
각 변수가 만들어지는 때는 당연히 변수를 선언한 때 이지만 변수가 소멸하는 시점은 종류에 따라 다르다.
또한 변수를 선언한 위치에 따라 사용할 수 있는 범위에도 차이가 있다.
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
변수
|
소멸 시점
|
사용 범위
|
지역변수
|
지역변수를 선언한 중괄호가 끝나는 시점
|
선언된 중괄호의 내부
|
매개변수
|
매소드가 끝나는 시점 (메소드의 중괄호)
|
선언된 메소드 내부
|
인스턴스 변수
|
객체를 참조한 다른 객체가 없는 경우
|
static 이 아닌 동일 클래스의 메소드
(상속의 경우는 예외) |
클래스 변수
|
프로그램이 종료될 경우
|
프로젝트 전체
|
인스턴스 참조 변수
|
변수를 선언한 중괄호가 끝나는 시점
|
변수가 선언된 중괄호 내부
|
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
※ 인스턴스 변수의 경우 상속 여부에 따라 사용 범위의 차이가 존재한다.
※ 표에는 간단하게만 작성하여 각 변수들이 메모리에 할당 / 삭제되는 구조는 추후 자세하게 다룰 예정이다.
4. 변수의 이름 정하기
변수의 이름을 정하는데는 5가지의 기본 규칙이 존재한다.
1) 길이 제한이 없다.
2) 첫 글자는 유니코드(한글가능), 알파벳, $, _ (underscore) 만 가능하다. ( 일반적으로 $와 _ 는 사용하지 않음)
3) 두 번째 문자부터는 알파벳, $, _ (underscore) 모두 가능하다.
4) 알파벳인 경우 첫 문자는 대문자로 시작된 단어를 사용하며 두 번째 단어부터는 대문자로 구분한다.
5) 상수는 모두 대문자로 작성하며 단어 사이는 _ 로 구분한다.
※ 위 규칙을 어겨도 코드 작성은 가능하지만 많은 자바 사용자들에게 전해지는 암묵적인 룰이라 기본 규칙은
지켜주는 것이 좋다.
각 변수의 사용 방법은 아래의 코드로 대체한다. (static 에 관련된 부분은 건너뛰자..)
package com;
public class Variable_Class {
//인스턴스 변수 (앞에 static이 안붙은 변수)
int iv;
//클래스 변수 (static이 붙은 변수)
static int sv;
//인스턴스 메소드 (static이 안붙은 메소드)
void insMethod(int pv) { // 개매변수
int lv; // 지역변수
iv = 10;
sv = 20;
clMethod(0);
}
//static 메소드 (static이 붙은 메소드) == 클래스 메소드
static void clMethod(int pv) {
int lv; // 지역변수
// iv = 100; // 메소드는 인스턴스가 없어도 사용 가능하지만 (static 메소드이기 때문에)
// iv 변수는 인스턴스가 존재해야만 사용할 수 있기 때문에 error 발생
sv = 200;
// insMethod(0); // error
}
}
package com;
public class UseClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Variable_Class.sv = 1000;
// Variable_Class.iv = 1000; // error iv변수는 static이 아님
Variable_Class.clMethod(0);
//Variable_Class.insMethod(0); // error intMethod 메소드는 static이 아님
Variable_Class vc = new Variable_Class(); // vc 라는 인스턴스 참조 변수 선언
vc.iv = 2000;
vc.sv = 3000;
vc.insMethod(0);
Variable_Class.clMethod(0);
}
}