Collection객체가 상당히 크기 때문에, 다 공부할 엄두가 나지 않는다.
하지만 방대한 크기만큼 다양한 문제를 해결할 가능성이 있지 않나 싶다.
그래서 몇 번에 걸쳐 유용한 패턴들을 정리하고자 한다.
1. Collection의 자료구조에 다른 타입들을 넣어야 한다면 DTO객체를 만들자.
다음과 같이 작성하려면 일단 모두 다른 타입이기 때문에 List 앞에 제네릭을 추가해 줄 수 없다.
사실 아무 값도 입력하지 않아도 생성되는 이유는 <Object>가 자동으로 붙기 때문이라고 한다.
그 말은 즉슨 위의 값들은 모두 Object가 된다는 의미이다.
이는 원하지 않는 타입변경이 되는데 이는 다음과 같은 오류를 빈번히 발생시킨다.
그렇기 때문에 보통은 DTO객체를 사용한다고 한다.
DTO란 계층간 데이터 교환을 위한 Java Beans이다. 라고 하는데 잘 모르겠고, 그냥 쉽게 getter와 setter만 존재하는 값을 가진 객체라고 한다.
이를 이용하면 다음과 같이 계산이 가능하다.
좀 더 다양한 패턴을 익히기 위해 Iterator을 사용하였다.
List는 iterator을 상속받기 때문에 Iterator객체로 바꾸었고 값을 하나씩 꺼내 더한 모습이다.
2. 특별한 값들의 갯수를 하나하나 확인하기 위해서 Map을 이용하자.
이름은 String 자료형 갯수는 int 자료형이라서 1번과 유사하게 객체로 만들어 사용하여 과일의 갯수를 센다. 하지만 Map과 put, putIfAbsent를 이용하면 객체를 만들지 않고도 간단히 문제를 해결 할 수 있다.
JSON객체를 그렇게나 질리게 사용했으면서도, 정작 언어가 바뀌자 말자 생각을 못해내다니....
map의 특성은 key와 value를 가지는 자료구조형이다. 또한 key는 중복 될 수 없다.
그렇기 때문에, 어떠한 객체에도 중복없이 특정 값을 부여할 수 있게 된다.
put 메소드는 값을 입력하고
putIfAbsent는 해당 값이 없으면 그 값을 입력하고 null을 반환한다. 있다면 그 키의 값을 반환한다.
사과와 딸기 바나나는 putIfAbsent를 사용했기 때문에 단 한번만 0을 입력하고 그 이후에는 put메소드만 작동한다.
put메소드는 현재 객체에 기존의 값에 +n만큼 더한 값을 입력한다.
오렌지의 경우에는 put("오렌지",0)을 계속 실행하기 때문에 결과는 1이 출력된다.
만약 put("오렌지",0)를 생략하게 되면 put("오렌지",map.get("오렌지")+1); 에서 인덱스를 찾지 못하고 에러를 일으킨다.
사용하고 싶다면 반복문 밖에서 put("오렌지",0)를 입력해주면 된다
3. set과 map을 정렬할 때는 Stream객체를 이용하지 않고 Tree를 이용해보자.
윗부분은 stream객체로 바꾼후에 정렬했고
오른쪽은 TreeSet에 값을 집어 넣었다.
그냥 훨씬 간단하다.
'Language > Java' 카테고리의 다른 글
[Java8] Strategy Pattern, FP, 1급 객체 (0) | 2019.04.14 |
---|---|
[Java]Collection 객체 응용(2) (0) | 2019.04.14 |
[Java]Comparable, Comparator (0) | 2019.04.14 |
[Java] 자바 람다식 (0) | 2019.04.09 |
[Java]모던 자바 ? Java8 Stream을 응용한 리스트 정렬 (0) | 2019.04.09 |