contains()

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 객체로 들어있다.