[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 메서드의 구현 순서는 다음과 같다.

  1. == 연산자를 사용해 입력이 자기 자신의 참조인지 확인
  2. instance of 연산자로 입력이 올바른 타입인지 확인
  3. 입력을 올바른 타입으로 형변환(캐스팅)
  4. 입력 객체와 자기 자신의 대응되는 ‘핵심’필드가 모두 일치하는지 확인

또한, equals를 재정의할 땐 반드시 hashCode도 재정의 해야하며, 반드시 override 하여 사용하라는 것이다.

PS의 구현문제를 풀 때, 그리고 JPA를 하면서 두 객체간의 동일함을 새 기준으로 확립하고 싶었는데 헤맸던 기억이 새록새록 떠오른다. 책에서는 Google의 AutoValue 라이브러리를 소개하지만 지금 사용하고있는 Lombok이나 IDE 자체에서도 지원하기에 참고하고, 수정하여 활용해야겠다.

Back to [TIL] 230316