EnumMap 클래스는 자바 5에서 추가된 내용이므로 새로울지 모르나 저번 강의시간에 열거셋에 대해서 이미 공부하였으므로 필자의 핵심예제를 통해 바로 습득하는 시간을 가져보겠다.^^
=== 강이의 JAVA강좌 ===
Map: {SUNDAY=S, MONDAY=M, TUESDAY=T, WEDNESDAY=W, THURSDAY=T, FRIDAY=F, SATURDAY=S}
Key: [SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]
Value: [S, M, T, W, T, F, S]
예제를 간략하게 보면 오늘 출력하는 부분은 총 3가지로 이루어져 있다. 하나는 키와 밸류를 함께 출력하는 Map이고 다른 하나는 키만 출력하는 Key이고 나머지 하나는 밸류만 출력하는 Value이다. 예제는 거부감(?)을 없애기 위해 예전에 썼던 Day 열거형을 사용하였으니 금방 예제에 동화(?)되리라 본다.ㅎㅎ
열거맵이므로 열거형을 사용하며 예제에서는 그로 Day를 만들어서 사용하였다. 열거맵을 사용하려면 열거셋과 마찬가지로 열거형이름에 확장자로 class를 명명하면 열거형에 있는 요소들을 해당맵의 key로서 사용이 가능해진다. 우리는 열거맵을 공부하고 있으므로 이 열거요소들, 즉 키에 해당하는 각각의 밸류값들을 put( ) 메소드를 통해 넣어주었다.^^
다음 단락은 그렇게 고생고생(?)해서 만든 열거맵을 찍어주는 구문이다. 이제 이런 메소드들은 해보기도 하였지만 보기만봐도 다 이해가 될것이다. 그 이유중 하나는 필자가 이미 언급하였다시피 자바 컬렉션 프레임워크의 메소드들은 기능에 의미를 부여함은 물론 여러 컬렉션 클래스들에서 그 기능이 같거나 비슷할경우 해당 메소드 이름도 같거나 비슷하게 지었기 때문에 아주 생소한 이름이 아닌이상 의미파악이 어느정도 가능하기 때문에 그러하다.^^
끝으로 한마디 덧붙이자면 자바의 열거맵(EnumMap)은 비동기화(not synchronized) 되어있고 물론 Collections.synchronizedMap( ) 메소드를 이용하면 동기화 가능하고 반복자는 fail-fast 방식이고 열거맵의 순서는 열거형의 키를 기반으로 자연적인 순서(natural order)를 따른다. 여기서 자연적인 순서라함은 enum Day에서 열거한 순서대로 나열한다는 것을 말한다. 예를 들어, enum DAY에서 열거요소의 SUNDAY와 MONDAY를 바꿔놓으면 모든 결과들은 이 둘의 순서가 뒤바뀌어서 출력될 것이다. 여러분이 put( ) 메소드를 이용해서 밸류값을 넣은 순서와 상관없이 말이다.ㅎㅎ 그냥 그렇구나하고 넘어가지 말고 직접 해보면서 알아가는 여러분이 되기 바란다. 복습 잘하기 바라면서 열거맵 강좌는 여기서 마무리하겠다.^^