개발 지식/Java

[Java] static, final, static final의 차이

서하빈 2023. 6. 18. 17:11

1. static

- 객체 생성 없이 필드와 메서드를 사용하고자 할 때

- 공용 데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메서드 선언 시

- 정적 메서드는 객체 생성 없이 바로 사용할 수 있는 특징 때문에 인스턴스 필드나 메서드, 그리고 this 키워드를 사용할 수 없다.

 

2. final

- 수정이 불가능하다는 의미

- final 필드에 값을 저장하는 방법에는 두 가지가 있다.

public class Shop {
    final int closeTime = 21;
    final int openTime;
    
    public Shop(int openTime) {
    	this.openTime = openTime;
    }
}

- 선언과 동시에 할당하는 법과 생성자를 통해 주입하는 방법이 있다.

- 생성자를 통해 주입하는 방법은 각 객체마다 필드에 다른 값을 할당할 수 있다.

- 클래스에 사용 시 해당 클래스는 상속이 불가능하다. (더이상 확장할 수 없음 == 수정이 불가능하다는 의미)

 

3. static final

- 모든 영역에서 고정된 값으로 사용하는 상수를 사용하고자 할 때

- "고정된 + 최종적인"의 의미로, 상수를 선언하고자 할 때 사용된다.

- final 자체만으로 각 객체마다 값이 다를 수 있기 때문에 상수를 의미할 수 없다.