Java

[Java] static - 2

parangofsky 2026. 1. 18. 23:34

Java에서 static의 의미와 장점 정리

이번 포스트에서는 지난 포스트에 이어서 Java에서 static이 무엇이고, 왜 사용하는지를 다시 한 번 정리해보겠습니다.

 

1. static의 기본 개념

 

Java에서 static은 객체(instance)가 아닌 클래스(class)에 소속된다는 의미.

 

즉,

  • 일반 변수 / 메서드 → 객체마다 각각 존재
  • static 변수 / 메서드 → 클래스당 하나만 존재

라는 차이가 있다.

 

2. static의 메모리 구조

static 변수와 메서드는 JVM 메모리 구조 중 Method Area(메서드 영역) 라는 공용 메모리 공간에 저장된다.

이 특징으로 인해 다음과 같은 성질을 가진다.

  • 클래스가 로딩되는 시점에 생성
  • 프로그램 종료 시까지 유지
  • 모든 인스턴스가 동일한 static 멤버를 공유
 

 

3. static을 사용하는 이유 (이점)

1. 메모리 효율성

  • 인스턴스마다 값을 가질 필요가 없는 데이터는 static으로 관리
  • 불필요한 메모리 중복 제거

2. 공통 상태 관리

  • 모든 객체가 공유해야 하는 값 (상수, 설정 값 등)에 적합
 

3.  객체 생성 없이 사용 가능

  • 유틸리티 메서드에 적합
 

 

4. 왜 static 메서드에서는 인스턴스 변수를 사용할 수 없을까?

 

Q. 왜 static 메서드에서는 인스턴스 변수를 사용할 수 없나요?

A. 

생성 시점이 다르기 때문입니다.
static 멤버는 클래스 로딩 시점에 이미 메모리에 올라가 있지만,
인스턴스 변수는 객체가 생성된 이후에야 존재합니다.
따라서 static 메서드에서는 아직 존재하지 않는 인스턴스 변수의 메모리 주소를 참조할 수 없습니다.

 

조금 더 쉽게 말하면,

  • static → “객체가 없어도 이미 존재”
  • 인스턴스 변수 → “객체가 있어야만 존재”
 

'Java' 카테고리의 다른 글

[Java] Synchronized에 대해 - 2  (0) 2026.01.26
[Java] Synchronized에 대해  (0) 2026.01.23
[Java] static class와 static method  (0) 2026.01.16
[Java] 리플렉션(Reflection)  (0) 2026.01.13
[Java] 인터페이스와 추상클래스  (0) 2026.01.10