728x90
SMALL
프로젝트 중 상사가 리팩토링한 코드 중에서 immutableMap 을 사용한 부분이 있었다.
몇가지 지정된 객체들을 특정 메소드에 파라미터로 보내는 과정에서 해당 맵을 사용했는데
처음 보는 맵의 종류라 정리하게 되었다.
ImmutableMap 이란?
Map 의 종류이지만 이 맵은 한 번 만들어지면 그 안의 키와 값이 변경될 수 없는 특징이 있다.
즉, 이미 지정해둔 키와 값의 쌍을 수정하거나 삭제할 수 없으며, 새로운 키-값 쌍을 추가할 수도 없다.
⭐예제
/**첫번째 방법*/
ImmutableMap<String, Object> map = ImmutableMap.of("bean", _bean, "regDt", _bean.getRegDt());
/**두번째 방법*/
ImmutableMap<String, Object> map2 = ImmutableMap.<String,Object>builder()
.put("bean", _bean)
.put("regDt", _bean.getRegDt())
.build();
ImmutableMap 도 map 의 종류이기에 선언이나 사용법은 비슷하나, 위에 두가지로 가장 많이 쓰인다.
1. 첫번째 방법 : 최대 10쌍의 값을 정의할 수 있어 간단하게 정의할 경우 쓰인가.
2. 두번째 방법 : 더 많은 쌍의 값을 정의할때 더 유연하고 가독성이 좋기에 많은 쌍을 정의할 때 쓰인다.
⭐일반 Map 과의 차이점
- 수정 불가: ImmutableMap는 한 번 생성되면 수정할 수 없다. put, remove 등의 메서드 사용 불가능
- 생성 시점: ImmutableMap는 생성할 때 모든 키-값 쌍을 정의해야함.
/**맵 정의*/
ImmutableMap<String, Object> map = ImmutableMap.of("bean", _bean, "regDt", _bean.getRegDt());
/**수정 및 삭제 불가 */
// map.put("regDt", "2025-01-01"); // 컴파일 에러
// map.remove("bean"); // 컴파일 에러
⭐ImmutableMap 사용이유
- 안전성: 불변이기 때문에 데이터가 변경될 염려가 없다. 특히 여러 군데에서 같은 데이터를 참조할 때 유용하다.
- 성능: 동기화가 필요 없기 때문에, 여러 스레드가 동시에 읽을 때 성능이 향상된다.
- 예측 가능성: 데이터가 변경되지 않기 때문에 항상 같은 값을 유지한다.
⭐ 중요한 점
- 맵 자체는 변경 불가: ImmutableMap에 추가, 수정, 삭제할 수 없습니다.
- 내부 객체는 변경 가능: ImmutableMap에 저장된 객체가 가변 객체라면, 그 객체의 내부 상태는 변경될 수 있습니다.
728x90
반응형
LIST
'Self Study > Java' 카테고리의 다른 글
[JAVA] instanceof 연산자 : 인스턴스의 타입을 확인 (0) | 2024.07.01 |
---|---|
[JAVA] java.lang.NoClassDefFoundError: Could not initialize class java.awt.GraphicsEnvironment$LocalGE (1) | 2024.05.03 |