다른 개발자들과 협업하기 위해서는 '예측 가능한 코드를 작성해야 한다.'
우리는 다른 개발자가 작성한 코드를 사용하여 개발하고, 다른 개발자들은 다시 우리가 작성한 코드에 기반해서 자신의 코드를 작성한다. 이 과정에서 예상치 못한 Side Effect가 발생하게 된다.
ImmutableList를 사용하면 Side Effect를 줄일 수 있다.
ImmutableList는 함수를 호출하는 쪽에서 명확하게 알 수 있도록 할 수 있기 때문이다.
Immutable의 사전적 의미로 불변의, 변경할 수 없는 이라는 뜻을 가지고 있다. 즉 추가, 삭제, 변경이 불가능한 List를 말하며 Collection이 생성된 후 변경되는 것을 방지할 때 사용할 수 있다.
ImmutableList를 변경하려고 할 경우 UnsupportedOperationException이 발생한다.
// 리스트 생성
List<String> originalList = new ArrayList<>();
originalList.add("Red");
originalList.add("Green");
originalList.add("Blue");
// 불변 리스트로 변환
List<String> unmodifiableList = Collections.unmodifiableList(originalList);
System.out.println("Original List: " + originalList);
System.out.println("Unmodifiable List: " + unmodifiableList);
// 원본 리스트를 변경하면 unmodifiableList에 영향이감
originalList.add("Yellow");
System.out.println("Original List: " + originalList);
System.out.println("Unmodifiable List: " + unmodifiableList);
// unmodifiableList 수정
// UnsupportedOperationException 발생
try {
unmodifiableList.add("Purple");
} catch (UnsupportedOperationException e) {
System.out.println("Cannot modify ImmutableList: " + e);
}
Original List: [Red, Green, Blue]
Unmodifiable List: [Red, Green, Blue]
Original List: [Red, Green, Blue, Yellow]
Unmodifiable List: [Red, Green, Blue, Yellow]
Cannot modify ImmutableList: java.lang.UnsupportedOperationException
List<String> originalList = new ArrayList<>();
originalList.add("Red");
originalList.add("Green");
originalList.add("Blue");
System.out.println("originalList: " + originalList);
// of() 메서드 사용
ImmutableList<String> unmodifiableList1 = ImmutableList.of("Red", "Green", "Blue");
System.out.println("unmodifiableList1: " + unmodifiableList1);
// copyOf() 메서드 사용
ImmutableList<String> unmodifiableList2 = ImmutableList.copyOf(originalList);
System.out.println("unmodifiableList2: " + unmodifiableList2);
// 빌더 패턴 사용
ImmutableList<String> unmodifiableList3 = ImmutableList.<String>builder()
.add("Red")
.add("Green")
.add("Blue")
.build();
System.out.println("unmodifiableList3: " + unmodifiableList3);
// reverse() 메서드 사용
ImmutableList<String> reversedUnmodifiableList4 = unmodifiableList3.reverse();
System.out.println("reversedUnmodifiableList4: " + reversedUnmodifiableList4);
// 수정 시도
try {
unmodifiableList2.add("Yellow");
} catch (UnsupportedOperationException e) {
System.out.println("Cannot modify ImmutableList: " + e);
}
originalList: [Red, Green, Blue]
unmodifiableList1: [Red, Green, Blue]
unmodifiableList2: [Red, Green, Blue]
unmodifiableList3: [Red, Green, Blue]
reversedUnmodifiableList4: [Blue, Green, Red]
Cannot modify ImmutableList: java.lang.UnsupportedOperationException
Jackson - ObjectMapper 사용법 (readValue, writeValue, JsonNode, ObjectNode) (42) | 2024.12.26 |
---|---|
Jackson - ObjectMapper Custom 설정 (0) | 2024.12.24 |
SpringBoot CSV Read / Write (opencsv) (8) | 2024.09.12 |
REST API Response Format에 대한 고찰 (ResponseEntity, JSend, ResponseBodyAdvice) (0) | 2024.09.09 |
Optional 사용에 대한 고찰 (사용목적, 메서드, 주의사항) (0) | 2024.09.06 |
댓글 영역