9. 컬렉션 프레임 워크와 제네릭

2023. 9. 4. 21:31Java

제네릭 (Generic)

클래스나 메소드에 사용할 데이터 타입을 여러 참조 자료형을 사용할 수 있도록 하는 것

 

1) 제네릭을 사용하지 않았을 때

여러 참조 자료형을 사용할 수 있도록 Object 클래스를 사용한다.

public class ObjectBox {

    private Object object;

    //object만 들어올 수 있는게 아니라 object의 후손들 모두 들어올 수 있다
    //ObjectBox는 어떤 Object든 저장할 수 있고, 어떤 Object든 꺼낼 수 있다.
    public void add(Object obj){
        this.object = obj;
    }

    public Object get() {
        return this.object;
    }

    public void set(Object obj) {
        this.object = obj;
    }
}

 

=> 호출 시 원래 타입으로 변환시키는 번거로운 과정이 필요하다.

ObjectBox string = new ObjectBox<>();

string.set("kim");
String str = (String)string.get();

 

2) 제네릭을 사용할 때

클래스나 인터페이스 이름 뒤 or 메소드의 리턴 타입 앞에 붙는다.

<T>는 T라는 이름의 제네릭 타입을 선언한다는 의미

public class ObjectBox<T> {

    private T object;

    public void add(T obj){
        this.object = obj;
    }

    public T get() {
        return this.object;
    }

    public void set(T obj) {
        this.object = obj;
    }
}

 

=> 사용하는 시점에 어떤 자료형을 사용할 것인지 지정한다.

=> 사용할 때는 형변환하지 않아도 된다.

ObjectBox<String> string = new ObjectBox<>();

string.set("StringGeneric");
String str = string.get();

 

장점

  • 불필요한 형변환을 제거한다.
  • 정해진 타입만 사용하도록 강제 => 컴파일 시 잘못된 타입의 값이 저장되는 것을 막는다.

 

제네릭이 사용될 때

1. 하나의 타입으로 고정할 때 - 제한

2. 다양한 타입을 호환되게 할 때 - 확장

 

 

컬렉션 프레임워크 (Collection Framework)

일정 타입의 데이터들을 하나의 그룹으로 묶어 효율적으로 저장하고, 관리할 수 있는 기능을 제공하는 뼈대

 

- java.util 패키지에 포함

- List, Queue, Set, Map 등의 인터페이스 제공하며, 이를 구현하는 클래스를 제공한다.

 

배열은 크기가 고정되어 있는데에 반해, 컬렉션 프레임워크는 가변적인 크기를 갖는다.

데이터 삽입, 탐색, 정렬 등 편리한 API를 제공한다.

 

 

실선은 상속, 점선은 구현

 

1. Collection

컬렉션 프레임워크에서 가장 기본이 되는 인터페이스

하나의 자료를 모아서 관리하는데 필요한 기능을 제공한다.

값이 있지만 순서는 기억하지 못함 (Iterator 를 통해 값 유무 확인)

 

 

2. Iterator

자료구조에서 자료를 읽기 위한 목적으로 사용되는 인터페이스

자료의 유무를 확인하는 hasNext()와 자료를 꺼내는 next() 함수로 구성

 

 

3. List

순서가 있는 데이터를 사용할 때 쓰임

인덱스로 객체를 관리 -> 저장 시 자동 인덱스 부여 & 인덱스로 객체 검색, 삭제 가능

Collection 상속받음

 

 

3-1. ArrayList

List를 인터페이스를 구현하고 있는 대표적인 클래스

길이에 제한이 없어 크기를 조절할 수 있다.

 

 

4. Set

중복을 허용하지 않는 자료구조로 중복 값은 마지막 값 하나만 저장됨

set 인터페이스에 저장되는 객체들은 object가 가지고있는 equals()메소드와 hashCode() 메소드를 오버라이딩 해야한다

Collection 상속받음

 

 

4-1. HashSet

Set 인터페이스를 구현하므로 순서없이 저장되며 중복 저장하지 않는다.

순서가 없으므로 인덱스로 객체 검색 불가 (get() X) -> forEach()나 iterator로 전체 검색

 

5. Map

key, value로 구성된 객체를 저장하는 구조

Key값은 중복 불가 - 중복 시 새로운 값으로 대치

Value는 중복 가능

'Java' 카테고리의 다른 글

11. 회원관리 프로그램  (0) 2023.09.10
10. 예외처리와 enum  (0) 2023.09.10
8. 익명 클래스와 람다식  (0) 2023.09.04
7. 자바 리플렉션 (Reflection)  (0) 2023.09.04
6. 불변 객체 (Immutable Object) & Final  (0) 2023.09.03