-
Java 제네릭(Generic) 정리(1)Java 2023. 8. 11. 19:42
제네릭(Generic)
- 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 한다.
- 객체<타입> 객체명 = new 객체<타입>(); 형식으로 사용
- generic은 클래스 내부에서 지정하는 것이 아니라 외부에서 사용자에 의해 지정되는 것
- 특정 타입을 지정하는 것이 아니라, 필요에 의해 지정할 수 있도록 하는 일반(generic) 타입을 말한다.
ArrayList<Integer> list1 = new ArrayList<Integer>(); ArrayList<String> list2 = new ArrayList<Integer>(); /* 이 처럼 타입에 String, Integer를 다 사용하고 싶을때, String에 대한 클래스, Integer에 대한 클래스 등 하나하나 타입에 따라 만드는 것이 비효율적이다. 그래서 generic을 사용하는 것이다. */- Generic을 대중적으로 사용하는 통상적인 선언 방법
타입 설명 <T> Type <E> Element <K> Key <V> Value <N> Number - 제네릭 클래스 및 인터페이스
- 타입은 클래스, 인터페이스 블록 안에서만 유효하다.
- main에서 사용하고 싶은 타입을 지정해서 사용하면 된다.
- 파라미터를 참조타입만 사용할 수 있다.
- 참조타입이 올 수 있기 때문에 사용자가 정의한 클래스도 올수 있다.
- 기본형 타은 Wrapper Type을 사용한다. (int -> Integer / double -> Double)
- 제네릭 메소드
- [접근 제어자] <제네릭타입> [반환타입] [메소드명]([제네릭타입] [파라미터]) {} 형태로 표현
- ex) public <T> T genericMethod(T o) {}
- 파라미터 타입에 따라 제네릭타입이 결정된다.
- 클래스에서 지정한 제네릭유형과 별도로 메소드에서 독립적으로 제네릭 유형을 선언하여 쓸 수 있다.
- [접근 제어자] <제네릭타입> [반환타입] [메소드명]([제네릭타입] [파라미터]) {} 형태로 표현
* 제네릭 클래스 메소드 예시
class ClassName<E> { private E element; void set(E element) { this.element = element; } E get() { return element; } <T> T genericMethod(T o) { // 파라미터 타입에 따라 T의 타입이 결정된다. return o; } } /* 인터페이스 선언 방법 Interface InterfaceName <T> { // code.. } */ class tempClass { // code.. } public class Main { public static void main(String[] args) { ClassName<String> temp1 = new ClassName<String>(); ClassName<Integer> temp2 = new ClassName<Integer>(); ClassName<tempClass> temp3 = new ClassName<tempClass>(); temp1.set("1"); temp2.set(1); // class 관련 System.out.println(temp1.get().getClass().getName() + " / " + temp1.get()); // java.lang.String / 1 System.out.println(temp2.get().getClass().getName() + " / " + temp2.get()); // java.lang.Integer / 1 // method 관련 System.out.println(temp1.genericMethod(1).getClass().getName()); // java.lang.Integer System.out.println(temp1.genericMethod("1").getClass().getName()); // java.lang.String System.out.println(temp1.genericMethod(temp2).getClass().getName()); // ClassName } }출처)
'Java' 카테고리의 다른 글
Java 제네릭(Generic) 정리(3)_generic의 extends, super, wildcard (0) 2023.08.11 Java 제네릭(Generic) 정리(2)_static을 이용한 Generic (0) 2023.08.11 Java 배열과 list를 이용해 2차원 구현 (0) 2023.08.11 Java 날짜 관련 메소드 정리 (SimpleDateFormat, parse(), format()) (0) 2023.08.11 자바 JSON으로 받은 데이터를 Map, List로 변환하기 (0) 2023.05.13