객체를 하나의 값으로 표현하기 위한 클래스
Set 객체의 요소에 저장하기 위한 객체를 생성하기 위한 클래스
VO 클래스는 객체의 모든 필드값을 변경하지 못하도록 final 제한자를 사용하여 작성 - 데이타 불변
final 제한자로 작성된 필드는 매개변수가 작성된 생성자로 반드시 초기화 처리
final 제한자로 작성된 필드는 Setter 메소드로 필드값을 변경할 수 없으므로 Getter 메소드만 작성
객체를 하나의 값으로 비교하기 위해 Object 클래스의 equals() 메소드와 hashCode() 메소드를 반드시 오버라이딩 선언
객체에 저장된 필드값을 검증하여 사용하기 위해 선언한 클래스
VO 클래스 대신 Record 자료형으로 선언하여 사용 가능
java.lang.Object에서 equals(), hashCode()를 오버라이딩 해야됨
equals() 메소드
hashCode() 메소드
public class UserVO {
private final String id;
private final String name;
private final String email;
public UserVO(String id, String name, String email) {
super();
this.id = id;
this.name = name;
this.email = email;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
//필드값을 문자열로 변환하여 반환하는 메소드
// => Object 클래스의 toString() 메소드를 오버라이딩 선언
// => 해주지 않으면 주소값으로 반환함
@Override
public String toString() {
return "{"+id+", "+name+", "+email+"}";
}
// equals, hashCode 메소드를 사용하지 않으면 중복제거 안됨
//메소드를 호출한 객체(this)와 매개변수로 전달받은 객체의 필드값을 비교한 결과값을 반환하는 메소드
// => 객체의 필드값이 다른 경우 [false]를 반환하고 같은 경우 [true]를 반환하는 메소드
@Override
public boolean equals(Object obj) {
//매개변수로 전달받은 객체를 명시적 객체 형변환하여 자식클래스의 참조변수에 저장
UserVO userVO=(UserVO)obj;
//Objects 클래스 : 객체를 비교하거나 [null]을 검사하기 위한 기능을 제공하는 클래스
//Objects.equals(Object value1, Object value2) : 매개변수로 전달받은 객체(값)을 비교하여
//결과값을 논리값으로 반환하는 정적메소드 - NullPointerException 발생 방지
return Objects.equals(this.id, userVO.id);//사용자정보의 아이디를 비교한 결과값 반환
}
//객체의 필드값을 해싱기법을 사용해 정수값으로 변환하여 반환하는 메소드
@Override
public int hashCode() {
//Objects.hashCode(Object o) : 매개변수로 전달받은 객체의 필드값을 해싱기법으로 변환된
//정수값으로 반환하는 메소드 - 메소드를 호출한 객체의 메모리 주소(HashCode) 반환
return Objects.hashCode(id);
}
}
import java.util.HashSet;
import java.util.Set;
public class UserVOApp {
public static void main(String[] args) {
Set<UserVO> set=new HashSet<UserVO>();
set.add(new UserVO("abc123", "홍길동", "abc@itwill.xyz"));
set.add(new UserVO("opq456", "임꺽정", "opq@itwill.xyz"));
set.add(new UserVO("xyz789", "전우치", "xyz@itwill.xyz"));
// 자동으로 toString() 메소드 호출해줌
System.out.println("set = "+set);
System.out.println("==============================================================");
//아이디가 중복된 UserVO 객체는 Set 객체의 요소값으로 저장 불가능
set.add(new UserVO("abc123", "홍길동", "abc@itwill.xyz"));
System.out.println("set = "+set);
System.out.println("==============================================================");
}
}