먼저 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코드를 추가해주어야합니다.
'개발일지-TIL > JAVA' 카테고리의 다른 글
자바 Object[] 클래스 형변환 ClassCastException 오류 (0) | 2023.07.26 |
---|