equals와 hashCode 사용하기 ( +lombok)
한 두 달 전에 이 글을 읽고 아 이렇게 객체를 이용해서도 분류할 수 있구나 정도만 생각하고 넘어갔다.
그러다가 ICT 인턴십 을 진행하면서 아래 예시 같이 있는 excel data를 파싱 해서
id | field | LocalDataTime | DisplayName | 필드가많아요~ | field DisplayName |
1 | "중복이야!" | "2020-10-20" | "보이는 값 중복!" | 기타 등등 | 1 |
2 | "중복이야!" | "2020-11-20" | "보이는 값 중복!" | 코딩잘하고싶다. | 1 |
3 | "field" | "2020-11-21 | "test" | 등등 | null |
...생략 | ...생략 | ...생략 | ...생략 | ...생략 | ...생략 |
위 와 같이 field와 DisplayName 이 같은 객체끼리 한 그룹으로 묶어서
field DisplayName 칼럼을 생성하면서 index를 붙여주는 간단한? 업무였다.
data 그릇
@Getter @Setter
public class Domain {
private Long id;
private String field;
private LocalDateTime localDateTime;
private String DisPlayName;
....생략
public Domain(Long id, String name, String local, LocalDateTime localDateTime ...) {
this.id = id;
this.name = name;
this.Local = local;
this.localDateTime = localDateTime;
..... 생략
}
}
처음에는 그냥 poi 라이브러리를 파싱 해서 객체 하나 만들어서 하나하나 비교할까?라는 생각이 먼저 들었다.
근데 row 하나당 객체가 하나씩 만들어지는데..? 하나하나 만들어서 domain 객체를 List에 담아서 꺼내면서 비교해..?
row가 많아 지면 엄청 느려지겠다. 비교했던 객체는 다음 차례가 왔을 때 넘어가야 되는데..? 생각보다 복잡하네..
생각이 들었을때 갑자기 이동욱 님 이 쓰신 글이 생각이 나서 hashcode equals , hashCode을 한번 사용해보자!
이런 식으로 Same이라는 객체를 만들고 (Same 용도는 오로지 비교하기 위한 객체)
@EqualsAndHashCode ( of= {"애네들이 같으면 같은 객체로 봄"})
@EqualsAndHashCode ( exclude= {"애네들 제외하고 같으면 같은 객체로 봄"})
위에 처럼 나는 구분된 도메인 리스트만 필요하기 때문에 key값은 버리고 구분된 List <Domain> 들만 List로 한번 더 감싸서 return 시켰다. 소스코드 설명은 이동욱 님 블로그에 자세히 되어있다.
위 로직에서 생성된 completeDomain 리스트만 다시 excel 쓰는 클래스에만 전달해주면 끝!
excel 파싱 하는 로직은 다른 블로그에 예시가 많으니 pass!
사실 블로그 글 보면서 언젠가는 도움이 되겠지 라는 마음뿐인데 실무에서 써봐서 기분이 좋다.
'Java' 카테고리의 다른 글
[Java] Proxy 패턴이란? (Dynamic Proxy) (0) | 2020.12.10 |
---|---|
[Java]XOR 이용하기 (0) | 2020.11.29 |
[Java]reflection 을 이용한 간단한 DI 프레임워크 만들기 (1) | 2020.08.17 |
[Java]SingleTonClass 연습 (0) | 2020.05.27 |
[Java]비정방형 배열 (0) | 2020.05.12 |