흰 스타렉스에서 내가 내리지

프록시 동등성 비교 - equals() 와 hashCode() 오버라이딩 본문

Spring

프록시 동등성 비교 - equals() 와 hashCode() 오버라이딩

주씨. 2024. 4. 28. 02:06
728x90
@Entity @Getter
public class Member{
    @Id
    private String id;
    private String name;
    
    @Override
    public boolean equals(Object obj){
        if (this == obj) return true;
        if (!(obj instanceof Member)) return false;		//-- 1
        
        Member member = (Member) obj;
        
        if (name != null ? !name.equals(member.getName()) 
                  : member.getName() != null)           //-- 2
            return false;
         
         return true;   
     }
     
     @Override
     public int hashCode(){
         return name != null ? name.hashCode() : 0;
     }
 }

 

 

-- 1

instanceof 가 아닌 == 로 동일성 비교를 해버리면, 결과가 다르다.

if (this.getClass() != obj.getClass()) return false;

프록시는 원본을 상속받은 자식 타입이므로 프록시의 타입을 비교할 때는 == 비교가 아닌 instanceof 를 사용해야 한다.

 

 

-- 2

member.name != null 

 

프록시는 실제 데이터를 가지고 있지 않다.

따라서 프록시의 멤버변수에 직접 접근하면 아무 값도 조회할 수 없다.

프록시의 데이터를 조회할 때는 접근자(Getter) 를 사용해야 한다.