List의 메서드 중 contains()가 있는데 이는 특정 요소가 List 안에 존재하는지 확인하는 메서드이다.
하지만 List의 제네릭을 클래스 객체로 지정하여 저장할 시 contains()를 제대로 활용할 수 없었다.
내부 구조로는 List 안에 들어있는 객체의 equals() 메서드에 정의한다고 한다.
Java SE API 얘기로는 hashCode()로 비교를 한다고 한다.
그러기 때문에 List<클래스>의 contains()는 class객체를 이용해 비교해야 한다(내가 이해한 바로는)
직접 돌려보며 내가 이해한 것은 Object(최상위)의 equals() 메서드를 활용하는 것 이다.
public class Domain{
private String value;
private String a;
private String b;
// 1. 비교할 객체를 담을 생성자를 만든다.
public Domain(String value){
this.value = value;
}
// 2. Object의 equals를 오버라이드 한다.
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
// 3. 2번의 equlas 메서드를 튜닝한다.
@Override
public boolean equals(Object obj) {
Domain domain = (Domain) obj;
if(domain.value.equals(this.value)) {
return true;
}
return false;
}
}
public class Service{
public void abc() {
List<Domain> list = DAO.selectValue(); // DAO에서 반환이 List<Domain> (DB에서 값을 가져옴)
String str = "비교";
String str1 = "비교1";
list.contains(new Domain(str)); // true
list.contains(new Domain(str1)); // false
}
}
// List 안에는 [Domain = {a:1,b:1,value:비교}] 같이 Domain 객체로 들어있다.