
목차
- Generic(제네릭)이란
- Generic 장점
- Generic 사용 방법
1. Generic (제네릭)이란
Generic (제네릭)이란 직역을 하면 ‘일반적인'이란 뜻을 가지고 있습니다. 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법입니다.
자바에서 ArrayList나 LinkedList 등을 생성할 때 아래와 같이 생성을 합니다.
ArrayList<Integer> list1 = new ArrayList<Integer>();
LinkedList<double> list2 = new LinkedList<double>();
객체<타입> 객체명 = new 객체<타입>(); 이렇게 객체를 생성합니다. 하지만 String 타입도 지원하고, Integer 타입도 지원하고 싶은 경우 제네릭이라는 것을 사용합니다.
제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다. 특정 타입을 미리 지정해두는 것이 아닌 필요에 의해 지정할 수 있도록 하는 게 제네릭 타입입니다.
2. Generic 장점
- 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있습니다.
- 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없습니다. 즉 관리하기가 편합니다.
- 비슷한 기능을 지원하는 경우 코드와 재사용성이 높아집니다.
3. Generic 사용 방법
제네닉을 사용하는 경우 아래 타입을 주로 사용합니다.
타입 | 설명 |
---|---|
Type | |
Element | |
Key | |
Value | |
Number |
- Interface Generic 사용법
interface InterfaceSample<T1, T2> {
T1 testMethod1(T2 2);
T2 testMethod2(T1 t);
}
- 위 Interface의 구현체
class TestSampleInterfaceImpl implements InterfaceSample<String, Interger> {
@Override
public String testMethod1(Integer t) {
return null;
}
@Override
public Integer testMethod2(String t) {
return null;
}
}
2. Method Generic Type 사용법
- 메소드 제네릭 타입은 Class에 Generic Type을 선언하지 않고, 각 메소드마다 Generic Type을 선언해 사용할 수 있습니다.
- 메소드의 파라미터의 T 이 선언되어 있다면, 리턴타입 바로 앞에 제네릭 타입을 선언해 주어야 합니다.
class SampleMethod {
public static <T> List<T> method(List<T> list, T item){
list.add(item);
return list;
}
}
3. Wildcard Generic Type 사용법
- Generic 타입에는 <?> 도 존재합니다.
- <?> : 모든 객체 자료형, 내부적으로 Object로 인식합니다.
- <? super 객체형> : 명시된 객체 자료형의 상위 객체, 내부적으로는 Object로 인식합니다.
- <? extends 객체 자료형> : 명시된 객체 자료형을 상속한 하위 객체, 내부적으로는 명시된 객체 자료형으로 인식합니다.
class TestWildCard {
public List<? extends Object> wildMethod1() {
return new ArrayList<Long>();
}
public <T> List<? extends String> wildMethod12(T t) {
return new ArrayList<String>();
}
public List<?> method3() {
return new ArrayList<>();
}
}
'개발 > 자바' 카테고리의 다른 글
[JAVA] 더블 콜론 사용 이유 (0) | 2022.05.02 |
---|---|
[Java] ThreadLocal (0) | 2022.04.30 |
[Java] 개발 툴 이클립스 설치하기 (0) | 2022.04.21 |
[JAVA] 자바가 작동하는 원리 (0) | 2022.04.20 |
[Java] Open JDK 설치 및 환경변수 설정하기 (0) | 2022.04.14 |
댓글