πŸ“š CS [ComputerScience]/πŸ“š CS λ©΄μ ‘

πŸ“š [CSλ©΄μ ‘] μ›Ή λ©΄μ ‘ 질문 [11] [μžλ°” μ»¬λ ‰μ…˜ / Collection Framework]

Dbswnstjd 2024. 3. 2. 11:00

1. μ»¬λ ‰μ…˜μ΄λž€ ?

μ»¬λ ‰μ…˜μ€ λ§Žμ€ 데이터 μš”μ†Œλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 자료ꡬ쑰λ₯Ό λœ»ν•˜λ©°,

ArrayList, LinkedList, HashMap 등이 ν¬ν•¨λœλ‹€. 그리고 이 μ»¬λ ‰μ…˜λ“€μ€ μ œλ„€λ¦­(generics) ν˜•μ‹μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄ μ»¬λ ‰μ…˜κ³Ό ν•¨κ»˜ μ œλ„€λ¦­μ— λŒ€ν•΄μ„œλ„ 이해해야 ν•œλ‹€.

 

μžλ°”μ—μ„œλŠ” 이런 μ»¬λ ‰μ…˜μ„ μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€μ™€ ν΄λž˜μŠ€λ“€μ΄ 있으며 자주 μ‚¬μš©λ˜λŠ” ν΄λž˜μŠ€λ“€μ˜ μ’…λ₯˜μ™€ 상속 κ³„μΈ΅λ„λŠ” μ•„λž˜μ˜ 사진과 κ°™λ‹€. 

 

2. μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ μž₯점 

1. μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€ν˜•μ„±μ„ μ΄μš©ν•œ 객체지ν–₯적 섀계λ₯Ό 톡해 ν‘œμ€€ν™”λ˜μ–΄ 있기 λ•Œλ¬Έμ—, μ‚¬μš©λ²•μ„ μ΅νžˆκΈ°μ—λ„ νŽΈλ¦¬ν•˜κ³  μž¬μ‚¬μš©μ„±μ΄ λ†’λ‹€.

List<Integer> list = new ArrayList<>();
list = new LinkedList<>();

μ΄λ ‡κ²Œ List μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” λ‹€λ₯Έ 클래슀(LinkedList, Vector)둜 변경이 κ°€λŠ₯ν•˜λ‹€. μ½”λ“œμ˜ μœ μ—°μ„±μ΄ 증가

 

2. 데이터 ꡬ쑰 및 μ•Œκ³ λ¦¬μ¦˜μ˜ κ³ μ„±λŠ₯ κ΅¬ν˜„μ„ μ œκ³΅ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯κ³Ό ν’ˆμ§ˆμ„ ν–₯μƒμ‹œν‚¨λ‹€.

3. κ΄€λ ¨ μ—†λŠ” API κ°„μ˜ μƒν˜Έ μš΄μš©μ„±μ„ μ œκ³΅ν•œλ‹€. (μƒμœ„ μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μ—…μΊμŠ€νŒ…ν•˜μ—¬ μ‚¬μš©)

4. 이미 κ΅¬ν˜„λ˜μ–΄ μžˆλŠ” APIλ₯Ό μ‚¬μš©ν•˜λ©΄ λ˜κΈ°μ—, μƒˆλ‘œμš΄ APIλ₯Ό 읡히고 μ„€κ³„ν•˜λŠ” μ‹œκ°„μ΄ 쀄어든닀.

5. μ†Œν”„νŠΈμ›¨μ–΄ μž¬μ‚¬μš©μ„ μ΄‰μ§„ν•œλ‹€. 

 

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ— μ €μž₯ν•  수 μžˆλŠ” λ°μ΄ν„°λŠ” μ˜€λ‘œμ§€ 객체(Object)이닀. 즉, intν˜•μ΄λ‚˜ doubleν˜•κ³Ό 같은 μžλ°”μ˜ primitive νƒ€μž…μ€ 적재λ₯Ό λͺ»ν•œλ‹€λŠ” 말이닀. λ”°λΌμ„œ primitive νƒ€μž…μ„ wrapper νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ Integer κ°μ²΄λ‚˜ Double 객체둜 λ°•μ‹±ν•˜μ—¬ μ €μž₯ν•΄μ•Ό ν•œλ‹€. λ˜ν•œ 객체λ₯Ό λ‹΄λŠ” λ‹€λŠ” 것은 곧 μ£Όμ†Œ 곡간을 λ‹΄λŠ”λ‹€λŠ” κ²ƒμ΄λ‹ˆ, null도 μ €μž₯이 κ°€λŠ₯ν•˜λ‹€.

 

