자바

week3. 자바 Collections (set,list,map )

aerimi-code 2025. 9. 23. 13:51


List

List는 배열과 같이 순서가 있고, 배열처럼 index로 요소에 접근한다.

 

먼저 배열이 뭔지 알아보자!

배열의 단점: 배열은 데이터의 추가와 삭제에 매우 비효율적.배열은 데이터들이 메모리에 연속적으로 나열된 구조입

.
중간에 있는 데이터를 삭제하면 그 뒤의 모든 데이터를 한 칸씩 앞으로 당겨야 하고, 중간에 데이터를 추가하려면 그 뒤의 모든 데이터를 한 칸씩 뒤로 밀어야 합니다. 데이터가 많을수록 이 작업은 매우 느려짐! 

크기가 고정되어 있다. (생성 시 크기 지정 필수)

 

기본 타입을 다룬다. ( int, double, char )

 

배열은 new()와 같은 생성자를 사용하지 않는다. 객체처럼 괄호()를 쓰는 방식이 아니라 대괄호[] 를 사용해 크기를 지정한다.

배열은 크기가 고정되어 있기 때문에 크기가 중요한 요소이다! 

이와 달리 Collection은 가변크기이므로 요소가 추가되면 자동으로 크기가 늘어난다. 

String[] array= new String[5];

array= {"a","b","c"}; //오류발생


오류가 나는 이유: 배열을 선언할 때가 아니면 중괄호{}를 사용한 초기화 구문을 단독으로 사용할 수 없다. 초기화시에만 사용하는 문법이기 때문이다.

String[] array = new String[5];

// new String[] 을 사용하여 새로운 배열 객체를 만들어 재할당합니다.
array = new String[]{"a", "b", "c"};

 

이렇게 할당하면 된다.



## 핵심 차이점: 클래스 vs 언어의 기본 기능

  • 컬렉션 (ArrayList 등): ArrayList는 클래스(Class)입니다. 클래스는 객체를 만들기 위한 '설계도'이며, 이 설계도로 실제 객체를 만들 때 생성자(ArrayList())라는 특별한 메서드를 호출합니다.
  • 배열 (int[] 등): 배열은 클래스가 아닌, 자바 언어 자체에 내장된 기본 기능입니다. 따라서 객체처럼 생성자를 호출하는 방식이 아니라, 배열만을 위한 특별한 문법을 사용해 생성합니다.

ArrayList

오류: 

	ArrayList<String> list = new ArrayList<String>();
	int i=0;
	
	list.add("Milk");
	list.add("BREAD");
	list.add(1,"APPLE");
	list.set(2, "GRAPE");
	list.add(5, "BUTTER"); //해당 줄에서 오류 발생

 

set(5,"BUTTER"): set은 존재하는 배열에 관해 접근해야한다.

add (5,"BUTTER"): add는 list.size()까지 접근할 수 있는데, 현재 list의 크기는 3이다. 

비유: add(5, "새 사람"): 3번 사람과 4번 사람이 없는데, 5번째 자리에 끼어들기 (❌ 불가능)


LinkedList

 

순서가 있는 list 이다. 양방향으로 참고하기 때문에 이동하기가 쉽다. 

 




해쉬맵 :

맵은 사전처럼 사용

 

해쉬가 붙은 이유: 해쉬테이블에 값을 저장함  => 해쉬값을 이용하면 데이터를 찾을 때 더 쉽게 찾을 수 있다. 

	Set<K> keys=map.keySet(); //key만 set으로 가져옴
		System.out.println("Key : " + keys);

 

map은 keySet()으로 key값을 set으로 가져올 수 있다. 

 

	Collection<V> values = map.values();
		System.out.println("Values : " + values);

 

map은 values()로 value 값을 collection으로 가져올 수 있다. 

 


여기서 key는 set , value는 collection을 이용한다. 이유가 뭘까?  

 

답은 중복 여부에 있다.

 

Key는 중복될 수 없고, Value는 중복될 수 있다. 

여기서 set의 특징인 중복될 수 없음을 사용하는 것이다. 

반면, value는 Key에 연결된 데이터일 뿐 중복되어도 문제가 없다. 

 

Collection은 List와 Set의 최상위 인터페이스로, 자바의 모든 자료구조를 아우르는 가장 일반적인 개념이다.

  • 원소의 중복을 허용한다.
  • 순서를 보장하지 않는다. (순서가 필요하면 하위 인터페이스인 List를 사용)

 

따라서, 중복을 허용하면서, 순서는 보장하지 않는 collection을 사용하는 것이 map의 values 담기에 적절하다. 

 

 


 entrySet


Map에서 Key와 Value 가 모두 필요한 경우, entrySet을 사용한다. 

 

Map.Entry는 Key와 Value를 함께 담고 있는 하나의 객체이다. 이 객체 안에는 Key를 꺼내는 getKey()와 getValue()가 있다. 

Key가 중복X, 순서 X => Set을 사용.




Map은 Collection의 하위인터페이스가 아닌데도 함께 배우는 이유가 뭘까? 

'데이터를 모아서 관리한다'라는 목적이 같기 때문이다. 

둘 다 자바에서 효율적으로 데이터를 다루기 위해 만들어진 기술이다. 
 

그렇다면 이렇게 나눈 이유가 뭘까? 


차이점: 

 

📂 Collection (List, Set)

  • 데이터 자체에 초점을 맞춥니다.
  • 하나의 데이터(element)들이 연속적으로 모여있는 구조입니다.
  • 예시: 학생 이름 목록, 장바구니에 담은 상품 목록 등
  • 접근 방식: 데이터를 하나씩 순서대로 꺼내보거나(Iterator), 특정 위치(index)의 데이터를 가져옵니다.

 


🏷️ Map

  • 'Key'를 통한 데이터 접근에 초점을 맞춥니다.
  • 모든 데이터는Key와 Value의 쌍(pair)으로 이루어져 있습니다.
  • 예시: '대한민국'-'서울' 짝, '내 전화번호'-'홍길동' 짝처럼 사전이나 전화번호부와 같은 구조입니다.
  • 접근 방식: 반드시 Key를 제시해야만 그에 해당하는 Value를 얻을 수 있습니다.


Collection이 데이터 자체를 목록으로 관리하는 방식이라면, Map은 Key를 통해 값에 빠르게 접근하는 검색 위주의 방식을 제공한다. 

 




추가적으로 공부할 것 : generic, prettyPrinter인터페이스 인해,ArrayList의 동기화 처리

'자바' 카테고리의 다른 글

week4: 자바 Thread -2  (0) 2025.10.01
week4: 자바 Thread  (0) 2025.09.27
week2: 자바 프로그래밍 (static, final, 싱글톤)  (0) 2025.09.19
새 시작& 자바 개념 복습  (0) 2025.09.07
6. Inheritance and Polymorphism  (0) 2025.05.27