컬렉션과 제네릭

김영준·2024년 12월 17일

자바_학교

목록 보기
2/4

컬렉션

: 요소라고 불리는 가변 개수의 객체들의 저장소
-> 요소의 개수에 따라 크기 자동 조절
-> 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동

제네릭

-> 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화 시키는 기법
-> 클래스나 인터페이스 이름에 <.E>, <.K>, <.V> 등 타입 매개변수 포함
-> 컬렉션의 요소는 객체만 가능(기본 탕비으로 구현 불가)

즉, 형태는 같고 리턴값만 다른 클래스 여러개가 있을 때, 그것들을 하나로 합치는 것

// 제네릭 클래스 선언
class Box<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

public class Main {
    public static void main(String[] args) {
        // String 타입으로 Box 사용
        Box<String> stringBox = new Box<>();
        stringBox.setValue("Hello");
        System.out.println("String 값: " + stringBox.getValue());

        // Integer 타입으로 Box 사용
        Box<Integer> intBox = new Box<>();
        intBox.setValue(123);
        System.out.println("Integer 값: " + intBox.getValue());
    }
}

\<결과>

String: Hello
Integer: 123

Vector<.E>

-> 동기화
-> 멀티스레드 환경
-> 안전성 우선


<예시 코드>

Arraylist<.E>

-> 비동기화
-> 단일 스레드 환경
-> 성능 우선


<예시 코드>

Iterator<.Integer> 사용

-> 토크나이저랑 비슷함

HashMap<K,V>

-> 딕셔너리랑 비슷함
K : 키
V : 값

put() 메서드 : 요소 삽입
get() 메서드 : 요소 검색

HashMap<String, String> h = new HashMap<String, String>(); // 해시맵 객체 생성
h.put("apple", "사과"); // "apple" 키와 "사과" 값의 쌍을 해시맵에 삽입
String kor = h.get("apple"); // "apple" 키로 값 검색. kor는 "사과


제네릭 만들기

<예시 코드>

왜 (T) 캐스팅을 하나?
(T)는 타입 캐스팅을 명시적으로 선언하기 위해 필요합니다.
제네릭에서 Object를 구체적인 타입 T로 변환하려면 타입 캐스팅이 필수입니다.
타입 캐스팅을 생략하면 컴파일 오류가 발생합니다.

T[] stck = new T[10]; // 컴파일 오류 발생!

자바에서 제네릭 타입 T로 배열을 직접 생성할 수 없습니다.
왜냐하면, 런타임에는 T의 구체적인 타입 정보가 존재하지 않기 때문입니다.
제네릭 타입이 소거되면 모든 제네릭 타입은 Object로 변환됩니다.

profile
개발의 신이 될거다

0개의 댓글