Java/Core
빌더(builder)를 이용하여 toString, hashCode, equals를 구현
EnterKey
2016. 8. 31. 10:48
반응형
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=6260166&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
빌더(builder)를 이용하여 toString, hashCode, equals를 구현 하자.
- Commons Lang 라이브러리에는 통칭해 빌더(builder)라고 알려진 유용한 클래스들이 포함되어 있다. 빌더(builder) 라이브러리를 이용하여 toString, hashCode, equals를 쉽게 구현하는 방법을 알아보자
equals 구현하기
Effective Java의 equals 메서드 구현
- 아래의 Effective Java 강좌를 보면 equals를 제대로 구현하는 방법이 쉽지 않다는 것을 알 수 있다.
- 자바 유창하게 말하기 Effective Java - 3장. 모든 객체의 공통 메소드 구현하기
EqualsBuilder의 리플렉션 API 사용하기
- Apache Commons Lang의 EqualsBuilder를 사용하면 equals를 쉽게 구현 할 수 있다.
- EqualsBuilder를 이용한 방법은 리플렉션을 과하게 사용하면 equals 메서드의 실행 성능에 영향을 줄 수 있다. 하지만 새로운 프로퍼티가 추가됐을 때 equals 메서드를 갱신할 필요가 없다는 장점은 있다
public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); }
hashCode 구현하기
HashCodeBuilder의 리플렉션 API 사용하기
public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); }
toString 구현하기
ToStringBuilder의 리플렉션 API 사용하기
// 디폴트 public String toString() { return ToStringBuilder.reflectionToString(this); } //simple style public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE); } // multi line style public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); }
BaseObject.java
- 아래 자바지기님 예제처럼 사용을 많이 합니다.
import java.io.Serializable; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; /** * 주석을 넣어 주세요. 배가 고파요. * * @author 박재성(자바지기 - javajigi@gmail.com) */ public class BaseObject implements Serializable { public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } public boolean equals(Object o) { return EqualsBuilder.reflectionEquals(this, o); } public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } }
참고자료
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=6260166&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
반응형