IT’s Portfolio

[Java] Lecture - Day 10 λ³Έλ¬Έ

Development Study/Java

[Java] Lecture - Day 10

f1r3_r41n 2023. 12. 12. 01:07
728x90
λ°˜μ‘ν˜•

πŸ–₯ Basic Java - Day 10

πŸ‘‰πŸ» [Chapter 07] μ»¬λ ‰μ…˜κ³Ό μ œλ„€λ¦­

μ»¬λ ‰μ…˜(collection)의 κ°œλ…

  • μ»¬λ ‰μ…˜
    • 객체듀을 μ‰½κ²Œ μ‚½μž…, μ‚­μ œ, 검색할 수 μžˆλŠ” κ°€λ³€ 크기의 μ»¨ν…Œμ΄λ„ˆ
      • κ°μ²΄λ“€μ˜ μ»¨ν…Œμ΄λ„ˆ(μ €μž₯μ†Œ)
      • μš”μ†Œ(element)의 κ°œμˆ˜μ— 따라 크기가 μžλ™ 쑰절
      • μš”μ†Œμ˜ μ‚½μž…, μ‚­μ œμ— λ”°λ₯Έ μš”μ†Œμ˜ μœ„μΉ˜ μžλ™ 이동
    • κ³ μ • 크기λ₯Ό κ°–λŠ” λ°°μ—΄μ˜ 단점 κ°œμ„ 
    • λ‹€μ–‘ν•œ κ°μ²΄λ“€μ˜ μ‚½μž…, μ‚­μ œ, 검색 등이 용이

μ»¬λ ‰μ…˜μ˜ νŠΉμ§•

  • μ»¬λ ‰μ…˜μ€ μ œλ„€λ¦­(generics) κΈ°λ²•μœΌλ‘œ κ΅¬ν˜„
    • μ œλ„€λ¦­
      • νŠΉμ • νƒ€μž…λ§Œ 닀루지 μ•Šκ³ , μ—¬λŸ¬ μ’…λ₯˜μ˜ νƒ€μž…μœΌλ‘œ λ³€ν•  수 μžˆλ„λ‘ ν΄λž˜μŠ€λ‚˜ λ©”μ†Œλ“œλ₯Ό μΌλ°˜ν™”μ‹œν‚€λŠ” 기법
      • ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€ 이름에 , , λ“± νƒ€μž…λ§€κ°œλ³€μˆ˜ 포함
    • μ œλ„€λ¦­ μ»¬λ ‰μ…˜ 사둀 : 벑터(Vector)
      • μ—μ„œ E에 ꡬ체적인 νƒ€μž…μ„ μ£Όμ–΄ ꡬ체적인 νƒ€μž…λ§Œ λ‹€λ£¨λŠ” λ²‘ν„°λ‘œ ν™œμš©
      • Vector<Integer> : μ •μˆ˜λ§Œ λ‹€λ£¨λŠ” μ»¬λ ‰μ…˜ 벑터
      • Vector<String> : λ¬Έμžμ—΄λ§Œ λ‹€λ£¨λŠ” μ»¬λ ‰μ…˜ 벑터
  • μ»¬λ ‰μ…˜μ˜ μš”μ†ŒλŠ” 객체만 κ°€λŠ₯
    • int, char, double λ“±μ˜ κΈ°λ³Έ νƒ€μž…μ˜ 데이터 μ‚¬μš© λΆˆκ°€

μ œλ„€λ¦­

  • μ œλ„€λ¦­
    • λ™μΌν•œ ν”„λ‘œκ·Έλž¨ μ½”λ“œμ— λ‹€μ–‘ν•œ 데이터 νƒ€μž…μ„ μ μš©ν•  수 μžˆλ„λ‘ ν΄λž˜μŠ€λ‚˜ λ©”μ†Œλ“œλ₯Ό μΌλ°˜ν™”μ‹œν‚€λŠ” 방법
    • JDK 1.5λΆ€ν„° λ„μž…(2004λ…„ 기점)
    • λͺ¨λ“  μ’…λ₯˜μ˜ 데이터 νƒ€μž…μ„ λ‹€λ£° 수 μžˆλ„λ‘ μΌλ°˜ν™”λœ νƒ€μž…(generic type)으둜 클래슀(μΈν„°νŽ˜μ΄μŠ€)λ‚˜ λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•˜λŠ” 기법
    • Cpp의 ν…œν”Œλ¦Ώ(template)κ³Ό 동일

