본문 바로가기

백엔드 CS 정리

JAVA에서 Final을 사용하는 이유

스프링 부트에 익숙한 백엔드 개발자라면 익숙한 친구 바로 final이다.

@RequiredArgsConstructor 를 이용하건 혹은 @Autowired를 통하여서 직접적으로 생성 시점에 주입을 해주던 

PokemonFinder 라는 PokemonRepository를 사용하는 클래스에스는 PokemonRepository를 private final을 

선언하여 이용한다.

 

대체 왜 이렇게 사용할까?흔하게 대답할 수 있는 final의 불변성 보장이라는 말 대신 스프링 부트에서의 관점에서 

왜 사용하고 이것의 장점과 단점이 무엇인지에 대해서 생각해보자.

 

먼저 의존성 주입의 안정성 측면에서 생각을 해본다면 final을 사용하지 않는다면 mutable하기 떄문에

의존성 주입이 항상 유지되고 신뢰할 수 있다고 말하기 어려워진다.

 

두번쨰로 private final을 사용하는 것은 프로그래머가 직접적으로 

"너 이거 무조건 생성자에서 의존성 주입 받아" 라고 경고를 하는것과 다름이 없다.

만약 협업 과정에서 private final이 되어있는 객체를 생성자가 아닌 다른 곳에서 의존성 주입을 받으려 

한다면 에러가 나고 컴파일 과정에서 이를 검증할 수 있을 것이다.

 

 

'백엔드 CS 정리' 카테고리의 다른 글

JVM 내부 동작 원리  (0) 2024.10.04
쿠키 vs 세션 vs 캐시  (1) 2024.09.24
Bcrypt를 사용하는 이유  (1) 2024.09.22