study/Java

Generic

으녕오리 2025. 4. 1. 04:24

제네릭이 필요한 이유

담을 곳이 필요할 때에는 타입별로 클래스를 만들어 줘야 함

Object를 통해 다형성을 사용해서 해결하기(코드 재사용 O, 타입 안전성 X)
장점 : 코드의 중복 제거, 코드 재사용 가능

단점1 : 타입 안전성 문제 발생

단점2 : (Integer)과 같은 타입 캐스팅 코드가 필요함 (∵ Integer = Object는 자식은 부모를 담을 수 없으므로 성립하지 않음)

제네릭 적용(코드 재사용 O, 타입 안전성 O)

package generic.ex1;
public class GenericBox<T> {
    private T value;
    public void set(T value) {
        this.value = value;
    }
    public T get() {
        return value;
    }
}
package generic.ex1;
public class BoxMain3 {
    public static void main(String[] args) {
        GenericBox<Integer> integerBox = new GenericBox<Integer>(); //생성 시점에
        T의 타입 결정
        integerBox.set(10);
//integerBox.set("문자100"); // Integer 타입만 허용, 컴파일 오류
        Integer integer = integerBox.get(); // Integer 타입 반환 (캐스팅 X)
        System.out.println("integer = " + integer);
        GenericBox<String> stringBox = new GenericBox<String>();
        stringBox.set("hello"); // String 타입만 허용
        String str = stringBox.get(); // String 타입만 반환
        System.out.println("str = " + str);
    }
}

 

제네릭이란?

  • GenericBox<T>
    • T : 타입 매개변수, String 과 같은 타입이 된다.
    • 객체 생성 시점에 타입이 결정된다.
  • 생성 시점에 타입이 아예 정해지므로, 타입 캐스팅이 필요 없다.

 

제네릭 용어와 관례

  • 메서드는 매개변수인자를 전달해서 사용할 값을 결정한다.
  • 제네릭 클래스는 타입 매개변수타입 인자를 전달해서 사용할 타입을 결정한다.
    • 타입 매개변수 : GenericBox<T> 의 T
    • 타입 인자 : GenericBox<Integer>의 Integer
  • 한 번에 여러 타입 매개변수 선언 가능 ex) class Data<K, V>
  • 타입 인자로 래퍼 클래스를 사용해야 한다. 기본형(int, double ...)은 사용 불가능

 

 

'study > Java' 카테고리의 다른 글

LinkedList  (0) 2025.04.04
ArrayList  (0) 2025.04.03
Generic2  (0) 2025.04.02
Java에서 return문 누락으로 발생하는 오류와 해결 방법  (0) 2025.03.05
for문  (0) 2025.02.20