μžλ°”μ˜ 벑터

  • Vector
    • 배열을 κ°€λ³€ 크기둜 λ‹€λ£° 수 있게 ν•˜κ³ , 객체의 μ‚½μž…, μ‚­μ œ, 이동이 쉽도둝 κ΅¬μ„±ν•œ μ»¬λ ‰μ…˜(μ»¨ν…Œμ΄λ„ˆ) 클래슀
      • λ°°μ—΄μ˜ 길이 μ œν•œ 극볡
      • μš”μ†Œμ˜ κ°œμˆ˜κ°€ λ„˜μΉ˜λ©΄ μžλ™μœΌλ‘œ 길이 쑰절
      • μ‚½μž…, μ‚­μ œμ— 따라 μžλ™μœΌλ‘œ μš”μ†Œλ“€μ˜ 자리 이동
    • java.util.Vector
    • 에 μ‚¬μš©ν•  μš”μ†Œλ₯Ό νŠΉμ • νƒ€μž…μœΌλ‘œ ꡬ체화
      • μ‚½μž… κ°€λŠ₯ 데이터
        • 객체, null
        • κΈ°λ³Έ νƒ€μž…μ˜ 값은 Wrapper 객체둜 λ§Œλ“€μ–΄ μ €μž₯
    • Vector에 객체 μ‚½μž…
      • λ²‘ν„°μ˜ 맨 λ’€, 쀑간에 객체 μ‚½μž… κ°€λŠ₯
    • Vector에 객체 μ‚­μ œ
      • μž„μ˜μ˜ μœ„μΉ˜μ— μžˆλŠ” 객체 μ‚­μ œ κ°€λŠ₯

Vector의 μ£Όμš” λ©”μ†Œλ“œ

  • boolean add(E element)
    • λ°±ν„°μ˜ 맨 뒀에 element μΆ”κ°€
  • void add(int index, E element)
    • 인덱슀 index에 element μ‚½μž…
  • int capacity()
    • λ²‘ν„°μ˜ ν˜„μž¬ μš©λŸ‰ 리턴
  • boolean addAll(Collection<? extends E> c)
    • μ»¬λ ‰μ…˜ c의 λͺ¨λ“  μš”μ†Œλ₯Ό λ²‘ν„°μ˜ 맨 뒀에 μΆ”κ°€
  • void clear()
    • λ²‘ν„°μ˜ λͺ¨λ“  μš”μ†Œ μ‚­μ œ
  • boolean contains(Object o)
    • 벑터가 μ§€μ •λœ 객체 oλ₯Ό ν¬ν•¨ν•˜κ³  있으면 true 리턴
  • E elementAt(int index)
    • 인덱슀 index의 μš”μ†Œ 리턴
  • E get(int index)
    • 인덱슀 index의 μš”μ†Œ 리턴
  • int indexOf(Object o)
    • o와 같은 첫 번째 μš”μ†Œμ˜ 인덱슀 리턴
    • μ—†μœΌλ©΄ -1 리턴
  • boolean isEmpty()
    • 벑터가 λΉ„μ–΄ 있으면 true 리턴
  • E remove(int index)
    • 인덱슀 index의 μš”μ†Œ μ‚­μ œ
  • boolean remove(Object o)
    • 객체 o와 같은 첫 번째 μš”μ†Œλ₯Ό λ²‘ν„°μ—μ„œ μ‚­μ œ
  • void removeAllElements()
    • λ²‘ν„°μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ‚­μ œν•˜κ³  크기λ₯Ό 0으둜 λ§Œλ“¦
  • int size()
    • 벑터가 ν¬ν•¨ν•˜λŠ” μš”μ†Œμ˜ 개수 리턴
  • Object[] toArray()
    • λ²‘ν„°μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” λ°°μ—΄ 리턴

