새벽까지

먼저 equals를 오버라이드 할때는 pk값만 오버라이드 하게 되는데,

먼저 가정을 하나 들겠습니다.

num이라는 pk가 있다고 생각하면 오버라이드는 이런 형태를 갖고 있습니다.

일반적인 Object equals 오버라이드 형태

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        return Objects.equals(num, other.num);
    }

여기서 코드 한 줄을 추가합니다.

Q1 - NullPointException

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (!num.equals(other.getNum) return false; // 이 부분
        return true;
    }

여기서 큰 문제가 나타납니다.

예를들어 num 객체가 null 값이 들어온다면?

null에는 equals객체가 없기 때문에 NullPointException이 들어옵니다.

Solution

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Book other = (Book) obj;
        if (isbn == null) {
            if (other.isbn != null)
                return false;
        } else if (!isbn.equals(other.getIsbn()))
            return false;
        return true;
    }

위와같은 num값이 null이 들어왔을 때 return false코드를 추가해주어야합니다.

profile

새벽까지

@GoS

좋아요❤️ 구독👍🏻 감사합니다!