자바에서 객체의 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);


apache commons의 ReflectionToStringBuilder의 결과보다 깔끔하다.


결과
Member[id=1,name=samuel]



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

Posted by '김용환'
,