정적인(고정된)
객체 생성 없이 사용가능한 필드/메소드를 생성할때 활용
필드나 메소드를 객체마다 다르게 가져야한다면 인스턴스로 생성하고,
공통적으로 사용할 데이터이거나 인스턴스 필드를 포함하지 않는 메소드를 선언하고자 할때 이용한다.
사용시에는 클래스이름.필드
로 사용한다.
정적 메소드는 객체 참조 없이 사용할수있는 특징 때문에 인스턴스 필드/메소드나 this 키워드를 사용할 수 없다.
최종적인
final 키워드가 붙은 변수는 값이 한번 저장되면 최종값이 되므로 수정 불가하다.
final 필드에 선언과 동시에 초기화 할수도 있고,
생성하고, 객체를 생성할때 생성자를 이용해 초기화 하는 방법도 있다.
//오픈 시간은 객체마다 다르게 설정 가능하고, 닫는 시간은 고정된다.
public class Shop{
final int closeTime = 21;
final int openTime;
public Shop(int openTime){
this.openTime = openTime;
}
}
모든 가게의 문을 닫는 시간은 21시로 정해져있고,
오픈 시간은 자유롭게 정하되, 한번 정한 오픈 시간은 바꿀수 없다면 위와 같이 코드를 작성하면 된다.
고정된 + 최종적인
상수를 선언할때 사용
상수(constant)란 fixed로 변하지 않는 값이라는 뜻인데
final만으로는 오픈시간을 객체마다 다른 숫자로 정할수 있었으므로
final 자체만으로는 상수를 의미할 수 없다.
static final double PI = 3.141592;
불변의 값인 pi 값은 객체마다 다르게 저장될 필요 없이 공통적이고(static)
여러 값을 가질수 없으므로(final)
static final로 상수화 한것이다.
static | 객체마다 다르게 가질필요 없는 공용 필드 혹은 인스턴스 필드를 포함하지 않는 메소드 |
final | 한번 값이 정해지고 나면 값을 변경할수 없는 필드 |
static final | 모든 영역에서 고정된 값으로 사용하는 상수 |