본문 바로가기

개발 지식/Java

[Java] Generic 사용법

반응형

Generic 이란

  • 아직 타입이 정해지지 않은 데이터 타입이라고 쉽게 생각할 것.
  • 주로 Java Collection에서 많이 사용된다.

 

Interface Generic 사용법

interface ExampleInterface<T1, T2> {
    T1 test1 (T2 t);
    T2 test2 (T1 t);
}

public class ExampleClass implements ExampleInterface<String, Integer> {
    @Override
    public String exMethod1(Integer t) {
        return null;
    }

    @Override
    public Integer exMethod2(String t) {
        return null;
    }
}

 

Method Generic 사용법

클래스에 제네릭 타입을 선언하지 않고 각 메소드마다 제네릭 타입을 선언해서 사용 가능함. 메소드의 파라미터의 T가 선언되어 있다면, 리턴타입 바로앞에 <T> 제네릭 타입을 선언해야한다.

class TestMethod {
    public static <T> List<T> exampleMethod(List<T> list, T item) {
        list.add(item);
        return list;
    }
}

 

WildCard Generic 사용법

  • <?> : 모든 객체 자료형, 내부적으로는 Object로 인식
  • <? super 객체형> : 명시된 객체자료형의 상위 객체, 내부적으로는 Object로 인식
  • <? extends 객체자료형> : 명시된 객체자료형을 상속한 하위객체, 내부적으로는 명시된 객체 자료형으로 인식
class TestWildCard {
    public List<? extends Object> wildMethod1() {
        return new ArrayList<Long>();
    }

    public <T> List<? extends String> wildMethod2(T t) {
        return new ArrayList<String>();
    }

    public List<?> wildMethod3() {
        return new ArrayList<>();
    }
}

 

Generic 사용시 주의할 점

  • Generic Type으로는 전역변수(Static)을 선언할 수 없다.
  • Generic Type으로는 인스턴스를 생성할 수 없다.
  • 타입의 매개변수는 T 말고도 존재한다.
    • E : Element
    • K : Key
    • N : Number
    • T : Type
    • V : Value
  • Generic 타입이 인스턴스화 될 때, 컴파일러는 타입 파라미터와 관련된 정보를 제거한다 => 제네릭을 사용하기 이전의 라이브러리 등과 호완성을 유지하기 위함이다.

 


Reference : https://namjackson.tistory.com/18

반응형

'개발 지식 > Java' 카테고리의 다른 글

빌더 패턴(Builder Pattern) 이란  (0) 2020.02.24
[JAVA] Logback 사용법  (0) 2020.02.19
[JAVA] JDBC란  (1) 2020.02.05
[JAVA] Servlet(서블릿) 이란  (0) 2020.01.27
Mybatis Mapper 인터페이스  (0) 2020.01.20