본문 바로가기

자바(java)

스태틱(클래스)변수와 인스턴스변수

변수의 분류

 - 선언되는 위치에 따른 변수의 분류

    - 멤버변수

    - 매개변수

    - 지역변수

 - 저장되는 위치에 따른 변수 분류

    - 인스턴스 변수

    - 스태틱(클래스) 변수

 

일반적으로 우리가 만든  Class는 Static 영역에 생성 되고,  new 연산을 통해 생성한 객체는 Heap영역에 생성 됩니다. 객체의 생성시에 할당된  Heap영역의 메모리는 Garbage Collector를 통해 수시로 관리 를 받습니다. 하지만  Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리 라는 장점을 지니지만,  Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재 하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 됩니다.

1. 인스턴스 변수, 메서드

 - 클래스를 이용하여 객체를 생성하면. 그 때마다 인스턴스 변수가 생성됨.

 - 객체를 생성해야만 호출 가능

  ex) 어떤 클래스 안에 int a라는 멤버변수가 있다.
           -> 이 클래스를 이용해서 객체(인스턴스)를 100개 만들었다
              -> 멤버변수 a는 몇 개 생성되는가?   100개

 - 표기 => 객체명.변수명

                 객체명.메서드명

 

2. 스태틱(클래스) 변수, 멤서드

 - 프로젝트의 특정 클래스의 변수에 static키워드가 붙으면 곧 바로 메모리에 로딩이 되는 변수

 - 객체를 생성하지 않아도 호출 가능

 - static키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다.

 - 각각의 스태틱변수는 클래스당 1개씩만 생성됨.

 - 표기 => 클래스명.변수명(객체명.변수명 도 가능하나 권장하지 않음)

                 클래스명.메서드

 

ex)

public class Test1 {

 

public int a = 10;

public static int b = 20;

 

// 인스턴스 메서드

public void me1() {

     System.out.println(a);

     System.out.println(Test1.b);

}

 

// 클래스(스태틱) 메서드

public static void me2() {

     // 클래스 변수는 그대로 사용 가능

     System.out.println(Test1.b);

 

// 인스턴스 변수는 객체를 만든 후 사용 가능

Test1 t = new Test1();

     System.out.println(t.a);

     }

}

 

 

'자바(java)' 카테고리의 다른 글

인터페이스(Interface)  (0) 2023.03.09
Final(변수, 메서드, 클래스)  (0) 2023.03.09
상속 (Inheritance)  (0) 2023.03.09
String 클래스  (0) 2023.03.07
배열 (Array)  (0) 2023.03.06