πŸ“œ MENTOR JAVA

Section#16 _ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬

CodeLoge 2025. 1. 23. 20:48

#1. μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ (Collection Framework)

: ν•„μš”ν•œ 자료ꡬ쑰λ₯Ό 미리 κ΅¬ν˜„ν•˜μ—¬ java.util νŒ¨ν‚€μ§€μ—μ„œ 제곡

μ»¬λ ‰μ…˜ : 기쑴의 List, Queue, Tree λ“±μ˜ 자료 ꡬ쑰

ν”„λ ˆμž„μ›Œν¬ : ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ¬Άμ–΄ 놓은 κ°œλ…

: List와 Set μΈν„°νŽ˜μ΄μŠ€λŠ” λͺ¨λ‘ μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›μ§€λ§Œ, Map μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬μ‘°μƒμ˜ 차이둜 λ³„λ„λ‘œ μ •μ˜

 

#2. μ œλ„€λ¦­ (Generic)

: λ°μ΄ν„°μ˜ νƒ€μž…μ„ μΌλ°˜ν™”ν•œλ‹€λŠ” 것을 의미

: ν΄λž˜μŠ€λ‚˜ λ©”μ„œλ“œ μ •μ˜ μ‹œ μΌλ°˜ν™”ν•˜μ—¬ μ‚¬μš©ν•  데이터 νƒ€μž…μ„ μ»΄νŒŒμΌν•  λ•Œ 미리 μ§€μ •ν•˜λŠ” 방법

: μ›ν•˜λŠ” 데이터 νƒ€μž…μ„ 자유둭게 μ§€μ •ν•˜μ—¬ μ €μž₯ν•  수 있음

 

#2-2 Generic μ„ μ–Έ 및 생성

: μ œλ„€λ¦­ νƒ€μž…  νƒ€μž…을 νŒŒλΌλ―Έν„°λ‘œ κ°€μ§€λŠ” ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€

: 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ 이름 뒀에 <> 기호λ₯Ό μΆ”κ°€ν•˜κ³  μ•ˆμ— νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό μž…λ ₯

: Tλ₯Ό μ΄μš©ν•΄ νƒ€μž…μ„ μ œν•œ, μ—¬λŸ¬κ°œμ˜ νƒ€μž… λ³€μˆ˜λŠ” μ‰Όν‘œ(,)둜 κ΅¬λΆ„ν•˜μ—¬ λͺ…μ‹œ

: μ•ŒνŒŒλ²³ λŒ€λ¬Έμž ν•œκΈ€μžλ‘œ ν‘œν˜„

: ν΄λž˜μŠ€μ— μ œλ„€λ¦­μ„ λΆ€μ—¬ν•˜λ©΄ ν•΄λ‹Ή 클래슀λ₯Ό μ„ μ–Έν•  λ•Œ 데이터 νƒ€μž…μ„ λΆ€μ—¬

public class 클래슀λͺ…<T> {...}
public interface μΈν„°νŽ˜μ΄μŠ€λͺ…<T> {...}
// T = Type Variable

 

#3. List μ»¬λ ‰μ…˜

: λ°°μ—΄κ³Ό μœ μ‚¬ν•œ 자료 ꡬ쑰둜 쀑볡이 ν—ˆμš©λ˜λ©΄μ„œ μ €μž₯ μˆœμ„œκ°€ μœ μ§€λ˜λŠ” ꡬ쑰λ₯Ό 제곡

: λ°°μ—΄κ³ΌλŠ” λ‹€λ₯΄κ²Œ 크기의 μ œν•œμ΄ μ—†κ³ , μ‚½μž…, μ‚­μ œ, λ³€κ²½μ˜ κΈ°λŠ₯이 μžμœ λ‘œμ›€

: λ°μ΄ν„°μ˜ 크기λ₯Ό νŠΉμ •ν•  수 μ—†λŠ” λ‹€λŸ‰μ˜ 데이터λ₯Ό μ €μž₯ν•  λ•Œ μš©μ΄ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” 자료 ꡬ쑰

#3-1 ArrayList

: κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” List μΈν„°νŽ˜μ΄μŠ€μ˜ λŒ€ν‘œμ μΈ κ΅¬ν˜„ 클래슀

ArrayList 데이터 μ €μž₯

