[Java] final 키워드 정리

devdo·2022년 1월 28일
0

Java

목록 보기
38/59

java의 final 키워드에 대해서 정리해볼려고 합니다.

final 적용효과

서비스 안정성이 높아진다.

  • 버그 발생 가능성이 줄어든다.
  • 버그를 찾는 시검이 빨라진다.(컴파일 오류)
  • 코드 품질이 높아져 변화에 좀 더 빠르게 대응할 수 있다.

final 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있습니다.

final 키워드를 붙이면 무언가를 제한한다, 한 번만 할당 가능하다는 의미를 가지는 것입니다.

즉, 재할당할려고 하면 컴파일 오류가 발행하여 바로 확인 가능합니다.


변수(variable)

변수에 final을 붙여보겠습니다. 변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가집니다.

수정될 수 없기 때문에 초기화 값은 필수적입니다.

만약에 객체안의 변수라면 생성자, static 블럭을 통한 초기화까지는 하여 같이 쓰여집니다.

static final SUM_INT = 10;

변수를 final로 선언하면 초기화 전에 사용한다면 컴파일 에러가 발생합니다.

그러나, 매개변수나 지역변수를 final로 선언하는 경우, 반드시 선언할 때 초기화할 필요는 없다. 왜냐하면, 매개변수는 이미 초기화가 되어서 넘어 왔고, 지역 변수는 메서드를 선언하는 중괄호 내에서만 참조되므로 다른 곳에서 변경할 일이 없기 때문이다.(자바의 신 1권 325p)


메서드(method)

메서드에 final을 붙이면 override를 제한하게 됩니다.


클래스(Class)

final 키워드를 클래스에 붙이면 상속 불가능 클래스가 됩니다.

불변객체(immutable object)란?
생성 시점 이후 절대 값을 변경할 수 없는 객체

즉, final을 쓰면 불변객체화 하는 겁니다.
다른 클래스에서 상속하여 재정의를 할 수 없는 것입니다.

불변객체를 사용하는 이유

  • 한번 생성되면 상태를 수정할 수 없는 객체 -> 생성이 된 불변 객체는 신뢰할 수 있다.
  • 스레드 동기화 문제를, 오류 방지를 사전에 할 수 있다.
  • 값 타입(VO)은 불변 객체(immutable object)로 설계해야한다!

대표적인 클래스로 Integer, String과 같은 래퍼(Wrapper) 클래스가 있습니다. 클래스 설계시 재정의 여부를 생각해서 재정의 불가능하게 사용하고 싶다면 final로 등록하는게 추후 유지보수차원에서 좋습니다.

유념해야 할 점은 클래스에 final이 붙여있다고 해서 필드가 final이 되지 않습니다.



참고

profile
배운 것을 기록합니다.

0개의 댓글