Java의 static



1. static이란 무엇인가?

  • Java에서 static 키워드는 클래스의 정적 멤버를 정의할 때 사용됩니다.
  • 정적 멤버는 객체를 생성하지 않고도 클래스 자체를 통해 접근할 수 있으며,
  • 이는 클래스가 로드되면 메모리에 할당되어 객체가 없어도 사용이 가능합니다.

1) static의 특징

(1) 클래스를 통해 접근

  • static으로 선언된 필드와 메서드는 객체를 생성하지 않고도 클래스 이름과 함께 .(dot) 연산자를 사용하여 접근할 수 있습니다.

(2) 클래스 로딩 시 메모리에 할당

  • static 멤버는 클래스가 메모리에 로딩될 때 한 번 초기화되며, 프로그램 종료 시까지 유지됩니다.

(3) 객체 간 공유

  • static 필드는 모든 객체가 공유하는 필드로, 하나의 클래스에서 생성된 모든 인스턴스가 동일한 값을 참조합니다.

(4) 인스턴스 멤버와의 차이

  • static 메서드는 클래스 차원에서 실행되므로 인스턴스 필드인스턴스 메서드를 사용할 수 없습니다. 또한, static 메서드 내부에서는 this 키워드를 사용할 수 없습니다.


2) static의 활용 예시

package _05_class._static;

public class Calculator {
    // static field
    static double pi = 3.141592;  // 모든 객체가 공유하는 상수 값 (PI)

    // static method
    static int plus(int x, int y) {
        return x + y;  // 더하기 연산을 수행하는 정적 메서드
    }

    static int minus(int x, int y) {
        return x - y;  // 빼기 연산을 수행하는 정적 메서드
    }
}
  • Calculator 클래스에서 정적 필드정적 메서드를 정의한 예입니다.
  • pi 값은 모든 계산기가 동일하게 사용하는 상수 값이므로 static 필드로 선언되어 모든 인스턴스가 공유합니다. - plusminus 메서드는 주어진 값으로 계산만 하므로 객체의 상태와 무관하게 처리되며, 정적 메서드로 선언되어 객체 생성 없이 사용할 수 있습니다.
package _05_class._static;

public class CalculatorEx {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 5;

        // 정적 필드와 메서드 사용 (클래스 이름으로 접근)
        double circleArea = 10 * 10 * Calculator.pi;
        int plusResult = Calculator.plus(num1, num2);
        int minusResult = Calculator.minus(num1, num2);

        System.out.println("원의 면적: " + circleArea);  // 출력: 원의 면적: 314.1592
        System.out.println("더하기 결과: " + plusResult);  // 출력: 더하기 결과: 15
        System.out.println("빼기 결과: " + minusResult);  // 출력: 빼기 결과: 5
    }
}

(1) 유틸리티 클래스

  • Math 클래스처럼 자주 사용되는 메서드들을 모아놓은 유틸리티 클래스에서는 객체를 생성할 필요 없이 정적 메서드로 제공하는 것이 효율적입니다.

(2) 상수 값 정의

  • 자주 사용되는 상수값(예: 원주율 PI)은 모든 인스턴스에서 동일하게 참조할 수 있도록 static으로 정의합니다.