728x90
반응형
Java에서 static과 final 키워드는 중요한 역할을 합니다. static은 클래스 레벨의 멤버를 정의할 때 사용되며, final은 변경할 수 없는(상수) 값이나 상속 및 오버라이딩을 제한하는 데 사용됩니다. 각각의 개념과 활용법을 살펴보겠습니다.
1. static 키워드 활용법
✅ static이란?
- static 키워드는 클래스 레벨에서 공유되는 변수나 메서드를 선언할 때 사용됩니다.
- 객체(instance) 생성 없이 클래스 이름을 통해 직접 접근할 수 있습니다.
- 메모리에 한 번만 로드되므로 메모리 사용이 효율적입니다.
✅ static 변수 (클래스 변수)
- 클래스에 속하며 모든 객체가 공유합니다.
- 객체마다 별도의 값을 가지는 인스턴스 변수와 달리, 모든 객체가 동일한 값을 참조합니다.
예제:
class Counter {
static int count = 0; // static 변수
Counter() {
count++;
}
}
public class Main {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
System.out.println("총 객체 수: " + Counter.count);
}
}
출력 결과:
총 객체 수: 3
🔹 Counter.count는 모든 객체에서 공유되므로 객체가 생성될 때마다 증가합니다.
✅ static 메서드 (클래스 메서드)
- 객체를 생성하지 않고 클래스 이름으로 직접 호출할 수 있습니다.
- 인스턴스 변수나 메서드에 접근할 수 없습니다.
예제:
class MathUtils {
static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
int sum = MathUtils.add(5, 10); // 객체 생성 없이 호출 가능
System.out.println("합계: " + sum);
}
}
출력 결과:
합계: 15
🔹 static 메서드는 객체를 생성하지 않고도 사용할 수 있어 유틸리티성 메서드(예: Math.sqrt())를 정의할 때 많이 활용됩니다.
✅ static 블록 (정적 초기화 블록)
- 클래스가 로드될 때 한 번만 실행되는 코드 블록입니다.
- static 변수를 초기화하는 데 유용합니다.
예제:
class Example {
static int value;
static {
value = 10;
System.out.println("Static 블록 실행됨. 초기 값: " + value);
}
}
public class Main {
public static void main(String[] args) {
System.out.println("value: " + Example.value);
}
}
출력 결과:
Static 블록 실행됨. 초기 값: 10
value: 10
🔹 static 블록은 클래스가 로드될 때 단 한 번 실행됩니다.
2. final 키워드 활용법
✅ final이란?
- final 키워드는 변경할 수 없는 값이나 기능을 제한할 때 사용됩니다.
- final 키워드는 변수, 메서드, 클래스에 적용될 수 있습니다.
✅ final 변수 (상수)
- final 키워드가 붙은 변수는 한 번만 값을 할당할 수 있습니다.
- 일반적으로 상수 값을 정의할 때 사용됩니다.
예제:
class Constants {
static final double PI = 3.141592;
}
public class Main {
public static void main(String[] args) {
System.out.println("원주율: " + Constants.PI);
}
}
출력 결과:
원주율: 3.141592
🔹 final 변수는 한 번 값이 설정되면 변경할 수 없습니다.
✅ final 메서드 (오버라이딩 방지)
- final 메서드는 하위 클래스에서 오버라이딩할 수 없습니다.
- 중요한 동작이 변경되지 않도록 보호할 때 사용됩니다.
예제:
class Parent {
final void display() {
System.out.println("부모 클래스 메서드");
}
}
class Child extends Parent {
// 오버라이딩 불가능 (컴파일 오류 발생)
// void display() {
// System.out.println("자식 클래스 메서드");
// }
}
🔹 final 메서드는 하위 클래스에서 변경할 수 없습니다.
✅ final 클래스 (상속 방지)
- final 클래스는 상속할 수 없습니다.
- 보안 및 데이터 보호를 위해 변경할 수 없는 클래스를 만들 때 사용됩니다.
예제:
final class Vehicle {
void run() {
System.out.println("차량이 움직입니다.");
}
}
// 컴파일 오류 발생: 상속 불가능
// class Car extends Vehicle {}
🔹 final 클래스는 다른 클래스에서 확장(상속)할 수 없습니다.
3. static과 final을 함께 사용하는 경우
- static final을 함께 사용하면 클래스 레벨의 변경 불가능한 상수가 됩니다.
- 이러한 값은 일반적으로 대문자로 선언합니다.
예제:
class Config {
static final int MAX_USERS = 100;
static final String APP_NAME = "MyApplication";
}
public class Main {
public static void main(String[] args) {
System.out.println("최대 사용자 수: " + Config.MAX_USERS);
System.out.println("앱 이름: " + Config.APP_NAME);
}
}
출력 결과:
최대 사용자 수: 100
앱 이름: MyApplication
🔹 static final 변수는 프로그램이 실행되는 동안 변경할 수 없는 고정된 값입니다.
결론
- static 키워드는 클래스 레벨에서 공유되는 변수와 메서드를 정의할 때 사용되며, 객체 생성 없이 호출할 수 있습니다.
- final 키워드는 값을 변경할 수 없도록 제한하거나, 상속 및 오버라이딩을 방지하는 역할을 합니다.
- static final을 함께 사용하면 클래스 레벨에서 변경할 수 없는 상수를 정의할 수 있습니다.
적절한 상황에서 static과 final을 활용하여 효율적이고 안정적인 Java 프로그램을 작성해 보세요! 🚀
728x90
반응형
'IT > JAVA' 카테고리의 다른 글
| Java의 배열(Array)과 리스트(List) 차이점 (0) | 2025.02.27 |
|---|---|
| Java에서 예외 처리하는 방법 (try-catch, throw, finally) (0) | 2025.02.26 |
| Java에서 인터페이스와 추상 클래스 비교(Interface, Abstract Class) (1) | 2025.02.24 |
| Java클래스와 객체의 차이 및 생성자 사용법(Class, Object, Constructor) (1) | 2025.02.23 |
| Java객체지향 프로그래밍 개념 (캡슐화, 상속, 다형성) (2) | 2025.02.22 |