Java/Core

빌더(builder)를 이용하여 toString, hashCode, equals를 구현

EnterKey 2016. 8. 31. 10:48
반응형


 

빌더(builder)를 이용하여 toString, hashCode, equals를 구현 하자.

  • Commons Lang 라이브러리에는 통칭해 빌더(builder)라고 알려진 유용한 클래스들이 포함되어 있다. 빌더(builder) 라이브러리를 이용하여 toString, hashCode, equals를 쉽게 구현하는 방법을 알아보자

equals 구현하기

Effective Java의 equals 메서드 구현

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);
    }
}

참고자료

문서정보


반응형