[CS - 자바] final

Future·2023년 10월 5일
0

CS - 자바

목록 보기
2/6

불변성

자바에서 클래스나 변수에 final을 붙이면 불변의 상태로 만들 수 있다.

final 변수

final String name = "홍길동";

위와 같이 final 변수를 초기화 한 후,

name = "홍박사";

이렇게 재정의할 수 없다.
...
그렇다면 final을 붙인 변수를 상수라고 부를 수 있을까?
아니다. final을 붙인 변수는 처음 초기화 되고 변하지 않을 뿐, 객체마다 다른 값을 갖기 때문에 상수라 부르지 않는다.
++ static final은 클래스에 오직 하나 존재하는 값이기 때문에 상수이다.

final 변수 초기화

  • 선언과 동시에 초기화
  • 생성자 매개변수로 주입해서 초기화

final 클래스

final class A{}

위와 같이 클래스에 final을 붙이면 다른 클래스가 해당 클래스를 상속할 수 없다.

final 메소드

final int func(){}

위와 같이 메소드에 final을 붙이면 해당 클래스의 자식클래스에서 함수를 오버라이딩할 수 없다.

왜 쓰나요?

  1. 여러 사람이 함께 대규모 프로젝트를 진행한다고 생각해보자. A 개발자는 num이라는 변수를 선언하여 해당 변수를 값을 변경하지 않고자 했다. 하지만, B 개발자는 이 사실을 모른다.
    이때, A개발자가 final을 사용함으로써 모두가 해당 변수는 불변성을 띄게됨을 알게된다. 따라서 디버깅이 쉬워지고 예상치 못한 오류 발생 가능성을 최소화할 수 있다.
  2. 불변 객체가 됨으로써 Thread-safe하다.
    멀티스레드 환경에서 공유 자원에 대해 여러 스레드가 동시 접근할 때, 동시성 문제가 발생할 수 있는데, final을 사용하면 재정의가 불가능하므로 동시성 문제를 예방할 수 있다.

참고
1. https://velog.io/@minnseong/java-final-immutable-object
2. https://kephilab.tistory.com/51

profile
Record What I Learned

0개의 댓글