본문 바로가기
JAVA

[ Java ] 클래스 변수/인스턴스 변수/지역변수

by haeun 하은 2022. 5. 10.
728x90

Java 변수 종류

클래스 변수, 인스턴스 변수, 지역 변수

변수의 종류를 결정짓는 것 = '변수가 선언된 위치'

//int 형 변수로 예시
public class test { 
	
	int a; // 인스턴스 변수 (멤버변수)
	static int b; // 클래스 변수 (멤버변수)
	void method() { int c; // 지역 변수 

	} 
 }

 

a와 b는 test class 내부에 선언되어 있으므로 멤버 변수이다.

그 중 b는 static으로 선언되었으니 클래스 변수이고,  a는 인스턴스 변수이다.

c는 메서드 내에 선언 되어 있으므로 지역 변수 입니다.

변수의 종류 선언위치 생성시기(메모리 할당 시기)
클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수 클래스 영역 인스턴스가 생성될 때
지역 변수 클래스 이외의 영역(메서드,생성자,초기화 블럭) 변수 선언문이 수행 되었을 때

 

클래스 변수(Static 멤버 변수)

  • 클래스 내에 Static 키워드로 선언된 변수 (인스턴스 변수에 static을 붙여줘야한다.)
  • 처음 JVM이 실행되어 클래스가 메모리에 올라갈 때 ~ 프로그램이 종료될 때까지 유지
  • 클래스가 여러 번 생성되어도 Static 변수는 처음 딱 한 번만 생성됨
  • 동일한 클래스의 모든 객체들에 의해서 공유됨

인스턴스 변수는 각각 고유한 값을 가지지만 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 됩니다.

한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 클래스 변수로 선언합니다.

클래스가 로딩될 때 생성되어(그러므로 메모리에 딱 한번만 올라갑니다.) 종료 될 때 까지 유지되는 클래스 변수는 public 을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 됩니다.

또한 인스턴스 변수의 접근법과 다르게 인스턴스를 생성하지 않고 클래스이름.클래스변수명 을 통해서 접근할 수 있습니다.

여러 개의 객체가 생성될 때 단 하나만 생성 되며 모든 객체들이 공유하는 개념으로 사용되는 변수가 static변수이다. 

public class Hello{
        String color;
        int memory;
        static String maker;
}​

 

인스턴스 변수(Non-static 멤버)

  • 클래스 내에 선언된 변수
  • 객체 생성 시마다 매번 새로운 변수가 생성됨
  • 클래스 변수와 달리 공유되지 않음

인스턴스 변수는 인스턴스가 생성될 때 생성됩니다. 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야합니다. 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야할 때는 인스턴스 변수로 선언합니다.

객체가 생성될 때 각 객체들마다 따로 따로 생성 되어 고유의 값을 받아 각 객체의 속성으로 자리 잡는 변수가 바로 instance변수이다. 

public class Hello{
        String color;
        int memory;
}
 

 

지역 변수

 메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수입니다. 메서드가 실행될 때 메모리를 할당 받으며 메서드가 끝나면 소멸되어 사용할 수 없게 됩니다.

  • 전역변수(Global variable) : 어느 위치에서든 호출하면 사용이 가능
    (함수 밖에 선언하여 클래스 전체에서 사용이 가능한 변수)
  • 지역변수(Local variable) : 특정구역({ }) 내에서 생성되어 그 구역에서만 사용
    (함수 속에 선언되어 해당 함수 속에서만 사용이 가능한 변수)
public class Hello {
	//메소드 밖에 있는 변수는 전역변수
	//전역변수의 생명주기는 클래스 끝난다
	
	static String s = "전역변수";
	
    public static void main(String[] args) {
		System.out.println(s);
		
		String local = "지역변수";
		//메소드 안에 넣어준 변수는 지역변수
		//지역변수는 해당하는 메소드만 사용한다.
		
		System.out.println(local);
		
		method1();
	}
	public static void method1() {
		System.out.println(strr);
		//전역변수라 출력 가능
        
		//System.out.println(local);
		//지역변수이기에 출력 불가. 에러발생
	}
}

 


변수란?

- 값을 담아두는 기억 공간(메모리 공간) 

- 데이터를 저장할 수 있는 그릇과 같음 

- 하나의 데이터 값을 저장할 수 있음

- 정해진 값은 고정되어 있지 않고 계속 변할 수 있음 

- 저장되는 데이터에 따라 변수의 자료형(Data Type)이 결정됨

 

public class Hello {
      public static void main(String[] args){ 
          int num;                           //변수의 선언
          num = 3;                           //변수의 초기화
          System.out.println(num);           //출력
      } 
}​

 

728x90
반응형

댓글