JAVA/Collection
제너릭(Generic)이란? 예시와 함께 배워보자
_DoYun
2022. 5. 17. 11:23
Generic을 있는 그대로 직역하자면 "일반적인" 이라는 뜻을 가지고 있습니다. 좀 더 이해하기 쉽게 풀이하자면 데이터 형식에 의존하지 않고 하나의 클래스 또는 메서드 등이 여러 데이터 타입을 가질 수 있는 것을 말합니다.
# Generic
타입 | 설명 |
<T> | Type |
<E> | Element |
<K> | Key |
<V> | Value |
<R> | Result |
일반적으로 제너릭이 많이 사용하는 타입들입니다.
물론 <FA>나 <PI> 처럼 자신이 생각하는 타입을 만들어서 사용할 수도 있습니다. 그러나 다수가 공유하는 코드일 수록 위와 같이 잘 알려진 타입들을 사용하는 것이 직관성을 높여줄 수 있습니다.
제너릭은 다음과 같이 클래스를 통해 활용할 수 있습니다.
public class Example <T> {...}
인터페이스 또한 활용이 가능합니다.
public interface SecondExample <T> {...}
더불어 타입을 두개 이상 설정하는 것 또한 가능합니다.
public class Example <K,V> {...}
다음은 보다 완성된 코드로 Generic을 이해해 보겠습니다.
class Example<E> {
E num;
Example(E num){
this.num = num;
}
}
class Main {
public static void main(String[] args) {
Example<String> first = new Example<String>("Hello");
Example<Integer> second = new Example<Integer>(10);
System.out.println(a.num);
System.out.println(b.num);
}
}
Hello
10
위 코드처럼 <E>타입의 변수 num에는 String 타입과 Integer 타입 모두 들어갈 수 있습니다. 여기서 주의해야 할 점은 제너릭 타입에 들어갈 수 있는 것은 참조 타입 뿐이라는 것입니다. int, double, char 등의 기본타입은 올 수 없습니다.
Generic 타입은 클래스와 인터페이스 뿐만 아니라 메서드에도 사용할 수 있습니다.
class Example<E> {
E num;
Example(E num){
this.num = num;
}
<T> T getReturn(T a){
return a;
}
}
class Main {
public static void main(String[] args) {
Example<String> first = new Example<String>("Hello");
Example<Integer> second = new Example<Integer>(10);
first.getReturn("hello");
first.getReturn(10);
first.getReturn("hi");
first.getReturn(20);
}
}
hello
10
hi
20
메서드 또한 사용 가능하다는 것을 확인할 수 있었습니다. 주의해야 할 점은 클래스가 특정 제너릭 타입이라고 해서 메서드 또한 그대로 따라가는 것은 아니라는 점입니다.