[java Anti Pattern Series] 23.prematureresourcerelease
February 6, 2025
Premature Resource Release
- 메모리 누수 방지, 성능 향상을 위해서 리소스를 적절히 관리하는게 중요하다.
- 적절한 타이밍에 리소스 반환을 하면 좋지만 너무 이르게 하면 문제가 될 수 있다.
조기 해제란?
- 의도한 용도가 완료되기 전에 리소스를 닫거나 릴리즈하는 행위
- 로직의 오류, 잘못된 설계
결과
1. 리소스 유출
- 리소스를 제대로 닫거나 해제하지 않으면 메모리에 잔존해서 메모리 누수가 될 수 있다.
- 처음엔 괜찮지만 쌓여서 결국 애플리케이션 크래시가 된다.
2. 리소스 고갈
- 조기 종료되면 다른 부분에서 해당 리소스에 액세스할 수 없게 되어 경합 및 교착이 된다.
3. 데이터 손상
- 조기 해제하면 데이터가 손상될 수 있다.
4. 일관되지 않은 상태
- 예측할 수 없는 동작이 발생할 수 있다.
해결책
1. try-with-resource
2. finally 사용
3. 열기·닫기 원칙 따르기
- 리소스가 더 이상 필요하지 않을 때만 공개해야 하며, 너무 일찍 공개하면 안된다.
4. resource-pool 사용
- 생성, 해제에 큰 비용이 드는 경우 풀로 두고 사용하면 유리하다.
5. RC(ReferenceCounting) 사용
- 참조 횟수를 기록하여 수가 0이 될 떄까지 가지고 있다가 해제