Java & Spring/컬렉션 프레임워크

List, Set, Map

승주우에요 2026. 1. 8. 21:21

1. Collection 계열과 Map 계열은 출발부터 다르다

  • List, Set -> Collection 인터페이스 계열
  • Map -> Collection이 아님!

이 차이가 사용 방식 자체를 결정한다. Iterable 하다는 말은 순회가 가능하다!!

 

2. Iterable = 순회 가능 (List, Set은 가능)

List, Set 자료는 요소를 하나씩 꺼내서 반복 처리할 수 있다. 

for (String value : list) {
    System.out.println(value);
}

Iterable 인터페이스를 구현하고 있기 때문에 List, Set은 for, each로 돌릴 수 있다.

 

3. Map은 for-each가 안됨

Map은 Iterable 하지 않다! 

  • Map은 구조 자체가 key-value
  • Collection처럼 요소 하나 개념이 아니다
  • 원칙적으로 순회가 불가능하다

하지만 Map을 도는 것처럼 보이지만 이는 Map을 직접 도는 것이 아닌 Set으로 바꿔서 도는것이다. 예를 들면 keySet(), entrySet() 등등

 

4. List 자료 정리

순서 O, 중복 O, index 접근이 가능하다. 검색이 빠르고, 조회 중심 구조에 적합하다. 

List<String> list = new ArrayList<>();
list.get(0);

 

5. ArrayList vs LinkedList

Spring을 개발할 때는 거의 ArrayList만을 사용한다. 왜 그럴까?

LinkedList의 검색 성능은 매우 떨어진다. index 접근 시 처음부터 끝까지 순회해야 한다. 백엔드에서는 조회가 압도적으로 많기 때문에 ArrayList가 유리하다. 

 

6. Set 자료 정리 + 중복 판단 원리

Set의 특징은 중복 X, 순서 X 점들이 가장 큰 특징이다. 하지만 순서가 보장되지 않으면 출력이 랜덤이지 않을까? 

이는 틀린 표현이다. 정확히는 순서가 보장되지 않는다는 건 저장될 때 위치가 고정되지 않고, 출력은 저장된 순서대로 나오기 떄문에 결과가 입력 순서와 다를 수 있다는 점이다.

 

7. Set의 중복은 어떻게 판단할까?

hashCode + equals로 판단하는데 

Set<Integer> set = new HashSet<>();

set.add(10);
set.add(10);

System.out.println(set.size()); // 1


// Integer 내부 동작
@Override
public int hashCode() {
    return value;
}

@Override
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer) obj).intValue();
    }
    return false;
}

 

8. 사용자 정의 객체 + Set

만약 Set에 객체가 들어올 경우 객체 주소가 다르면 내용이 같아도 중복이 아니게 된다. 그래서 우리는 equals와 hashCode 오버라이딩이 꼭 필요하다. 그리고 이때 instanceof 를 하지 않는다면 예외가 발생한다. 이를 주의하자!!

 

9. Map 정리 + 실전 메서드 보강

Map의 핵심은 Key는 중복 허용되지 않고, Value 중복은 허용된다. 그리고 하나의 Key에는 하나의 Value가 대응된다.

put이라는 메서드를 꼭 기억해두자!

 

10 entrySet은 복사일까?

Map을 순회할 때 자주 쓰는 entrySet 메서드가 있는데 이 개념은 View이다. 이 개념은 추후에 배울 예정이다.

'Java & Spring > 컬렉션 프레임워크' 카테고리의 다른 글

제네릭 (Generic)  (0) 2026.01.20
람다 표현식  (0) 2026.01.19
JCF가 왜 필요할까?  (0) 2026.01.08