[Effective Java] 아이템12 - toString을 항상 재정의하라

[아이템10] equals 메서드는 되도록 재정의하지 말라고 그러더니, toString은 항상 재정의하라고 한다 ㅎㅎ

실무에서 로그로 객체의 toString()을 써서 확인하고자 할 때, 우리가 원하는 클래스의 필드값들을 나열한 String이 아니라 PhoneNumber@abbd 처럼 단순히 클래스이름@16진수로 표시한 해시코드를 반환하는 경우를 본적이 있을 것이다.

잘 구현한 객체는, 사용자가 보기에도 편해야 하니 toString은 항상 재정의 하는 습관을 가지자

포맷을 가지는 toString

만약 그저 필드-값 으로 나열된 String이 아니라 특정 포맷으로 toString을 재정의했다면, 그 String 으로 다시 객체로 돌릴 수 있는 정적 팩터리나 생성자를 함께 제공해주면 좋다.

BigDecimal a = new BigDecimal(1);
String str_bigDecimal = a.toString();
BigDecimal bigDeicmal_again = new BigDecimal(str_bigDecimal); // 도로 돌릴 수 있다.

롬복은??

롬복은 @ToString도 지원한다.

기본적으로 @ToString 어노테이션이 붙었다면 모든 필드를 string에 포함해서 주지만 @ToString.Exclude로 제외할 필드를 선언할 수 있다.

또는 @ToString(onlyExplicitlyIncluded = true) 로 설정하고 명시적으로 포함할 필드만 @ToString.Include를 추가할 수 있다.

롬복이 이렇게 어노테이션으로 이 기능을 구현한 것처럼, Table 어노테이션도 비슷하게 더 편리하게 구현할 수 있지 않을까?

댓글남기기