private
의미: 해당 필드나 메서드가 선언된 클래스 내부에서만 접근 가능하다.
- 클래스에 미치는 영향
- 클래스의 캡슐화를 강화 한다 → 클래스의 내부 구현을 외부로 부터 숨긴다. → 데이터 무결성 및 메서드 사용방식을 보호한다.
static
의미: 해당 필드나 메서드가 인스턴스마다 별도로 존재하는 것이 아니라, 클래스에 속해 클래스 모든 인스턴스가 공유하는 하나의 요소임을 나타낸다.
- 클래스에 미치는 영향
- 스프링의 싱글톤 개념과 비슷하게 메모리 사용이 효율적이다.
- 클래스 인스턴스를 생하지 않고도 이 필드나 메서드에 접근할 수 있다.
public class Utility {
public static final int CONSTANT = 100;
public static void printMessage() {
System.out.println("Hello, this is a static method.");
}
}
public class Main {
public static void main(String[] args) {
// Utility 클래스의 인스턴스를 생성하지 않고도 접근 가능
System.out.println(Utility.CONSTANT); // 100 출력
Utility.printMessage(); // "Hello, this is a static method." 출력
}
}
final
의미: 해당 필드의 값이 초기화 후 변경될 수 없음을 나타낸다. → 메서드에 사용될 경우 오버라이드(재정의)할 수 없음을 , 클래스에서 사될 경우 그 클래스를 상속할 수 없음을 의미한다.
- 클래스에 미치는 영향
- 상수로 사용될 수 있다.
- 하위 클래스에서 변경하지 않도록하여, 보안과 불변성을 제공한다. → 예측 가능한 동작을 유지하는데 도움이 될 수 있다.
final
은 메서드나 클래스에 적용될 경우, 그 메서드를 오버라이드하거나 클래스를 상속받을 수 없게 된다.