Java/문법

가변 리스트 vs 불변 리스트

가지코딩 2025. 4. 29. 17:07

가변 리스트

  • 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)
수정 가능 여부 수정 가능 (추가, 삭제, 변경 가능) 수정 불가능 (읽기 전용)
성능 성능이 좋음 (변경이 자주 발생하는 경우) 성능 저하 (매번 새로운 리스트 생성 필요)
스레드 안전성 스레드 안전하지 않음 스레드 안전함
사용 용도 데이터가 자주 변하는 경우 데이터 변경이 없는 경우