static 변수와 static 메소드
static 으로 선언한 변수와 메소드는 클래스에서 생성된 모든 인스턴스가 공유하는 자원입니다.
그리고 인스턴스를 만들지 않고도 클래스에서 직접 호출하여 사용할 수 있습니다.
static 이 없는 변수와 메소드는 클래스에서 바로 접근할 수 없습니다.
그러므로, static 이 없는 변수와 메소드는 인스턴스를 생성해야만 접근할 수 있게 됩니다.
간단한 실습을 통해 알아보겠습니다.
1. StaticTest 클래스를 하나 생성합니다.
2. 자바 소스 코드를 다음과 같이 작성합니다.
소스코드에서 알 수 있듯이 클래스 Sample1 을 이용해서 직접 사용할 수 있는 변수는 classVar 이고,
메소드는 classMethod( ) 입니다.
static 변수 classVar 과 static 메소드 classMethod( ) 는 클래스 Sample1 소속으로 다음처럼 직접 사용이 가능합니다.
Sample1.classVar; // Sample1 클래스의 소속인 static 변수 classVar
Sample1.classMethod( ); // Sample1 클래스의 소속인 static 메소드 classMethod( )
instanceVar 과 instanceMethod( ) 는 static 이 없으므로 클래스에서 직접 접근이 불가능합니다.
그러므로, instanceVar 과 instanceMethod( ) 는 반드시 인스턴스를 만들어서 사용해야 합니다.
Sample1 f1 = new Sample1( ); // Sample1 클래스 형태를 갖는 f1 인스턴스 생성
Sample1 f2 = new Sample1( ); // Sample1 클래스 형태를 갖는 f2 인스턴스 생성
f1.instanceVar; // f1 인스턴스에서 개별적으로 존재하는 지역변수 instanceVar
f1.instanceMethod( ); // f1 인스턴스에서 개별적으로 존재하는 메소드 instanceMethod( )
f2.instanceVar; // f2 인스턴스에서 개별적으로 존재하는 지역변수 instanceVar
f2.instanceMethod( ); // f2 인스턴스에서 개별적으로 존재하는 메소드 instanceMethod( )
그러므로 f1 과 f2 는 인스턴스이므로 각각 자신의 저장 장소에 고유의 값을 저장하므로 서로 영향을 미치지 않습니다.
3. 실행 버튼으로 실행시키면 다음과 같은 결과가 나타납니다.
static 으로 선언한 변수와 메소드는 해당 클래스로 생성된 모든 인스턴스가 공유하는 자원이기 때문에
모든 인스턴스는 같은 static 변수와 메소드를 사용할 수 있습니다.
반면 static 이 없는 변수와 메소드는 인스턴스마다 각자 자신의 저장 장소에 고유의 값을 가지기 때문에
하나의 인스턴스에서 변경 작업을 수행해도 다른 인스턴스에는 아무런 영향도 미치지 않습니다.
'자바' 카테고리의 다른 글
생성자와 this (0) | 2021.11.08 |
---|---|
자바 접근 제어자 (public, protected, private, default) (0) | 2021.11.08 |
클래스와 인스턴스 (0) | 2021.11.06 |
자바 인스턴스 (0) | 2021.11.06 |
자바 클래스의 형식 (0) | 2021.11.05 |
댓글