본문 바로가기
Chapter01/Sping boot

[ Springboot ] final

by EmmaDev_v 2024. 12. 28.
반응형

취약점 진단을 받고 보완을하다가

 

mapper 필드를 final로 선언하고, 이미 생성자 주입을 통해 할당하고 있으므로 별도의 세션 간 데이터 누출 문제를 유발하지 않도록

 

private SettlementMapper settlementMapper;
private ModelMapper mapper;

 

위와 같이 선언해둔 부분을

private final SettlementMapper settlementMapper;
private final ModelMapper mapper;

 

로 변경해야한다는 진단을 받았다.

 

 

 

 

final 키워드를 붙이면

필드가 객체 생성 이후 변경되지 않는 ‘불변성’을 가지게 됨.

이로써 코드 안정성과 명확성이 증가하고, 멀티스레드 환경에서 동시성 문제를 줄일 수 있다.

 

반면 final이 없으면 필드 값을 런타임 중에 변경할 수 있어, 의도치 않은 값 변경이나 멀티스레드 환경에서의 경쟁 조건 발생 가능성이 커짐.

 

그래서 생성 시점에 값이 할당되고, 이후에 변경될 필요가 없는 경우

또는 객체가 한 번 정해진 뒤에 변경되지 않도록 하고싶으면 해당 필드를 final로 정하면 됨.

 

하지만

런타임 중에 값을 변경해야 하는 경우 final을 붙이면 안되고,  초기값을 정할 수 없는 경우도 final을 붙일 수 없음.

 

 

위 코드처럼 인스턴스 변수에 붙이는경우 말고도

변수, 메서드, 클래스 등에 붙일 수 있음~

 

 

변수에는 final 이 있으면 값을 변경할 수 없음.

메서드에 final을 붙이면 오버라이딩을 할 수 없음.

ㅋ클래스에 final을 붙이면 상속을 할 수 없음. 

반응형