μ»¬λ ‰μ…˜κ³Ό μžλ™ λ°•μ‹±/μ–Έλ°•μ‹±

// κΈ°λ³Έ νƒ€μž… 데이터λ₯Ό Wrapper 객체둜 λ§Œλ“€μ–΄ μ‚½μž…
Vector<Integer> v = new Vector<Integer>();
v.add(Integer.valueOf(4));

// μ»¬λ ‰μ…˜μœΌλ‘œλΆ€ν„° μš”μ†Œλ₯Ό μ–»μ–΄μ˜¬ λ•Œ, Wrapper 클래슀둜 μΊμŠ€νŒ… ν•„μš”
Integer n = (Integer)v.get(0);
int k = n.intValue(); // k = 4
  • JDK 1.5 이전
// μžλ™ λ°•μ‹±/언박싱이 μž‘λ™ν•˜μ—¬ κΈ°λ³Έ νƒ€μž… κ°’ μ‚½μž… κ°€λŠ₯
Vector<Integer> v = new Vector<Integer>();
v.add(4); // 4 -> Integer.valueOf(4)둜 μžλ™ λ°•μ‹±
int k = v.get(0); // Integer νƒ€μž…μ΄ int νƒ€μž…μœΌλ‘œ μžλ™ μ–Έλ°•μ‹±

/// νƒ€μž… 맀개 λ³€μˆ˜λ₯Ό κΈ°λ³Έ νƒ€μž…μœΌλ‘œ ꡬ체화할 수 μ—†μŒ
Vector<int> v = new Vector<int>(); // 컴파일 였λ₯˜
  • JDK 1.5λΆ€ν„°

μ»¬λ ‰μ…˜ μƒμ„±λ¬Έμ˜ 진화

Vector<Integer> v = new Vector<Integer>();
  • Java 7 이전
Vector<Integer> v = new Vector<>();
  • Java 7 이후
    • 컴파일러의 νƒ€μž… μΆ”λ‘  κΈ°λŠ₯ μΆ”κ°€
    • <> 에 νƒ€μž… λ§€κ°œλ³€μˆ˜ μƒλž΅
var v = new Vector<Integer>();
  • Java 10 이후
    • var ν‚€μ›Œλ“œ λ„μž…
    • 컴파일러의 지역 λ³€μˆ˜ νƒ€μž… μΆ”λ‘  κ°€λŠ₯

ArrayList

  • κ°€λ³€ 크기 배열을 κ΅¬ν˜„ν•œ 클래슀
    • 에 μš”μ†Œλ‘œ μ‚¬μš©ν•  νŠΉμ • νƒ€μž… ꡬ체화
  • 벑터와 거의 동일
    • μš”μ†Œ μ‚½μž…, μ‚­μ œ, 검색 λ“± 벑터 κΈ°λŠ₯κ³Ό 거의 동일
    • 벑터와 달리 μŠ€λ ˆλ“œ 동기화 κΈ°λŠ₯ μ—†μŒ
      • λ‹€μˆ˜ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— ArrayList에 μ ‘κ·Όν•  λ•Œ λ™κΈ°ν™”λ˜μ§€ μ•ŠμŒ
      • κ°œλ°œμžκ°€ μŠ€λ ˆλ“œ 동기화 μ½”λ“œ μž‘μ„±ν•΄μ•Ό 함

