본문 바로가기
  • soobinhand의 기술 블로그
728x90

도서37

아이템 12 - toString을 항상 재정의하라. toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라"고 한다. toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다. toString 메서드는 객체를 println, printf, 문자열 연결 연산자, assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 불린다. 실전에서 toString은 그 객체가 가진 주요 정보 모두를 반환하는게 좋다. 포맷을 명시하든 아니든 여러분의 의도는 명확히 밝혀야 한다. 핵심 정리 모든 구체 클래스에서 toString을 재정의하자. 상위 클래스에서 이미 알맞게 재정의한 경우는 예외다. toString을 재정의한 클래스는 사용하기도 즐겁고 그 클래스를 사용한 시스템을 디버깅하기 쉽게 해.. 2022. 1. 27.
아이템 11 - equals를 재정의하려거든 hashCode도 재정의하라. 핵심 정리 equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 프로그램이 제대로 동작하지 않을 것이다. 재정의한 hashCode는 Object의 API 문서에 기술된 일반 규약을 따라야 하며, 서로 다른 인스턴스라면 되도록 해시코드로 서로 다르게 구현해야 한다. 이렇게 구현하기가 어렵지는 않지만 조금 따분한 일이다. 관련 코드 https://github.com/Soobinhand/effective_java/tree/master/src/Item_11 GitHub - Soobinhand/effective_java: 이펙티브 자바 이펙티브 자바. Contribute to Soobinhand/effective_java development by creating an acco.. 2022. 1. 27.
아이템 10 - equals는 일반 규약을 지켜 재정의하라. equals를 재정의하지 않는 것이 최선일 때. 각 인스턴스가 본질적으로 고유하다. 인스턴스의 '논리적 동치성'을 검사할 일이 없다. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 클래스가 private이거나 package이고 equals 메서드를 호출할 일이 없다. equals를 재정의할 때는 반드시 일반 규약을 따라야 한다. 다음은 Object 명세에 적힌 규약이다. 반사성. x=x여야한다. 대칭성. x=y라면 y=x여야 한다. 추이성. x=y이고 y=z라면 x=z여야 한다. 일관성. x=y를 반복해서 호출해도 항상 값은 같아야 한다. null-아님. x=null은 무조건 false다. 이러한 equals 규약을 어기면 그 객체를 사용하는 다른 객체들이 어떻게 반응할지 알 수.. 2022. 1. 27.
아이템 9 - try-finally 보다는 try-with-resources를 사용하라. 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. 핵심 정리 꼭 회수해야 하는 자원을 다룰 때는 try-finally 말고, try-with-resources를 사용하자. 예외는 없다. 코드는 더 짧고 분명해지고, 만들어지는 예외 정보도 훨씬 유용하다. try-finally로 작성하면 실용적이지 못할 만큼 코드가 지저분해지는 경우라도, try-with-resources로는 정확하고 쉽게 자원을 회수할 수 있다. 관련 코드 https://github.com/Soobinhand/effective_java/tree/master/src/Item_9 GitHub - Soobinhand/effective_java: 이펙티브 자바 이펙티브 자바. Contribute to Soobinh.. 2022. 1. 27.
728x90