[Java] 정적(static)이란?

may_yun·2023년 4월 11일
0

JAVA

목록 보기
3/12

Static(클래스 변수) 이란?

프로세스가 메모리에 로드되는 순간 정적변수 영역(데이터 영역)에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수이다.

static을 이해하기 위해서는 메모리 static 영역의 이해가 필요하다.

  • static 영역에 생성되며 static 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점이 있다
  • 개발자가 만든 Class는 Static 영역에 생성
  • 인스턴스의 생성과 상관 없이 사용할 수 있는 변수
  • 여러 인스턴스가 공유해서 사용할 수 있는 변수 (같은 곳의 메모리 주소만을 바라보기 때문에)
  • static 영역에 할당된 메모리는 모든 객체가 공유하지만 Garbage Collector의 관리 영역 밖이다.
    따라서 static을 자주 사용하는 경우 프로그램의 종료시까지 메모리가 할당된 채로 존재하므로 시스템 성능에 영향을 줄 수 있다.

특징

  1. 객체를 생성하지(new) 않고 static 자원에 접근이 가능하다
  2. 알반적으로 상수의 값을 갖는 경우가 많다
    Ex) public static final [변수]

예를 들어 클래스를 생성하는 경우 100명의 Person 객체를 생성한다면
Mveloper를 같은 값을 갖는 메모리가 100개 중복 생성되는 것이다.

public class Person {
    private String name = "Mveloper";

    public void printName() {
        System.out.println(this.name);
    }
}
  1. static메서드에서는 인스턴스 변수를 사용할 수 없습니다.
    정적 변수이므로 객체에서는 호출이 불가하다 따라서 static 변수에 접근하기 위한 메소드는 반드시 static 메소드가 되어야 한다

  2. Static 변수는 클래스 변수이다.

사용

Static 변수

상수만 모아서 사용하며 상수의 변수명은 대문자와 _ 를 조합하여 네이밍을 만듭니다
또한 상속을 방지하기 위해 class에 final을 붙여줍니다

public final class AppConstants{

    public static final String APP_NAME = "MyApp";
    public static final String PREF_NAME = "MyPref";        

}

Static 메서드

정적 팩토리 메서드 패턴을 사용할 때 많이 사용한다

  • static method에서 사용하는 변수가 모두 정적 변수여야 한다

Static Method는 객체의 생성 없이 호출이 가능하지만 지양하고 있다
이유는 Static Method를 사용하기 위해서는 참조하는 변수도 모두 Static 메모리에 올라간 변수여야 한다.
이럴 때 많은 변수가 static으로 할당되는데

  • static 변수는 변하지 않는 값을 지정한다.
  • 너무 많은 static 변수는 메모리 누수의 원인이다.
  • 할당되지 않은 메모리 영역에 접근을 하므로 문제 발생과 같은 이유로 사용하지 않음
    단 Util과 관련된 함수들을 모아두고 사용한다.

참고

profile
개발 일지

0개의 댓글