
이 내용은 Backend / OOP logic in Java 영역에서 “여러 객체를 구조적으로 관리하는 방법”을 다루는 핵심 개념이다. 배열(Array)이 고정 크기·단순 구조라면, 컬렉션(Collections)은 가변 크기, 정렬, 중복 처리, 키-값 구조 등을 지원하는 자료구조 프레임워크다.
또한 Java의 List는 Python의 List와 유사해 보이지만, 구현 방식·성능 특성·타입 시스템(Generic) 측면에서 차이가 크다.
컬렉션 프레임워크는 “객체(Object)들을 모아서 관리하는 자료구조들의 집합”이다.
배열과의 핵심 차이:
List는 “순서가 있고 중복을 허용하는” 자료구조다.
List<String> strList = new ArrayList<>();
strList.add("Java");
strList.add("python");
strList.add("Java"); // 중복 허용
System.out.println(strList); // [Java, python, Java]
// 배열
String[] strArray = new String[5];
strArray[0] = "김영";
strArray[4] = "김사";
// List
List<String> strList = new ArrayList<>();
strList.add("Java");
strList.add("python");
strList.add("C++");
차이점:
// 배열 삭제
strArray[0] = null;
// List 삭제
strList.remove("python");
System.out.println(strList);
Collections.sort(strList); // 오름차순
Collections.sort(strList, Comparator.reverseOrder()); // 내림차순
boolean contains = strList.contains("Java");
System.out.println("Java 포함 여부: " + contains);
.contains()는 “부분 문자열”이 아니라 “요소 전체 일치”만 검사한다.
Set은 “중복을 허용하지 않고, 순서를 보장하지 않는” 집합 구조다.
Set<String> strSet = new HashSet<>();
strSet.add("java");
strSet.add("java");
strSet.add("python");
System.out.println(strSet); // [java, python]
실무 패턴:
List<String> list = new ArrayList<>();
list.add("SpringBoot");
list.add("java");
list.add("java");
list.add("python");
// 중복 제거
Set<String> set = new HashSet<>();
set.addAll(list);
// 다시 List로
List<String> result = new ArrayList<>();
result.addAll(set);
Collections.sort(result);
System.out.println(result);
Map은 “Key-Value 쌍(entry)” 구조다.
JavaScript의 객체(object), Python의 dict와 개념적으로 유사하다.
Map<String, String> strMap = new HashMap<>();
strMap.put("kor2026001", "김일");
strMap.put("kor2026002", "김이");
System.out.println(strMap);
같은 Key에 put하면 value는 덮어쓰기 된다.
strMap.put("kor2026001", "KimOne");
// put : 존재하면 수정, 없으면 새로 생성
// put : 존재하면 수정, 없으면 새로 생성
koreanScores.put("김오", 4.5);
// replace : 존재할 때만 수정
koreanScores.replace("김육", 789.2);
// Key / Value 존재 여부
strMap.containsKey("kor2026001");
strMap.containsValue("김삼");
Map의 모든 entry를 Set으로 변환할 수 있다.
Set<Map.Entry<String, String>> entrySet = strMap.entrySet();
Key는 중복 불가 → Set으로 변환 가능 Value는 중복 가능 → Set으로 바로 변환 불가 (Collection으로 반환)
Set<String> keySet = strMap.keySet();
Collection<String> values = strMap.values();
List로 입력 → Set으로 중복 제거 → 다시 List로 변환 후 정렬
List<String> fieldTrips = new ArrayList<>();
for (int i = 0; i < 5; i++) {
String str = scanner.next();
fieldTrips.add(str);
}
Set<String> fieldTripSet = new HashSet<>();
fieldTripSet.addAll(fieldTrips);
List<String> finalFieldTrips = new ArrayList<>();
finalFieldTrips.addAll(fieldTripSet);
Collections.sort(finalFieldTrips, Collections.reverseOrder());
for (String field : finalFieldTrips) {
System.out.println(field);
}
Map<String, Integer> bookStocks = new HashMap<>();
bookStocks.put("자바의 정석", 10);
bookStocks.put("스프링 인 액션", 5);
// 재고 수정
bookStocks.replace("자바의 정석", 15);
// 출력
for (Map.Entry<String, Integer> entry : bookStocks.entrySet()) {
System.out.println("도서명: " + entry.getKey()
+ ", 재고: " + entry.getValue());
}
1) List : 입력 순서 유지, 중복 허용 → 사용자 입력, 로그, 히스토리
2) Set : 중복 제거, 순서 없음 → 후보군, 참석자 명단, 태그 목록
3) Map : Key-Value 구조 → 계정 관리, 재고, 설정 값, DTO 매핑
Collections는 단순 자료구조가 아니라,
까지 함께 고려하는 백엔드 핵심 기초다.
이 구조는 이후 Spring Boot에서
형태로 그대로 이어진다. 즉, 컬렉션은 “문법”이 아니라 “데이터 구조 사고 방식”이다.