Java/문법

Collection - 자료구조를 쉽게 사용하는 집합

JuNo_12 2025. 4. 17. 21:12

Collection 이란?

자바는 여러 자료구조들을 쉽게 사용할 수 있도록 인터페이스와 구현체 (ArrayList, HachSet, HashMap 등을) 제공하는 집합이다.

배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있다.

이게 무슨 의미냐면, 배열은 처음 구현부터 배열 길이를 설정해주어야한다. 하지만, 나중에 수정을 할 때, 새로운 값을 배열에 추가를 하고싶다면, 배열 추가도 해야하고, 배열 길이도 수정을 해주어야한다. 이를 '정적' 이라고 표현한다.

 

오늘은 ArrayList, HachSet, HashMap를 하나하나씩 살펴볼 것이다.

인터페이스 특징 구현체
List 순서 유지, 중복 허용 ArrayList
Set 순서 없음, 중복 불가 HashSet
Map 키-값 구조, 키 중복 불가 HashMap

 

ArrayList

: 요소의 '순서'를 유지하고 '중복'된 값을 저장

  • 요소 추가 → add("값")
  • 요소 조회 → get(인덱스)
  • 요소 제거 → remove("값")

여기서 중요한 점이 있다. 앞에 코드를 보면, 내가 ArrayList 타입이 아닌 List 타입으로 선언해주었다.

그 이유는 ArrayList가 아니라 List에 의존해야 다형성을 가질 수 있고, 다른 원칙을 위반하지 않을 수 있기 때문이다.

이는 업캐스팅(Up-casting)과 연관이 있는데, 업캐스팅은 상위 개념으로 선언하고, 하위 개념을 생성해 할당하는 것을 의미한다.

예를 들면, 자의 수정을 위해 LinkedList를 사용하고 싶어졌다고 가정을 해보자.

ArrayList 타입에는 LinkedList 구현체를 할당할 수 없어서 컴파일 에러가 발생하기 때문에, 모든 ArrayList를 LinkedList로 수정해줘야한다. 하지만, List로 선언한 경우에는 구현체만 ArrayList에서 LinkedList로 변경해주면 끝이다.

이러한 점에서 List 타입으로 선언을 해주도록 하자.

List<String> arrayList = new ArrayList<>();
arrayList.add("123");      // 1 번째 요소 추가

// 중복 데이터 허용
arrayList.add("123");

// 단건 조회
System.out.println("1 번째 요소 조회: " + arrayList.get(0)); // 조회 123

// 데이터 삭제
arrayList.remove("123");

HashSet

: 요소의 '순서를 유지하지 않고' '중복을 허용하지 않는다.'

  • → 순서를 보장하지 않기 때문에 get() 지원을 하지 않는다.
  • 요소 추가 → add("값")
  • 요소 제거 → remove("값")
HashSet<String> uniqueNames = new HashSet<>();

// 추가
uniqueNames.add("Spartan");
uniqueNames.add("Steve");
uniqueNames.add("2");

// 순서를 보장 안함
System.out.println("uniqueNames = " + uniqueNames); 
uniqueNames.get(0); // get 사용 불가

// 중복 불가
uniqueNames.add("Spartan");
System.out.println("uniqueNames = " + uniqueNames); 

// 제거
uniqueNames.remove("Spartan");
System.out.println("uniqueNames = " + uniqueNames);

HashMap

: 요소의 '순서를 유지하지 않고' '중복을 허용하지 않는다.'

여기까지만 보면, HashSet과 똑같은거 아닌가싶지만 

이는 키(Key) - 값(Value) 구조로 데이터를 저장한다.

키는 중복 될 수 없지만, 값은 중복 가능하다.

  • 요소 추가 → put(”키”, 값)
  • 요소 조회 → get(”키”)
  • 요소 제거 → remove("Steve")
  • 키 확인 → keySet()
  • 값 확인 → values()
HashMap<String, Integer> hashMap = new HashMap<>();

// 추가
hashMap.put("Juno", 21);
hashMap.put("Hunho", 21); // 값은 중복 가능
hashMap.put("Ima", 18);

// 키 중복 불가: 값 덮어쓰기 발생
hashMap.put("Juno", 5);

// 조회
System.out.println(hashMap.get("Juno"));

// 삭제 가능
hashMap.remove("Juno"); 

// 키 확인
Set<String> keys = hashMap.keySet();

// 값 확인
Collection<Integer> values = hashMap.values();