[JAVA] 12.자바중요API_제너릭 (25.08.13)

Rjhkki222·2025년 8월 13일

JAVA

목록 보기
5/13
post-thumbnail

12.7 제네릭이란?

public class Box {
    // Box에 넣을 내용물 content 필드 선언
    // Object 타입은 모든 클래스의 최상위 부모 클래스이므로 프로모션이 된다.
    // 모든 객체는 부모 타입인 Object로 자동 타입변환 된다.
    // content는 어떤 객체든 대입이 가능하다.
    public Object content;

    public static void main(String[] args) {
        Box box = new Box();

        box.content = "바비인형";
//        box.content = 100;
//        box.content = 123.313;
        // 문제는 Box 안의 내용물을 얻을 떄이다.
        // content는 Object 타입이므로 어떤 객체가 대입되었는지 확실하게 알 수 없다.

        String doll = (String) box.content;
        // 어떤 내용물이 저장되었는지 모른다면 instanceof를 이용하여 타입조사를 할 수 있지만
        // 모든 타입조사를 다 한다면 if지옥에 빠질것..
    }
}

12.7.1 제네릭

  • 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 떄 파라미터를 구체적인 타입으로 대체시키는 기능.
  • 객체를 저장할 때 저장할 내용물의 타입을 미리 알려주고, 읽을 때 어떤 타입으로 제공할지를 알게 표시
// <T>는 T가 타입 파라미터임을 뜻하는 기호. 타입이 필요한 자리에 T를 사용할 수 있음을 알려줌.
public class Box<T> {
	public T content;
}

Box<String> box = new Box<String>();
box.content = "안녕";
String content = box.content;

Box<Integer> box = new Box<Integer>();
box.content = 100;
Integer content = box.content;
  • T 파라미터로 제공되는 것은 클래스타입, 인터페이스만 가능하다.
// 타입파라미터 기호 네이밍(암묵적 규칙)
<T> ==> 타입(Type)
<E> ==> 요소 Element List
<K> ==> Key, Map<k, v>
<V> ==> value, 리턴값, 매핑값
<N> ==> 숫자
<S,U,V> 2번째, 3번째, 4번째 선언된 타입
profile
Hello World!🍀

0개의 댓글