static과 non-static의 차이

parkrootseok·2025년 4월 28일

자바

목록 보기
18/19
post-thumbnail

static과 non-static

static이란?

static클래스에 속한 멤버를 의미합니다. 객체를 생성하지 않고도 클래스 이름만으로 접근 가능하며, 클래스 로딩 시 Method 영역에 딱 한 번 저장되어 모든 인스턴스가 공유합니다.

non-static이란?

non-static인스턴스에 속한 멤버를 의미합니다. 각 객체마다 별도로 존재하므로, 객체를 생성한 후에만 접근할 수 있습니다. 메모리 상에서는 Heap 영역에 저장되며, 객체의 생명 주기를 함께합니다.

static vs non-static

static 변수와 non-static 변수의 차이를 정리하면 다음과 같습니다.

생성 시점과 메모리 위치

  • static 변수는 클래스 로딩 시 Method 영역에 생성
  • non-static 변수는 객체 생성 시 Heap 영역에 생성

생명 주기

  • static 변수는 프로그램이 종료될 때까지 생존
  • non-static 변수를 가진 객체의 소멸과 함께 제거

접근 방법과 공유 여부

  • static 변수는 객체를 생성하지 않고 클래스명으로 접근 가능하며, 모든 인스턴스가 공유
  • non-static 변수는 생성된 객체를 통해 접근 가능하며, 인스턴스마다 독립적으로 관리

main 메서드가 static인 이유?

Java 코드를 작성하다 보면 다음과 같은 메서드를 쉽게 접할 수 있습니다.

public static void main(String[] args) {
	 // 프로그램의 시작 지점
}

그렇다면, 왜 main 메서드는 반드시 static으로 선언되어야 할까요?

JVM 프로그램 실행 과정

Java 프로그램이 실행될 때, JVM은 가장 먼저 Method 영역에 로드된 클래스의 main 메서드를 호출합니다. 이때, JVM은 객체를 생성하지 않고 클래스만 알고 있는 상태입니다. 따라서, main 메서드는 객체를 생성하지 않고 호출할 수 있어야 하며, 이를 위해 static으로 선언되어야 합니다. 만약 main 메서드가 static이 아니라면, JVM이 프로그램을 시작하기 위해 먼저 객체를 생성해야 하고, 어떤 생성자를 호출해야 할지 알 수 없으며 생성 도중 오류가 발생할 수 있기 때문에 정상적으로 프로그램을 시작할 수 없습니다.

public과 void는 왜 필요할까요?

  • JVM이 어디서든 접근해야 할 수 있어야 하기 때문에 public
  • JVM에게 반환할 값이 없기 때문에 void
profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글