객체의 toString()을 구현하는 방법 - apache commons의 ReflectionToStringBuilder vs guava의 Objects
general java 2016. 4. 13. 23:41자바에서 객체의 toString()을 구현하는 여러 방법이 있다.
1. 그냥 java를 이용하기
class Member {
public int id;
public String name;
@Override
public String toString() {
return "[Member]:" + id + "," + name;
}
}
Member member = new Member();
member.id = 1;
member.name = "samuel";
System.out.println(member);
결과
[Member]:1,samuel
2. apache commons의 ReflectionToStringBuilder를 사용할 수 있다.
hashcode와 full-qualified-classname도 동시에 보여주기 때문에 좀 길어진다는 단점이 있다.
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
...
class Member {
public int id;
public String name;
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
Member member = new Member();
member.id = 1;
member.name = "samuel";
System.out.println(member);
결과
full-qualified-클래스이름$Member@6fadae5d[id=1,name=samuel]
3. apache commons의 ToStringBuilder와 TStringStyle을 사용할 수 있다.
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
..
class Member {
public int id;
public String name;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}
Member member = new Member();
member.id = 1;
member.name = "samuel";
System.out.println(member);
4. guava의 Objects 클래스의 toStringHelper()를 사용할 수 있다.
apache commons보다 깔끔히 사용할 수 있다. 가장 깔끔하기 때문에, 쓰는 것을 추천한다.
import com.google.common.base.Objects;
..
class Member {
public int id;
public String name;
@Override
public String toString() {
return Objects.toStringHelper(this)
.addValue(this.id)
.addValue(this.name)
.toString();
}
}
Member member = new Member();
member.id = 1;
member.name = "samuel";
System.out.println(member);
결과
Member{1, samuel}
참고로 Objects 클래스에는 hashcode로 예쁘게 만들 수 있다.
class Member {
public int id;
public String name;
@Override
public int hashCode() {
return Objects.hashCode(this.id, this.name);
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.addValue(this.id)
.addValue(this.name)
.toString();
}
}
Member member = new Member();
member.id = 1;
member.name = "samuel";
System.out.println(member);
System.out.println(member.hashCode());
결과
Member{1, samuel}
-909669507
참고로.
Objects 클래스의 중요 메소드는 Objects에서 MoreObjects로 바꿔써야 한다. Objects의 중요 메소드는 2016년 6월부터 모두 deprecated된다.
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Objects.html
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/MoreObjects.html
'general java' 카테고리의 다른 글
[jenkins] 인증이 필요한 jenkin job의 모니터링하기 (0) | 2016.04.18 |
---|---|
[guava] Iterables.concat (0) | 2016.04.14 |
[guava]값 보장 테스트 함수 - Guava의 Preconditions.checkArgument (0) | 2016.04.12 |
[freemarker]boolean 변수 대응하기 (0) | 2016.03.25 |
[Guava] Iterables.limit() (0) | 2016.03.24 |