java의 final 키워드에 대해서 정리해볼려고 합니다.
서비스 안정성이 높아진다.
- 버그 발생 가능성이 줄어든다.
- 버그를 찾는 시검이 빨라진다.(컴파일 오류)
- 코드 품질이 높아져 변화에 좀 더 빠르게 대응할 수 있다.
final 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있습니다.
final 키워드를 붙이면 무언가를 제한한다
, 한 번만 할당 가능하다
는 의미를 가지는 것입니다.
즉, 재할당할려고 하면 컴파일 오류가 발행하여 바로 확인 가능합니다.
변수에 final을 붙여보겠습니다. 변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가집니다.
수정될 수 없기 때문에 초기화 값은 필수적입니다.
만약에 객체안의 변수라면 생성자, static 블럭을 통한 초기화까지는 하여 같이 쓰여집니다.
static final SUM_INT = 10;
변수를 final로 선언하면 초기화 전에 사용한다면 컴파일 에러가 발생합니다.
그러나, 매개변수나 지역변수를 final로 선언하는 경우, 반드시 선언할 때 초기화할 필요는 없다. 왜냐하면, 매개변수는 이미 초기화가 되어서 넘어 왔고, 지역 변수는 메서드를 선언하는 중괄호 내에서만 참조되므로 다른 곳에서 변경할 일이 없기 때문이다.(자바의 신 1권 325p)
메서드에 final을 붙이면 override를 제한
하게 됩니다.
final 키워드를 클래스에 붙이면 상속 불가능 클래스
가 됩니다.
불변객체(immutable object)
란?
생성 시점 이후 절대 값을 변경할 수 없는 객체
즉, final을 쓰면 불변객체
화 하는 겁니다.
다른 클래스에서 상속하여 재정의를 할 수 없는 것입니다.
불변객체를 사용하는 이유
- 한번 생성되면 상태를 수정할 수 없는 객체 -> 생성이 된 불변 객체는 신뢰할 수 있다.
- 스레드 동기화 문제를, 오류 방지를 사전에 할 수 있다.
- 값 타입(VO)은 불변 객체(immutable object)로 설계해야한다!
대표적인 클래스로 Integer
, String
과 같은 래퍼(Wrapper) 클래스가 있습니다. 클래스 설계시 재정의 여부를 생각해서 재정의 불가능하게 사용하고 싶다면 final로 등록하는게 추후 유지보수차원에서 좋습니다.
유념해야 할 점은 클래스에 final이 붙여있다고 해서 필드가 final이 되지 않습니다.