Volunteer 라는 클래스를 정의하고
지원자들을 모아 비교하고 확인하는 로직 또한 필요하기 때문에
컬렉션으로 묶는 VolunteerSet 또한 정의했다.
일단 컬렉션으로 묶은 필드를 포함하는 클래스를 정의할 때,
즉 래핑한 해당 컬렉션의 장점은 컬렉션에서 정의한 공개 메서드들을 통제할 수 있다.
그리고 래핑한 클래스의 이름을 가독성 좋게 짓는다면 그 또한 장점이라 할 수 있다.
내부 캡슐화도 된다.
이때 컬렉션에서 주로 사용되는 메서드들이 객체 내부적으로 사용하는 메서드가 있다.
바로 equals 와 hashCode 메서드다.
이 메서드를 재정의 해야 래퍼클래스에서 사용하는 동작들을 커스텀 할 수 있다.
현 프로젝트를 예시로 든다면
Volunteer 클래스의 equals 와 hashCode 는
해당 클래스의 필드값인 Member 객체의 equals 와 hashCode 를 따른다
물론 부가적인 필드값이 Volunteer 의 정의 ( 이 정의는 내가 결정한다 ) 를 결정할 수 있다면
함께 포함시키는것이 맞지만, 현재로썬 Member 객체의 동등성 여부로만 판단하고 싶기 때문이다.
물론 Member 의 equals 와 hashCode 도 재정의해야 한다.
"hashCode 를 재정의하지 않으면 논리적 동치인 두 객체가 서로 다른 해시코드를 반환한다. HashMap 은 해시코드가 다른 엔트리끼리는 동치성 비교를 시도조차 하지 않도록 최적화되어 있기 때문에 재정의 되지 않은 hashCode 를 갖는 객체는 같은 객체라 판단하더라도 리턴값이 달라질 수 있다."
끝
'롱런 프로젝트' 카테고리의 다른 글
시나리오 쓰고 있네 SCENE #2 (0) | 2020.09.22 |
---|---|
빌더 패턴에 생성자 파라미터를 강제하거나 강제하지 않을 때 (0) | 2020.09.17 |
인터페이스와 추상 클래스를 함께 쓴다면 (0) | 2020.09.11 |
시나리오 쓰고 있네 SCENE #1 (0) | 2020.09.10 |
롱런 프로젝트 (1) | 2020.09.09 |