[JAVA] Static은 언제 사용할까?

2025. 10. 24. 16:44·Teck Stack/Java

Static

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

 

static 키워드는 변수와 메소드에 선언할 수 있습니다.

 

정적 변수 사용 예시

public class Cat {
    private static final String SOUND = "meow";

    public void sound() {
        System.out.println(SOUND);
    }
}

 

정적 메소드 사용 예시

public class Cat {
    public static void sound() {
        System.out.println("meow");
    }
}

//사용
Cat.sound();

정적 메소드는 객체를 생성하지 않고 클래스명.메소드로 호출할 수 있습니다.

 

 

 

Static의 특징


 

1. 인스턴스 생성 없이 사용할 수 있다.

정적 변수와 정적 메소드는 인스턴스가 생성되기 이전에 이미 할당이 되어 있습니다.

 

따라서 객체 생성(new)없이 바로 사용할 수 있습니다. 또한 정적 메소드는 객체 상태(필드)와 무관하게 동작합니다.

 

이는 객체의 변수를 사용하지 않는 기능에 적합하다는 것을 의미합니다.

 

반대로 인스턴스를 생성하고 그 값을 반환하는 함수(non-static method)는 어떨까요?

public class Cat {
    private int age;
    private int name;

    public Cat(int age, int name) {
        this.age = age;
        this.name = name;
    }
    public int getAge() {
        return age;
    }
}

 

age라는 필드 값이 초기화가 되어야 사용할 수 있기 때문에 정적 메소드로 사용할 수 없습니다.

 

 

Math 클래스는 정적 메소드를 사용하는 좋은 예시입니다.

 

Math는 내부에 인스턴스 변수를 갖고 있지 않고, 오직 static 메소드만 선언되어 있습니다.

 

3과 5라는 숫자의 최댓값이 필요하다면 Math 객체를 생성하지 않고,

필요한 인자를 전달하여 결과를 반환하도록 사용할 수 있습니다.

Math.max(3,5)

 

 

2. 메모리 고정 할당

정적 메소드와 정적 변수는 메모리의 메소드 영역에 생성되어 객체가 생성되기 이전에 할당이 되어 있습니다. 

 

따라서 객체가 100개가 생성되어도 메모리에는 단 하나만 존재하며 모든 객체가 이를 공유할 수 있습니다.

 

이로 인해, 여러 객체가 공통 데이터를 사용할 때 추가적인 메모리를 사용하지 않아도 되는 장점이 있습니다.

 

 

 

3. GC(가비지 컬렉션)의 대상이 아니다.

프로그램이 시작되면 정적 메소드와 정적 변수는 메모리의 메소드 영역에 생성됩니다.

 

따라서 인스턴스를 생성하지 않고도 정적 메소드를 사용할 수 있습니다.

 

new 연산으로 생성된 객체는 메모리의 Heap 영역에 존재하게 되고, 객체가 더 이상 사용되지 않는다면 GC에 의해 해당 객체가 자동으로 관리됩니다.

 

정적 메소드와 정적 변수는 GC의 대상이 아니기 때문에,

이를 과도하게 사용하면 프로그램의 종료 전까지 메모리에 할당된 채로 존재하므로 시스템의 성능에 악영향을 미칠 수 있습니다.

 

4. static 메소드에서는 static 변수만 사용한다.

static 메소드는 프로그램 실행과 동시에 메모리에 올라갑니다.

 

하지만 인스턴스 변수는 객체가 생성되어야 메모리에 할당됩니다.

 

따라서, static 메소드에서 인스턴스 변수를 사용하게 되면 할당되지 않은 메모리 영역에 접근하게 되어 문제가 발생합니다.

 

그러므로 static 메소드에서는 static 변수 또는 static 메소드만 호출할 수 있습니다.

 

만약 정적 메소드에서 인스턴스 변수를 사용하려고 하는 경우 컴파일 오류가 발생합니다.

 

결론


그래서 static은 언제 적용해야 할까?

 

static 변수는 여러 인스턴스에서 공유하는 변수를 처리할 때 사용할 수 있습니다.

 

static 메서드는 인스턴스를 생성하지 않고도 호출이 가능해야 하는 메서드에 사용합니다.


즉, 인스턴스 생성에 의존하지 않으며, 인스턴스 변수를 사용하지 않는 경우에 적용합니다.

 

예를 들어, Math와 같은 유틸 클래스는 인스턴스 변수가 필요 없기 때문에 메소드를 static으로 선언하고 사용합니다.

 

이러한 유틸 클래스는 메소드 오버라이딩을 방지하기 위해 클래스를 final로 선언하고, 인스턴스 생성을 막기 위해 기본 생성자를 private으로 선언하여 사용할 수 있습니다.

 

 

참고


[JAVA] Static? 그거 왜 붙이는건데?

[Java] 정적 메소드(static Method)는 언제 사용할까?
[Java] static변수와 static 메소드

 

반응형

'Teck Stack > Java' 카테고리의 다른 글

[Java] 동시성 제어 1탄 - Lock  (1) 2025.12.27
[Java] 일급 컬렉션(First Class Collection)이란?  (0) 2025.10.25
[Java] Error와 Exception  (0) 2025.10.08
[Java] JVM의 구조  (0) 2025.09.27
'Teck Stack/Java' 카테고리의 다른 글
  • [Java] 동시성 제어 1탄 - Lock
  • [Java] 일급 컬렉션(First Class Collection)이란?
  • [Java] Error와 Exception
  • [Java] JVM의 구조
taetae99
taetae99
우직하게 개발하기
    반응형
  • taetae99
    코드 대장간
    taetae99
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Teck Stack
        • Java
        • Spring
        • DB
        • Redis
        • SpringSecurity
        • Docker
        • HTML
        • AWS
      • 우아한테크코스
      • CS & Architecture
        • DDD
        • CS
        • 디자인 패턴
      • 트러블 슈팅
      • 알고리즘
        • 프로그래머스
        • 백준
      • 프로젝트
        • Board 프로젝트
      • 기타
      • 대회 및 후기
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
taetae99
[JAVA] Static은 언제 사용할까?
상단으로

티스토리툴바