[Java & SpringBoot로 시작하는 웹 프로그래밍] 4주차 학습 - 2 (컬렉션 프레임워크)

진문장·2021년 9월 11일
0

컬렉션 프레임워크

제네릭(Generic) 프로그래밍이란?

  • 변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형으로 변환 될 수 있도록 프로그래밍 하는 방식
  • 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식

자료형 매개변수 T

  • 여러 참조 자료형으로 대체 될 수 있는 부분을 하나의 문자로 표현
public class GenericPrinter<T> {
  private T material;
  
  public void set Material(T material) {
    this.material = material;
  }
  public T getMaterial() {
    return material;
  }
}
type의 의미로 T 사용

자료형 매개 변수가 두 개 이상일 때

public class Point<T, V> {
  T x;
  V y;
  
  Point(T x, V y) {
    this.x = x;
    this.y = y;
  }
  
  public T getX() {
    return x;
  }
  
  public V getY() {
    return y;
  }
}
  • 위 와 같이 자료형이 2가지 일 경우 <T, V> 로 사용 가능하다.

제너릭 메서드

  • 메스드의 매개 변수를 자료형 매개 변수로 사용하는 메서드
pubilc class GenericMethod {
  public static <T,V> double makeRectangle(Point<T, V> p1, Point<T, V> p2) {
    double left = ((Number)p1.getX()).doubleValue();
    double right = ((Number)p2.getX()).doubleValue();
    double top = ((Number)p1.getY()).doubleValue();
    double bottom = ((Number)p2.getY()).doubleValue();
    
    double width = right - left;
    dobule height = bottom - top;
    
    return width * height;
  }
}
  • 메서드 내에서의 자료형 매개 변수는 메서드 내에서만 유효함

컬렉션 프레임 워크란?

  • 프로그램 구현에 필요한 자료구조와 알고리즘을 구현해 놓은 라이브러리
  • java.util 패키지에 구현되어 있음
  • 개발에 소요되는 시간을 절약하고 최적화된 라이브러리를 사용할 수 있음
  • Coleection 인터페이스와 Map 인터페이스로 구성됨

Collection 인터페이스

  • 하나의 객체의 관리를 위해 선언된 인터페이스로 필요한 기본 메서드가 선언되어 있음
  • 하위에 List,Set 인터페이스가 있음
  • List 인터페이스
    • 순서가 있는 자료관리, 중복허용
    • ArrayList, Vector, LinkedList, Stack, Queue
  • Set 인터페이스
    • 순서가 정해져 있지 않음, 중복을 허용하지 않음
    • HashSet, TreeSet 등

List 인터페이스

  • Coleection 하위 인터페이스
  • 객체를 순서에 따라 저장하고 관리하는데 필요한 메서드가 선언된 인터페이스
  • 배열의 기능을 구현하기 위한 메서드가 선언됨
  • ArrayList, Vector, LinkedList

ArrayList 와 Vector

  • 객체 배열 클래스
  • Vector는 자바 2 부터 제공된 클래스
  • 일반적으로 ArrayList를 더 많이 사용
  • Vector는 멀티 쓰레드 프로그램에서 동기화를 지원
  • capacity 와 size 는 다른 의미임

ArrayList 와 LinkedList

  • 둘다 자료의 순차적 구조를 구현한 클래스
  • ArrayList는 배열을 구현한 클래스로 논리적인 순서와 물리적 순서가 동일 함
  • LinkedList는 논리적으로 순차적인 구조지만, 물리적으로는 순차적이지 않을 수 있음

Stack

  • Last In First Out(LIFO): 맨 마지막에 추가 된 요소가 가장 먼저 꺼내지는 자료구조
  • 자바에서는 이미 구현된 클래스가 제공 됨

Queue

  • First In First Out(FIFO): 먼저 저장된 자료가 먼저 꺼내지는 자료구조
  • 선착순, 대기열등을 구현할 때 가장 많이 사용되는 자료 구조
  • 자바에서는 이미 구현된 클래스가 제공 됨

Set 인터페이스

  • Collection 하위의 인터페이스
  • 중복을 허용하지 않음
  • List는 순서기반의 인터페이스지만, Set은 순서가 없음
  • get(i) 메서드가 제공되지 않음 (Itrator로 순회)
  • 저장된 순서와 출력순서는 다를 수 있음
  • 아이디, 주문빈호, 사번 등 유일한 값이나 객체를 관리할 때 사용
  • HashSet, TreeSet 클래스

Iterator 로 순회하기

  • Collection 의 개체를 순회하는 인터페이스
  • iterator() 메서드 호출
Iterator ir = list.iterator();
while(ir.hasNext()) {
  Integer num = ir.next();
  ...
}

HashSet 클래스

  • Set 인터페이스를 구현한 클래스
  • 중복을 허용하지 않으므로 저장되는 객체의 동일함 여부를 알기 위해 equals()와 hashCode() 메서드를 재정의 해야함

TreeSet 클래스

  • 객체의 정렬에 사용되는 클래스
  • 중복을 허용하지 않으면서 오름차순이나 내림차순으로 객체를 정렬 함
  • 내부적으로 이진 검색 트리로 구현되어 있음
  • 이진 검색 트리에 자료가 저장 될 때 비교하여 저장될 위치를 정함
  • 객체 비교를 위해 Comparable이나 Comparator 인터페이스를 구현 해야 함

Comparable 인터페이스와 Comparator 인터페이스

  • 정렬 대상이 되는 클래스가 구현해야 하는 인터페이스
  • Comparable 은 compareTo() 메서드를 구현
    매개 변수와 객체 자신(this)를 비교
  • Comparator는 compare() 메서드를 구현
    두개의 매개 변수를 비교
    TreeSet 생성자에 Comparator가 구현된 객체를 매개변수로 전달
TreeSet<Member> treeSet = new TreeSet<Member>(new Member());
  • 일반적으로 Comparable을 더 많이 사용
  • 이미 Comparable이 구현된 경우 Comparator를 이용하여 다른 정렬 방식을 정의 할 수 있음

Map 인터페이스

  • 쌍으로 이루어진 객체를 관리하는데 필요한 여러 메서드가 선언되어 있음
  • Map을 사용하는 객체는 key-value 쌍으로 되어 있고 key는 중복될 수 없음
  • 검색을 위한 자료구조
  • key를 애용하여 값을 저장하거나 검색, 삭제 할때 사용하면 편리함
  • 내부적으로 hash방식으로 구현 됨
index = hash(key); // index는 저장 위치

HashMap 클래스

  • Map 인터페이스를 구현한 클래스 중 가장 일반적으로 사용하는 클래스
  • HashTable 클래스는 자바2 부터 제공된 클래스로 Vector 처럼 동기화를 제공 함
  • pair 자료를 쉽고 빠르게 관리할 수 있음

TreeMap 클래스

  • key 객체를 정렬하여 key-value를 pair로 관리하는 클래스
  • key 에 사용되는 클래스에 Comparable,Comparator 인터페이스를 구현
  • java에 많은 클래스들은 이미 Comparable이 구현되어 있음
  • 구현 된 클래스를 key로 사용하는 경우는 구현할 필요 없음

0개의 댓글