ArrayList의 μ£Όμš” λ©”μ†Œλ“œ

  • boolean add(E element)
    • ArrayList 맨 뒀에 element μΆ”κ°€
  • void add(int index, E element)
    • 인덱슀 index에 element μ‚½μž…
  • boolean addAll(Collection<? extends E> c)
    • μ»¬λ ‰μ…˜ c의 λͺ¨λ“  μš”μ†Œλ₯Ό ArrayList의 맨 뒀에 μΆ”κ°€
  • void clear()
    • ArrayList의 λͺ¨λ“  μš”μ†Œ μ‚­μ œ
  • boolean contains(Object o)
    • ArrayListκ°€ μ§€μ •λœ 객체 oλ₯Ό ν¬ν•¨ν•˜κ³  있으면 true 리턴
  • E elementAt(int index)
    • 인덱슀 index의 μš”μ†Œ 리턴
  • E get(int index)
    • 인덱슀 index의 μš”μ†Œ 리턴
  • int indexOf(Object o)
    • o와 같은 첫 번째 μš”μ†Œμ˜ 인덱슀 리턴
    • μ—†μœΌλ©΄ -1 리턴
  • boolean isEmpty()
    • ArrayListκ°€ λΉ„μ–΄ 있으면 true 리턴
  • E remove(int index)
    • 인덱슀 index의 μš”μ†Œ μ‚­μ œ
  • boolean remove(Object o)
    • 객체 o와 같은 첫 번째 μš”μ†Œλ₯Ό ArrayListμ—μ„œ μ‚­μ œ
  • int size()
    • ArrayListκ°€ ν¬ν•¨ν•˜λŠ” μš”μ†Œμ˜ 개수 리턴
  • Object[] toArray()
    • ArrayList의 λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” λ°°μ—΄ 리턴

Iterator

  • Iterator μΈν„°νŽ˜μ΄μŠ€
    • 리슀트 ꡬ쑰의 μ»¬λ ‰μ…˜μ—μ„œ μš”μ†Œμ˜ 순차 검색을 μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€
      • Vector, ArrayList, LinkedList, Set 에 μ €μž₯된 μš”μ†Œλ₯Ό 순차적으둜 검색할 λ•Œ μ‚¬μš©
    • java.util.Iterator
    • μ£Όμš” λ©”μ†Œλ“œ
      • boolean hasNext()
        • λ‹€μŒ λ°˜λ³΅μ—μ„œ μ‚¬μš©λ  μš”μ†Œκ°€ 있으면 true 리턴
      • E next()
        • λ‹€μŒ μš”μ†Œ 리턴
      • void remove()
        • λ§ˆμ§€λ§‰μœΌλ‘œ λ¦¬ν„΄λœ μš”μ†Œ 제거
// μ»¬λ ‰μ…˜μ˜ iterator() λ©”μ†Œλ“œ 호좜
// ν•΄λ‹Ή μ»¬λ ‰μ…˜μ„ 순차 검색할 수 μžˆλŠ” Iterator 객체 리턴
Vector<Integer> v = new Vector<>();
Iterator<Integer> it = v.iterator();

// μ»¬λ ‰μ…˜ 검색 μ½”λ“œ
while(it.hasNext()) {
    int n = it.next();
    ...
}
  • Iterator 객체 μ–»μ–΄λ‚΄κΈ°

HashMap<K, V>

  • 킀와 κ°’μ˜ 쌍으둜 κ΅¬μ„±λ˜λŠ” μš”μ†Œλ₯Ό λ‹€λ£¨λŠ” μ»¬λ ‰μ…˜
    • K : ν‚€λ‘œ μ‚¬μš©ν•  μš”μ†Œμ˜ νƒ€μž…
    • V : κ°’μœΌλ‘œ μ‚¬μš©ν•  μš”μ†Œμ˜ νƒ€μž…
    • 킀와 값이 ν•œ 쌍으둜 μ‚½μž…
    • 값을 κ²€μƒ‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ ν‚€ 이용
  • μ‚½μž… 및 검색이 λΉ λ₯Έ νŠΉμ§•
    • μš”μ†Œ μ‚½μž… : put(key, value) λ©”μ†Œλ“œ
    • μš”μ†Œ 검색 : get(key) λ©”μ†Œλ“œ
  • ν•΄μ‹œλ§΅μ€ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 킀와 값이 μ €μž₯λ˜λŠ” μœ„μΉ˜λ₯Ό κ²°μ •
    • μ‚¬μš©μžλŠ” κ·Έ μœ„μΉ˜λ₯Ό μ•Œ 수 μ—†μŒ
    • μ‚½μž… μˆœμ„œμ™€ ν•΄μ‹œλ§΅μ— λ“€μ–΄μžˆλŠ” μœ„μΉ˜λŠ” 관계가 μ—†μŒ
  • Vector와 ArrayList와 비ꡐ할 λ•Œ
    • ν•΄μ‹œλ§΅μ€ μš”μ†Œμ˜ μ‚½μž…, μ‚­μ œ μ‹œκ°„μ΄ 맀우 빠름
      • μš”μ†Œ μ‚½μž…, μ‚­μ œ μ‹œ μš”μ†Œλ“€μ˜ μœ„μΉ˜ 이동이 ν•„μš” μ—†κΈ° λ•Œλ¬Έ
    • ν•΄μ‹œλ§΅μ€ μš”μ†Œμ˜ 검색이 맀우 빠름
      • get(key) λ©”μ†Œλ“œκ°€ 호좜되면 ν•΄μ‹œ ν•¨μˆ˜κ°€ keyκ°€ μ €μž₯된 μœ„μΉ˜λ₯Ό λ‹¨λ²ˆμ— 찾아냄
    • ν•΄μ‹œλ§΅μ€ 인덱슀λ₯Ό μ΄μš©ν•˜μ—¬ μš”μ†Œμ— μ ‘κ·Ό λΆˆκ°€ν•˜λ©°, 였직 ν‚€λ‘œλ§Œ 검색해야 함