: add(E e), or add(int index, E e) λ©”μ„œλ“œλ₯Ό μ‚¬μš© → E : 리슀트 μ„ μ–Έ μ‹œ μ§€μ •ν•œ μ €μž₯ 데이터 객체

ArrayList 데이터 μΉ˜ν™˜

: List에 μ €μž₯된 데이터λ₯Ό λ³€κ²½ κ°€λŠ₯ 변경을 μ›ν•˜λŠ” index μœ„μΉ˜μ™€ μΉ˜ν™˜ν•  κ°’ λ˜λŠ” 객체λ₯Ό μ§€μ •ν•˜λ©΄ ν•΄λ‹Ή μœ„μΉ˜μ˜ 값이 λ³€κ²½

void set(int index, E value);

ArrayList 데이터 μ‚­μ œ

: ν•΄λ‹Ή μœ„μΉ˜μ˜ κ³΅κ°„κΉŒμ§€ μ‚­μ œ → 배열은 곡간이 μƒμ„±λ˜λ©΄ μ‚­μ œ λΆˆκ°€λŠ₯, 빈 곡백자리둜 ν•œμΉΈμ”© μ•žμœΌλ‘œ 이동

// νŠΉμ • μœ„μΉ˜μ˜ 데이터 μ‚­μ œ
remove(int index)
// μ§€μ •ν•œ 데이터 μ‚­μ œ
remove(Object o)

ArrayList 데이터 μ–»κΈ°

: E get(int index) λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ μ›ν•˜λŠ” index μœ„μΉ˜μ— μ €μž₯λ˜μ–΄ μžˆλŠ” 값을 좜λ ₯

 

#3-2 LinedList

: 데이터와 λ‹€μŒ λ°μ΄ν„°μ˜ μ£Όμ†Œλ₯Ό κ°€μ§€λŠ” λ…Έλ“œ(node) 객체가 μ—°κ²°λ˜μ–΄ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료 ꡬ쑰

: 객체λ₯Ό μƒμ„±ν•˜μ—¬ 인접 데이터λ₯Ό λ§ν¬ν•΄μ„œ 체인처럼 관리

: indexκ°€ μ‹€μ œ μ‘΄μž¬ν•˜μ§€λŠ” μ•Šμ§€λ§Œ, μ„œλ‘œ μ—°κ²°λ˜μ–΄ 있기 λ•Œλ¬Έμ— μˆœμ„œλ₯Ό μ•Œ 수 있음

 

LinkedList μ„ μ–Έ

: λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μ„ μ–Έν•˜κ±°λ‚˜ κΈ°λ³Έ μ„ μ–Έ 방식인 μžμ‹ μ˜ 객체 νƒ€μž… κ·ΈλŒ€λ‘œ μ„ μ–Έν•˜λŠ” 방식

: LinkedList λ³Έμ—°μ˜ κΈ°λŠ₯을 λͺ¨λ‘ μ‚¬μš©ν•  κ²½μš°μ—λŠ” 기본적인 객체 μ„ μ–Έ 방식을 선택

 

LinkedList 데이터 μ €μž₯

: κΈ°λŠ₯은 ArrayList와 동일, λ™μž‘ν•˜λŠ” 방식은 닀름

: 차이점 → λ…Έλ“œκ°€ κ°€μ§€κ³  μžˆλŠ” λ‹€μŒμ— μ˜€λŠ” 개체의 μ£Όμ†Œλ§Œ λ³€κ²½ν•˜λ©΄ λ˜κΈ°μ— λΉ λ₯΄κ²Œ 처리 κ°€λŠ₯

→ LinkedListμ—μ„œ 데이터λ₯Ό μΆ”κ°€ν•  λ•ŒλŠ” 기쑴에 μ—°κ²°λ˜μ–΄ 있던 링크λ₯Ό 끊고, μΆ”κ°€λ˜λŠ” 데이터에 μƒˆλ‘­κ²Œ μ£Όμ†Œλ₯Ό μ—°κ²°,

μΆ”κ°€λ˜λŠ” λ…Έλ“œλŠ” 뒀에 올 데이터와 λ§ν¬ν•˜μ—¬ μ‚½μž…

 

LinkedList μ‚­μ œ

: ArrayList와 λ™μΌν•œ remove λ©”μ„œλ“œ μ‚¬μš©

