가변 리스트
- ArrayList, LinkedList와 같은 클래스를 사용하여 가변 리스트를 선언할 수 있다.
List<String> mutableList = new ArrayList<>();
mutableList.add("Item 1");
mutableList.add("Item 2");
가변 리스트 특징
- 가변성(Mutable): 리스트의 내용을 변경할 수 있다.
- 항목을 추가하거나 삭제할 수 있다.
- 동적 크기 조정: 리스트의 크기가 필요에 따라 자동으로 확장된다.
가변 리스트 장단점
- 장점
- 유연성: 리스트의 내용을 쉽게 수정할 수 있기 때문에 데이터의 변화가 잦은 경우 유용하다.
- 성능: 데이터를 자주 수정하는 경우 성능이 더 뛰어난 경우가 많다.
- 단점
- 데이터 안전성 부족: 가변 리스트는 여러 스레드에서 동시에 접근할 때 데이터 무결성 문제가 발생할 수 있다.
- 예측 불가능한 상태: 리스트의 상태가 변할 수 있기 때문에 프로그램의 흐름을 예측하기 어려울 수 있다.
가변 리스트 사용 예
- 쇼핑 카트
- 사용자 입력 처리 (동적 폼)
- 게임 점수판
- 파일 처리 (파일 목록 관리)
List<String> shoppingCart = new ArrayList<>();
shoppingCart.add("Laptop");
shoppingCart.add("Smartphone");
shoppingCart.remove("Laptop");
불변 리스트 (Immutable List)
- List.of(), Collections.unmodifiableList() 등을 사용하여 불변 리스트를 선언한다.
List<String> immutableList = List.of("Item 1", "Item 2");
불변 리스트 특징
- 불변성(Immutable): 리스트의 내용을 변경할 수 없다. 데이터를 추가하거나 삭제하는 것이 불가능하다.
- 읽기 전용: 리스트의 상태가 고정되어 있어서 읽기만 가능하다.
불변 리스트 장단점
- 성능 저하: 데이터를 수정할 수 없기 때문에 필요한 경우 새로운 리스트를 생성해야 하므로 성능이 떨어질 수 있다.
- 유연성 부족: 리스트에 항목을 추가하거나 삭제해야 하는 경우 불편하다.
불변 리스트 사용 예
- 환경 설정 값
- 상수 목록
- API 응답 처리
List<String> configValues = List.of("config1", "config2", "config3");
// configValues.add("config4"); // 예외 발생, 불변 리스트라 추가할 수 없음
요약
특징 | 가변 리스트 (Mutable List) | 불변 리스트 (Immutable List) |
수정 가능 여부 | 수정 가능 (추가, 삭제, 변경 가능) | 수정 불가능 (읽기 전용) |
성능 | 성능이 좋음 (변경이 자주 발생하는 경우) | 성능 저하 (매번 새로운 리스트 생성 필요) |
스레드 안전성 | 스레드 안전하지 않음 | 스레드 안전함 |
사용 용도 | 데이터가 자주 변하는 경우 | 데이터 변경이 없는 경우 |
'Java > 문법' 카테고리의 다른 글
생성자 vs 정적 팩토리 메서드 vs 빌더 패턴 (0) | 2025.05.09 |
---|---|
빌더 패턴 (Builder Pattern) (0) | 2025.05.09 |
Map - compute(), computeIfAbsent(), computeIfPresent() (0) | 2025.04.29 |
가변 인자 (...) (0) | 2025.04.29 |
String.split() 문자열 자르기, 나누기 (0) | 2025.04.22 |