클래스는 내부상태를 표현하기 위해 여러 가지 종류의 변수를 포함할 수 있다. 클래스가 가질수 있는 변수는 객체 변수, 클래스변수(정적변수), final 변수 등이 있다.
변수를 선얼할 때는 클래스와 마찬가지로 접근지정자를 가질수 있으며 변수에 사용하는 접근 지정자는 다음 표와 같다.
접근 지정자 |
의미 |
사용 예 |
없음(default) |
패키지 내부에서만 접근 가능함. |
int value; |
public |
패키지 내부, 외부에서 모두 접근 가능함. |
public int value; |
protected |
패키지 내부와 선언된 클래스, 하위 클래스에서 접근 가능함. |
protected int value; |
private |
선언된 클래스 내에서만 사용가능함.(하위 클래스 에서도 사용 불가능) |
private int value; |
static |
정적 멤버로 선언함(클래스 당 하나 존재). |
static int value; |
final |
초기화가 끝나면 더 이상 값을 바꿀 수 없는 변수(상수)임. |
final int value; |
transient |
변수가 클래스 자체의 속성이 아님을 나타냄(시간과 같이 외부의 요인에 의해서 임의로 바뀔 수 있는 경우) |
transient int value; |
volatile |
변수를 다룰 때마다 동기화를 시킴(다수의 쓰레드가 참조할 때 유용) |
volatile int value; |
static으로 선언된 변수들은 클래스 내에서 밖에 선언할 수 없으므로 클래스 변수라고도 부르며, 나머지는 클래스의 인스턴스 즉 객체마다 하나씩 생기므로 객체 변수 라고 부른다.
1) 객체 변수
클래스 안에서 선언되어 객체의 속성을 나타내는 변수를 객체 변수라고 부른다. 객체 변수의 중요한 특징을 살펴보면 같은 클래스를 가지고 만든 여러 객체마다 각각 다름 메모리 영역을 가지며, 다른 값을 가질 수 있는 변수라는 사실이다. 즉 여러개의 객체를 만들었을때 각각의 객체는 서로의 값에 영향을 주지 않는다. 이러한 객체 변수는 객체 속성 변수와 객체 참조 변수로 나눌 수 있다.
객체 속성 변수는 자바의 기본 자료형을 저장할 수 있는 변수로서 변수의 저장 공간에 변수의값이 저장된다. 정수형 변수, 실수형 변수, 문자형 변수, boolean형 변수 등이 객체 속성 변수에 속한다.
객체 참조 변수는 문자열, 배열 등의 객체를 가리키는 변수로서 변수의 저장 공간에 객체가 저장된 메모리의 주소 값이 저장된다. 객체 속성 변수는 변수 선언을 하면 곧 바로 사용할 수 있지만 객체 참조 변수는 변수 선언을 한 후 new() 메소드를 사용하여 실제 데이터가 저장될 공간을 할당해 주어야 한다.
2) 클래스 변수
클래스 변수는 클래스의 모든 객체가 공유하는 전역변수를 말하며, 클래스 변수는 객체 변수 앞에 static이라는 키워드를 명시해주면 된다. 클래스 변수를 선언하는 형식은
" static 자료형 변수명 = 초기 값; " 으로 선언한다.
클래스 변수는 메소드 영역에 따로 잡혀 해당 클래스에 대한 모든 객체들이 공유하는 변수이다. 따라서 클래스 변수는 객체의 생성과 관련이 없으며, 클래스가 메모리에 적재될 때 단 한번 클래스 변수를 위한 메모리가 할당되고 초기화 된다. 따라서 객체를 생성하지 않더라도 클래스 변수에 대한 접근이 가능하다. 그러나 키워드 static이 없으면, 객체 변수로 선언된다.
3) final 변수
final 변수는 변할 수 없는 상수 값을 가진다. 즉, final이 붙는 변수는 단 한번 초기화될 수 있으며, 그 이후에는 그 값을 변경할 수 없다. C언어에서 상수를 대문자로 표기하듯이 자바에서도 final 변수는 대문자를 사용하여 선언하는 것이 관례이다.
4) 변수의 접근 지정자
접근 지정자는 다른 클래스에서 멤버 요소의 접근을 제한함으로써 객체지향 언어의 중요 특성 중에 하나인 캡슐화와 정보은닉을 제공한다.
변수의 접근 지정자 |
||||
접근지정자 |
동일 클래스 |
하위 클래스 |
동일 패키지 |
모든 클래스 |
private |
○ |
× |
× |
× |
package |
○ |
× |
○ |
× |
protected |
○ |
○ |
○ |
× |
public |
○ |
○ |
○ |
○ |
'프로그래밍 > JAVA,JSP' 카테고리의 다른 글
JSP - JSP의 구성요소 (0) | 2009.12.03 |
---|---|
Java - 객체 지향의 개요 (0) | 2009.12.03 |
Java - 클래스 (0) | 2009.12.03 |
Java - 메소드 (0) | 2009.12.03 |
JAVA의 특징 (0) | 2009.12.03 |