본문 바로가기
Java

인스턴스 변수 / 클래스 변수(static) / 지역 변수

by KDW999 2023. 1. 4.

인스턴스 변수 [ Instance variable ]

ㅡ 클래스 영역에서 선언 ( 멤버 변수? ), 클래스의 인스턴스를 생성할 때 만들어진다.

ㅡ 인스턴스 변수를 사용하기 위해서는 먼저 인스턴스 생성 → Class  변수명 = new Class();

ㅡ 독립적인 저장 공간을 가지므로 서로 다른 값을 가질 수 있다.

ㅡ 고유 상태를 유지해야하는 속성인 경우(자신만의 상태를 유지해야 하는 경우), 인스턴스 변수로 선언

 

클래스 변수 [ Class variable ]

ㅡ 인스턴스 변수 앞에 static 붙인다.

ㅡ 인스턴스를 생성하지 않고도 항시 사용 가능 / 클래스명.클래스변수명으로 바로 접근 가능

ㅡ 모든 인스턴스가 공통된 저장 공간 공유

ㅡ 한 클래스의 모든 인스턴스들이 공통값을 유지해야하는 속성인 경우, 클래스 변수로 선언

ㅡ 클래스가 메모리에 로딩될 때 생성되고 프로그램이 종료될 때 까지 유지

 

지역 변수 [ Local variable ]

ㅡ 메소드 내에서 선언되고 메소드 내에서만 사용

ㅡ 메소드를 벗어나면 소멸되어 사용 불가

* 클래스에서 선언되는 인스턴스 변수와 클래스 변수는 상대적으로 상위 개념에서 선언되기에 전역 변수

 

class Variable{
   int a; // 인스턴스 변수
   static int b; // 클래스 변수
   
   void stop(){
      int c; // 지역 변수
        System.out.println("인스턴스 메서드입니다.");
   }
   static void move(){ 
        System.out.println("스태틱 메서드입니다");
   }
}

public class Example{
         public static void main(String[] args) {
         Variable vr = new Variable(); // 객체 선언과 생성
         vr.a = 7; // 인스턴스 변수 초기화
         vr.stop(); // 인스턴스 메서드 호출
         
         Variable.b = 5; // 클래스 변수(스태틱 변수) 초기화
         Variable.move(); // 스태틱 메서드(클래스 메서드) 호출
     }
}

위의 코드를 보면 인스턴스 변수는 사용하기 위해 Example 클래스에서 객체 생성 후 사용된 반면에, 클래스 변수는 Variable 클래스 이름으로 바로 사용한 걸 볼 수 있다.

 

static 메서드와 인스턴스 메서드의 관계

◆ staitc 메서드는 인스턴스 변수, 메서드를 호출할 수 없다. / 인스턴스 메서드는 static 변수, 메서드를 호출할 수 있다.

→  왜 static 메서드는 인스턴스 변수를 호출할 수 없나? → static 메서드는 항상 호출이 가능해야한다 / 객체 생성을 해야 사용할 수 있는 인스턴스 변수, 메서드의 생성 여부를 알 수 없다.

인스턴스 메서드 ←→ 인스턴스 메서드 : 가능

static 메서드  ←→ static 메서드 : 가능

 

staitc 메서드엔 매개 변수를 사용하거나, static 변수를 사용

댓글