[SeSACx코딩온] Java의 static
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
필드로 선언되어 모든 인스턴스가 공유합니다. -plus
와minus
메서드는 주어진 값으로 계산만 하므로 객체의 상태와 무관하게 처리되며, 정적 메서드로 선언되어 객체 생성 없이 사용할 수 있습니다.
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으로 정의합니다.