반응형
취약점 진단을 받고 보완을하다가
mapper 필드를 final로 선언하고, 이미 생성자 주입을 통해 할당하고 있으므로 별도의 세션 간 데이터 누출 문제를 유발하지 않도록
private SettlementMapper settlementMapper;
private ModelMapper mapper;
위와 같이 선언해둔 부분을
private final SettlementMapper settlementMapper;
private final ModelMapper mapper;
로 변경해야한다는 진단을 받았다.
final 키워드를 붙이면
필드가 객체 생성 이후 변경되지 않는 ‘불변성’을 가지게 됨.
이로써 코드 안정성과 명확성이 증가하고, 멀티스레드 환경에서 동시성 문제를 줄일 수 있다.
반면 final이 없으면 필드 값을 런타임 중에 변경할 수 있어, 의도치 않은 값 변경이나 멀티스레드 환경에서의 경쟁 조건 발생 가능성이 커짐.
그래서 생성 시점에 값이 할당되고, 이후에 변경될 필요가 없는 경우
또는 객체가 한 번 정해진 뒤에 변경되지 않도록 하고싶으면 해당 필드를 final로 정하면 됨.
하지만
런타임 중에 값을 변경해야 하는 경우 final을 붙이면 안되고, 초기값을 정할 수 없는 경우도 final을 붙일 수 없음.
위 코드처럼 인스턴스 변수에 붙이는경우 말고도
변수, 메서드, 클래스 등에 붙일 수 있음~
변수에는 final 이 있으면 값을 변경할 수 없음.
메서드에 final을 붙이면 오버라이딩을 할 수 없음.
ㅋ클래스에 final을 붙이면 상속을 할 수 없음.
반응형
'Chapter01 > Sping boot' 카테고리의 다른 글
[ 보안 취약점 ] main() 메서드 (0) | 2025.01.10 |
---|---|
[ Spring Boot ] J2EE와의 관계 (0) | 2025.01.08 |
[ 보안 취약점 ] 부적절한 예외 처리 catch(Exception e) (0) | 2024.12.27 |
[ 보안 취약점 ] 적절하지 않은 난수 값 사용 Math.random() (1) | 2024.12.27 |
[node] 노드 버전 여러 개 사용하기 (5) | 2024.12.09 |