“Static” 이란 키워드는 자바를 이용하여 개발을 하다 보면 참 많이 마주치는 키워드입니다.
실행할 main 구문만 확인해도 static이 붙어있기 때문입니다.
public static void main(String[] args){ ... }
그렇다면 static이 왜 붙어있는지, 도대체 무엇인지, 어떻게 쓰이는 것인지 알아보겠슴다.
static이란 무엇인가?
static은 클래스에 공유되는 변수나 메서드를 정의할 때 사용됩니다.
아래 두 가지 경우에 주로 사용되는데, 각 항목을 자세히 살펴보겠습니다.
- static 변수
- static 메서드
(1) Static 변수
static이 붙은 변수는 클래스의 모든 객체가 공유합니다.
이러한 변수는 메모리의 메서드(static) 영역에 저장되며, 프로그램 실행 시 한 번만 메모리에 할당됩니다.
이러한 이유로 값이 변하지 않는 변수에는 static을 사용하면 메모리를 효율적으로 사용할 수 있습니다.
이는 static 변수가 프로그램 실행 중 한 번만 메모리에 할당되기 때문에, 객체마다 별도로 변수를 저장하는 경우보다 메모리 사용량이 적기 때문입니다.
또한, static 변수는 클래스의 static 영역에 저장되며, 모든 객체가 동일한 메모리 주소를 참조하므로 값을 공유할 수 있습니다.
따라서 변수에 static을 붙이는 경우를 정리해보자면 크게
- 각 객체들에서 공통적으로 하나의 값이 유지되는 경우 (메모리 효율 ↑ )
- 모든 객체가 값을 공유해야하는 경우 (공유의 목적)
에 사용할 수 있습니다.
(2) Static 메서드
static 메서드는 객체 생성 없이 클래스를 통해 직접 호출할 수 있습니다.
따라서 객체의 상태를 관리할 필요가 없는 함수형 메서드에서 자주 사용됩니다.
예를 들어 int m = math.abs(input_num)이라고 하면 num을 class 객체에 관리할 필요가 없으므로 바로 쓸 수 있게 static을 이용하는 것입니다.
즉, 데이터의 상태를 관리하지 않거나 상태를 유지할 필요가 없는 경우에 static 메서드를 사용하면 객체 생성 없이 바로 사용할 수 있습니다.
그러나 static 메서드에는 인스턴스 변수를 사용할 수 없다는 제약이 있습니다.
이는 static 메서드가 클래스 로딩 시 메모리에 먼저 올라가기 때문에, 객체 생성 후에만 접근 가능한 인스턴스 변수나 인스턴스 메서드를 참조할 수 없기 때문입니다.
class Example {
int instanceVar = 10;
static void staticMethod() {
// System.out.println(instanceVar); // 오류 발생
}
}
예를 들어, staticMethod가 instanceVar를 출력하려고 하면, staticMethod는 객체 생성과 무관하게 메모리에 먼저 올라가기 때문에, 아직 생성되지 않은 객체의 instanceVar에 접근할 수 없어 오류가 발생합니다.
'Java' 카테고리의 다른 글
[Java] Spring이란? (0) | 2025.03.02 |
---|---|
[Java] 상속과 다형성 + (메소드 오버라이딩) (2) | 2024.12.06 |
[Java] 데이터 타입 - 기본형 타입, 참조형 타입 (0) | 2024.11.27 |
[Java] 클래스, 인스턴스, 레퍼런스에 대해 알아보자 (0) | 2024.11.27 |
[Java] Maven이란? (0) | 2024.11.26 |