자료구조

+) static, final, static final 구분

나는나는용 2023. 2. 21. 00:49
728x90

static

정적(필드, 메서드).

메서드 영역에 저장된다(메서드 영역=클래스 영역=스태틱 영역)
객체 생성하지 않아도 사용할 수 있음.
공용주방이라 생각하자.
static(공용주방)에 있는 필드(라면)는 어느 클래스(객실)에서도 사용 가능.


final

고정불변의 값.
객체 생성해야만 사용 가능.

final + 필드 final + 메서드 final + 클래스
최초 default값.
한번 정의된 값은 변경 불가.
생성자를 통한 초기화 필!수!
오버라이딩(재정의) 금지 상속 불가("나만 쓸거야!")

 


static final

static이 붙지 않고 final만 붙은 필드는 생성자를 통해 무조건적인 초기화가 필요.

객체 생성시 초기화를 해줄 때마다 사용자 마음대로 다른 초기화를 해줄 수 있으므로 상당히 유동적이다.

유동적인게 왜 문제냐?

어디에서도 수정할 수 없는 고유의 값인, 예로들어 '국적'같은 것들을 마음대로 바꿔버리면, 한 사람이 어느 클래스에서는 한국인, 어느 클래스에서는 미국인이 될 수도 있는 상황!

 ~ 그 ~ 래 ~ 서~

이러한 유동성을 제거하여
"어디에서도 수정할 수 없도록", "고정 불변의 값을 어디에서도 사용 가능"하도록 하기 위해 static final을 사용.

TIP
static final 변수 명은 대문자로만 할 것을 권장.
ex) static final int EXCHANGED_RATE = 5;

728x90