[TIL] 230316
✏️ Check Box
📌 정리
아이템9. try-finally 보다는 try-with-resources를 사용하라
Java 라이브러리에서 close()
메서드를 호출하여 직접 닫아줘야하는 자원들이 꽤 있다. 만약 자원을 해제해주지 않는다면 성능에 영향을 줄 수 있다. 보통 자원을 닫기 위한 방법으로 try-finally
문을 사용하는데, 예외추적과 가독성면에서 상당히 비효율적이라는 것이다.
따라서 close()
메서드 하나만 정의한 AutoCloseable
인터페이스을 구현하여 try-with-resources
문을 사용한다면 일일히 finally문을 통해 자원을 닫을 필요가 없다.
try(BufferedReader br = new bufferedReader(~)){
}
try문의 조건에 포함시키기만 하여도 자동으로 close()
메서드를 통해 자원을 닫아준다고 한다.
코딩테스트 문제를 풀 때의 IO, 파일 입출력이 필요할 떄의 IO를 사용하곤 했는데 수동으로 닫아줄 필요없이 try-with-resources문을 이용하면 되겠다. (InputStream, OutputStream 처럼 이미 AutoCloseable 인터페이스를 구현한 클래스들이 있다.)
아이템10. equals는 일반 규약을 지켜 재정의하라
equals()
메서드의 재정의가 필요하다면 반사성, 대칭성, 추이성, 일관성, null-아님을 반드시 만족시켜야한다. 책에서는 위의 규칙에 대한 코드 설명이 자세히 나와있다. 결국 eqauls 메서드의 구현 순서는 다음과 같다.
- == 연산자를 사용해 입력이 자기 자신의 참조인지 확인
- instance of 연산자로 입력이 올바른 타입인지 확인
- 입력을 올바른 타입으로 형변환(캐스팅)
- 입력 객체와 자기 자신의 대응되는 ‘핵심’필드가 모두 일치하는지 확인
또한, equals를 재정의할 땐 반드시 hashCode
도 재정의 해야하며, 반드시 override
하여 사용하라는 것이다.
PS의 구현문제를 풀 때, 그리고 JPA를 하면서 두 객체간의 동일함을 새 기준으로 확립하고 싶었는데 헤맸던 기억이 새록새록 떠오른다. 책에서는 Google의 AutoValue 라이브러리를 소개하지만 지금 사용하고있는 Lombok이나 IDE 자체에서도 지원하기에 참고하고, 수정하여 활용해야겠다.
Back to [TIL] 230316