HashMap<K, V>의 μ£Όμš” λ©”μ†Œλ“œ

  • void clear()
    • ν•΄μ‹œλ§΅ λͺ¨λ“  μš”μ†Œ μ‚­μ œ
  • boolean containsKey(Object key)
    • μ§€μ •λœ ν‚€λ₯Ό ν¬ν•¨ν•˜λ©΄ true 리턴
  • boolean containsValue(Object value)
    • ν•˜λ‚˜ μ΄μƒμ˜ ν‚€λ₯Ό μ§€μ •λœ 값에 맀핑 κ°€λŠ₯ν•˜λ©΄ true 리턴
  • V get(Object key)
    • μ§€μ •λœ 킀에 λ§€ν•‘λ˜λŠ” κ°’ 리턴
    • 킀에 λ§€ν•‘λ˜λŠ” μ–΄λ–€ 값도 μ—†μœΌλ©΄ null 리턴
  • boolean isEmpty()
    • ν•΄μ‹œλ§΅μ΄ λΉ„μ–΄ 있으면 true 리턴
  • Set keySet()
    • ν•΄μ‹œλ§΅μ— μžˆλŠ” λͺ¨λ“  ν‚€λ₯Ό 담은 Set μ»¬λ ‰μ…˜ 리턴
  • V put(K key, V value)
    • 킀와 값을 λ§€ν•‘ν•˜μ—¬ ν•΄μ‹œλ§΅μ— μ €μž₯
  • V remove(Object key)
    • μ§€μ •λœ 킀와 이에 λ§€ν•‘λœ 값을 ν•΄μ‹œλ§΅μ—μ„œ μ‚­μ œ
  • int size()
    • ν•΄μ‹œλ§΅ 포합 μš”μ†Œ 개수 리턴

μ œλ„€λ¦­ λ§Œλ“€κΈ°

public class MyClass<T> {
    T val;
    void set(T a) {
        val = a;
    }
    T get() {
        return val;
    }
}
  • μ œλ„€λ¦­ 클래슀 μž‘μ„±
    • 클래슀 이름 μ˜†μ— μΌλ°˜ν™”λœ νƒ€μž… λ§€κ°œλ³€μˆ˜ μΆ”κ°€
MyClass<String> s = new MyClass<String>();
s.set("hello");
System.out.println(s.get());

MyClass<Integer> n = new MyClass<Integer>();
n.set(5);
System.out.println(n.get());
  • μ œλ„€λ¦­ 객체 생성 및 ν™œμš©
    • μ œλ„€λ¦­ νƒ€μž…μ— ꡬ체적인 νƒ€μž… 지정 ν›„ 객체λ₯Ό μƒμ„±ν•˜λŠ” 것을 ꡬ체화 라고 함
728x90
λ°˜μ‘ν˜•

'Development Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] Lecture - Day 12  (0) 2024.03.22
[Java] Lecture - Day 11  (0) 2024.03.15
[Java] Lecture - Day 9  (1) 2023.12.12
[Java] Lecture - Day 8  (0) 2023.12.12
[Java] Lecture - Day 7  (0) 2023.12.12
Comments