: μ‚­μ œν•  λ°μ΄ν„°μ™€μ˜ 연결을 끊고 κ·Έ λ’€μ˜ 데이터와 μ—°κ²°ν•˜μ—¬ μ‰½κ²Œ 데이터λ₯Ό μ‚­μ œ

 

#4 Set μ»¬λ ‰μ…˜

: List μ»¬λ ‰μ…˜κ³Ό λ‹€λ₯΄κ²Œ 객체의 μ €μž₯ μˆœμ„œλ₯Ό μ €μž₯ν•˜μ§€λŠ” μ•ŠμŒ

: μˆ˜ν•™μ˜ μ§‘ν•©κ³Ό μœ μ‚¬ν•œ κ°œλ…

: λ°μ΄ν„°μ˜ 쀑볡 ν—ˆμš©ν•˜μ§€ μ•ŠμŒ

: indexλ₯Ό λΆ€μ—¬ν•˜μ§€ μ•ŠμŒ → 데이터가 μž…λ ₯된 μˆœμ„œλ‘œ 좜λ ₯λ˜μ§€ μ•Šμ„ 수 있음

: λŒ€ν‘œμ μœΌλ‘œ HashSet, TreeSet, LinkedHashSet

 

#4-1 HashSet클래슀

: μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 κ΅¬ν˜„

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

HashSet 데이터 μ €μž₯

: λ™μΌν•œ κ°’ or 객체λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŒ → 데이터λ₯Ό 객체의 hashCode()값을 ν˜ΈμΆœν•˜μ—¬ 비ꡐ ν›„, κ°™μœΌλ©΄ equals() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ λ‹€μ‹œ 비ꡐ

 

HashSet 데이터 μ‚­μ œ

: λ‹€λ₯Έ μ»¬λ ‰μ…˜κ³Ό λ™μΌν•˜κ²Œ remove(Object O) λ©”μ„œλ“œλ₯Ό μ‚¬μš©

: Set μ»¬λ ‰μ…˜μ€ indexκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μˆœμ„œμ— μ˜ν•œ μ‚­μ œλŠ” μ§€μ›ν•˜μ§€ μ•ŠμŒ

 

#5 반볡자 Iterator

: 사전적인 의미 == λ°˜λ³΅ν•˜λ‹€

: Listμ»¬λ ‰μ…˜μ˜ μš”μ†Œλ₯Ό 순회 → ν•˜λ‚˜μ”© μΆ”μΆœν•˜λŠ”λ° μ‚¬μš©

: μ„ μ–Έλœ μ»¬λ ‰μ…˜ κ°μ²΄μ—μ„œ 가져와 μ‚¬μš©

 

#6 Map μ»¬λ ‰μ…˜

: Map μΈν„°νŽ˜μ΄μŠ€κ°€ λ³„λ„λ‘œ 쑴재, 데이터λ₯Ό List κ³„μ—΄μ˜ μ»¬λ ‰μ…˜κ³Ό λ‹€λ₯΄κ²Œ 처리

: Map μΈν„°νŽ˜μ΄μŠ€λŠ” 데이터λ₯Ό key와 value둜 κ΅¬λΆ„ν•˜μ—¬ μ €μž₯ν•˜λŠ” 방식을 μ‚¬μš©

: λŒ€ν‘œμ μœΌλ‘œ HashMap, TreeMap, LinkedHashMap

: Key → 쀑볡될 수 μ—†μŒ / value → 쀑볡이 κ°€λŠ₯ 

→ λ§Œμ•½ 쀑볡될 경우 key에 ν•΄λ‹Ήν•˜λŠ” value 값이 μ—…λ°μ΄νŠΈ λ˜μ–΄ μ €μž₯

: key와 valueλŠ” Entry λΌλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ €μž₯ → Entry : μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•œ 객체에 μ €μž₯λ˜λŠ”λ°, 이 μ•ˆμ—μ„œ μ •μ˜λ˜λŠ” λ‚΄λΆ€ μΈν„°νŽ˜μ΄μŠ€

 

#6-1 HashMap(K, V)

: hashing을 톡해 key의 쀑볡 μ—¬λΆ€ νŒλ‹¨

: key둜 μ§€μ •λœ 객체의 hashCode와 equals λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ 동일 μ—¬λΆ€ νŒλ‹¨

 

HashMap μ„ μ–Έ 및 μ‚¬μš©λ²•

: key에 λŒ€ν•œ Generic이 좔가됨

Map <KEY, V> map = new HashMap<>();