본문 바로가기
자바

static 변수와 static 메소드

by 복제비 2021. 11. 7.

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 이 없으므로 클래스에서 직접 접근이 불가능합니다.

그러므로,  instanceVarinstanceMethod( )반드시 인스턴스만들어서 사용해야 합니다.

 

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( )

 

그러므로 f1f2 인스턴스이므로 각각 자신의 저장 장소고유의 값저장하므로 서로 영향을 미치지 않습니다.

 

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

댓글