3. μžλ°” μ»¬λ ‰μ…˜ μ’…λ₯˜

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λŠ” 크게 Collection μΈν„°νŽ˜μ΄μŠ€μ™€ Map μΈν„°νŽ˜μ΄μŠ€λ‘œ λ‚˜λ‰œλ‹€.

List와 Set μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λ“€μ€ 곡톡뢀뢄이 많기 λ•Œλ¬Έμ—, κ³΅ν†΅λœ 뢀뢄을 λͺ¨μ€ Collection μΈν„°νŽ˜μ΄μŠ€λ‘œ μƒμ†λ˜μ–΄ μžˆλ‹€. 

Map μΈν„°νŽ˜μ΄μŠ€ μ»¬λ ‰μ…˜λ“€μ€ λ‘κ°œμ˜ 데이터λ₯Ό λ¬Άμ–΄ ν•œμŒμœΌλ‘œ 닀루기 λ•Œλ¬Έμ— Collection μΈν„°νŽ˜μ΄μŠ€μ™€ λ”°λ‘œ λΆ„λ¦¬λ˜μ–΄ μžˆλ‹€.

 

1. List

- μˆœμ„œλ₯Ό 보μž₯ν•˜κ³  μ€‘λ³΅λ˜λŠ” 값을 ν—ˆμš©ν•œλ‹€. 

- λ°°μ—΄κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ index둜 μš”μ†Œμ— μ ‘κ·Ό

- μžλ£Œν˜•μ˜ 크기가 고정이 μ•„λ‹Œ λ™μ μœΌλ‘œ λ³€κ²½

- κ΅¬ν˜„ ν΄λž˜μŠ€λ‘œλŠ” ArrayList, LinkedList, Vector, Stack이 μžˆλ‹€.

- VectorλŠ” ArrayList의 ꡬ버전이라고 μƒκ°ν•˜λ©΄λœλ‹€.  thread-safe ν•˜λ‹€.

- Stack은 Vectorλ₯Ό μƒμ†ν•˜κΈ° λ•Œλ¬Έμ— 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. (ArrayDeque둜 λŒ€μ²΄)

 

2. Queue

- μ„ μž…μ„ μΆœ FIFO(First In First Out) ꡬ쑰

- 처음 λ“€μ–΄μ˜¨ μ›μ†Œκ°€ κ°€μž₯ λ¨Όμ € λ‚˜κ°„λ‹€.

- QueueλŠ” μΈν„°νŽ˜μ΄μŠ€μ΄κ³  κ΅¬ν˜„μ²΄λŠ” LinkedList, PriorityQueue, ArrayDeque

- μš°μ„ μˆœμœ„ 큐λ₯Ό κ΅¬ν˜„ν•  λ•Œμ—λŠ” ν•„μˆ˜μ μœΌλ‘œ Comparable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. compareTo() λ©”μ„œλ“œ λ‘œμ§μ— 따라 자료 객체의 μš°μ„ μˆœμœ„λ₯Ό κ²°μ •ν•˜λŠ” μ‹μœΌλ‘œ λ™μž‘λ˜κΈ° λ•Œλ¬Έ, null μ €μž₯ λΆˆκ°€, heap ν˜•νƒœλ‘œ μ €μž₯

 

3. Set

- λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šκ³  μˆœμ„œλ₯Ό μœ μ§€ν•˜λŠ” 데이터 집합 리슀트

- 쀑볡 μ €μž₯이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— null값도 ν•˜λ‚˜λ§Œ μ €μž₯ κ°€λŠ₯

 

3. Map

- Key, Value 의 쌍으둜 연관지어 이루어진 데이터 집합

- 값은 μ€‘λ³΅λ˜μ–΄ μ €μž₯될 수 μžˆμ§€λ§Œ ν‚€λŠ” ν•΄λ‹Ή Mapμ—μ„œ κ³ μœ ν•΄μ•Ό ν•œλ‹€.

- 기쑴에 μ €μž₯된 데이터와 μ€‘λ³΅λœ 킀와 값을 μ €μž₯ν•˜λ©΄ 기쑴의 값은 사라지고 λ§ˆμ§€λ§‰μ— μ €μž₯된 값이 λ‚¨κ²Œ 됨

- μ €μž₯ μˆœμ„œκ°€ μœ μ§€ λ˜μ§€ μ•ŠμŒ

 

이 외에도 μΈν„°νŽ˜μ΄μŠ€κ°€ μ‘΄μž¬ν•˜μ§€λ§Œ μ§€κΈˆκΉŒμ§€ 많이 μ‚¬μš©ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ™€ 클래슀λ₯Ό μœ„μ£Όλ‘œ 닀쀬닀. 각각의 μ“°μž„μƒˆμ— 따라 μ•Œλ§žμ€ κ΅¬ν˜„μ²΄λ₯Ό μ“°λŠ” 것이 정말 μ€‘μš”ν•˜λ‹€.