[JAVA] equals 재정의하기 (hascode 포함)

Posted by 김성철

JAVA - equals 재정의 하기

사용 이유

JAVA에서 개발을 하다보면 객체끼리 비교해야 할 경우가 있음  
아래의 코드를 직접 실행해보면 둘다 거짓이 출력됨  
=================================================================================================================  
	MemberVO a = new MemberVO();  
	MemberVO b = new MemberVO();  
  
	if(a==b){  
		"참1";  
	}else{  
		"거짓1";  
	}  
  
	if(a.equals(b)){  
		"참2";  
	}else{  
		"거짓2";  
	}  
=================================================================================================================  
  
equals 는 주소값이 같은지를 비교한다.  
실제로 안에 있는 값이 같은지를 비교하기위해서는 equals 를 재정의 해야함  

재정의 한 코드

MemberVO를 Builder 패턴으로 만들어서 equals 메소드와 hashcode 메소드를 재정의했음  
equals 메소드를 재정의 할때는 hashcode 도 꼭 같이 재정의 해주자  
=================================================================================================================  
package com.sungchul.equals;  
  
import java.util.Objects;  
  
public class MemberVO {  
	private String username;  
	private String email;  
	private String password;  
  
	private MemberVO(Builder builder) {  
		this.username = builder.username;  
		this.email = builder.email;  
		this.password = builder.password;  
	}  
  
	public String getUsername() {  
		return username;  
	}  
  
	public String getEmail() {  
		return email;  
	}  
  
	public String getPassword() {  
		return password;  
	}  
  
	public static class Builder {  
		private String username;  
		private String email;  
		private String password;  
  
		public Builder setUsername(String username) {  
			this.username = username;  
			return this;  
		}  
  
		public Builder setEmail(String email) {  
			this.email = email;  
			return this;  
		}  
  
		public Builder setPassword(String password) {  
			this.password = password;  
			return this;  
		}  
  
		public MemberVO build() {  
			return new MemberVO(this);  
		}  
	}  
  
	@Override  
	public boolean equals(Object o) {  
		if (this == o) return true;  
		if (o == null || getClass() != o.getClass()) return false;  
		MemberVO memberVO = (MemberVO) o;  
		return Objects.equals(username, memberVO.username) &&  
				Objects.equals(email, memberVO.email) &&  
				Objects.equals(password, memberVO.password);  
	}  
  
	@Override  
	public int hashCode() {  
		return Objects.hash(username, email, password);  
	}  
}  
  
=================================================================================================================