-
[JAVA] 제네릭(Generic)JAVA 2020. 4. 6. 16:43728x90
제네릭 이란?
- 클래스 내부에서 사용하는 데이터의 타입을 클래스의 인스턴스를 생성할 때 결정하는 것을 의미
- 객체의 타입을 컴파일 시점에 체크하기 때문에 안정성이 높고 형변환의 번거러움을 줄일 수 있음
제네릭의 특징
객체 생성이 가능한 타입에 대해서만 제네릭 사용 가능
- 기본 데이터 타입(int, long ...)에 대해서는 지정이 불가능
- 기본 타입을 객체 타입으로 사용하는 Wrapper클래스(Integer, Boolean...)는 제네릭 사용 가능
제네릭 파라미터
public class SmapleGeneric<T> { public T sample; ... } public class Main{ public static void main(String[] args){ SampleGeneric<String> strSample = new SampleGeneric<String>(); SampleGeneric<Integer> intSample = new SampleGeneric<Integer>(); strSample.sample = "Sample"; intSample.sample = 123; System.out.println(strSample.sample.getClass()); //java.lang.String System.out.println(intSample.sample.getClass()); //java.lang.Integer } }
멀티 타입 파라미터
public class SampleGeneric<T, K> { public T sample1; public K sample2; ... } public class Main{ public static void main(String[] args){ SampleGeneric<String, Integer> genericSample = new SampleGeneric<String, Integer>(); genericSample.sample1 = "Sample"; genericSample.sample2 = 123; System.out.println(genericSample.sample1.getClass()); //java.lang.String System.out.println(genericSample.sample2.getClass()); //java.lang.Integer } }
제네릭 생략
public class SmapleGeneric<T> { public T sample; ... } public class Main{ public static void main(String[] args){ SampleGeneric genericSample = new SampleGeneric(); genericSample.sample = "Sample"; System.out.println(genericSample.sample1.getClass()); //java.lang.String } }
제네릭 메소드
public <T> Sample<T> methodSample(T t){ ... } Sample<Integer> <Integer>methodSample(10); //명시적으로 Integer 지정 Sample<Integer> methodSample(10); // 컴파일러가 매개 값을 보고 타입 결정
타입 매개변수 제한
public class SmapleGeneric<T extends String> { public T sample; ... } public class Main{ public static void main(String[] args){ SampleGeneric<String> genericSample = new SampleGeneric<String>(); SampleGeneric<Integer> genericSample = new SampleGeneric<Integer>(); //컴파일 오류 } }
728x90'JAVA' 카테고리의 다른 글
[JAVA] 스트림(Stream) (0) 2020.05.21 [JAVA] 람다식(Lambda Expression) (0) 2020.05.21 [JAVA] Overloading과 Overriding의 차이 (0) 2020.03.31 [Java] HashMap 값 추출 (0) 2020.02.23 [JAVA] BufferedReader, BufferedWriter 사용법 (0) 2019.07.28