제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미
제네릭의 장점
1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다.
2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.
3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.
아래와 같이, 클래스, 인터페이스, 추상 클래스 등을 정의할 때, 타입을 임의의 제네릭으로 둔 뒤,
사용 시점에서 타입을 정의하여 사용하는 것이 가능하다.
// 제네릭 클래스
class SimpleClass<E> {
private E element; // 제네릭 타입 변수
void set(E element) { // 제네릭 파라미터 메소드
this.element = element;
}
E get() { // 제네릭 타입 반환 메소드
return element;
}
}
// 제네릭 인터페이스
public Interface InterfaceName <T, K,...> { ... }
// HashMap의 경우 아래와 같이 선언되어있다.
public class HashMap <K, V> { ... }
사용 예시
class Main {
public static void main(String[] args) {
SimpleClass<String> StringClass = new SimpleClass<String>();
SimpleClass<int> IntClass = new SimpleClass<int>();
..........
}
}
위와 같이, 사용하는 곳에서 E 라고 제네릭
SimpleClass 객체를 생성할 때 <> 안에 타입 파라미터를 지정한다.
그러면 StringClass 인스턴스의 SimpleClass에서 E 제네릭 타입은 String이 된다.
반대로 IntClass 인스턴스의 SimpleClass에서 E 제네릭 타입은 Integer이 된다.
**참고: 제네릭에서 반환 타입이 필요한데, AbstractTemplate<Void>와 같이 반환할 내용이 없으면 Void 타입을 사용하고 null 을 반환하면 된다. 참고로 제네릭은 기본타입인 void,int 등을 선언할 수 없다.
여기서 void 와 Void는 엄연히 다르다.
void -> return;
Void -> return null;
'Spring boot' 카테고리의 다른 글
스프링 핵심원리 4 [프록시 패턴과 데코레이터 패턴] (0) | 2023.06.15 |
---|---|
스프링 핵심원리 3 [스프링 디자인 패턴] (0) | 2023.06.14 |
자바 익명함수와 람다식 (0) | 2023.06.11 |
스프링 핵심원리 2 [쓰레드 로컬을 통한 동시성 문제해결] (0) | 2023.06.10 |
스프링 핵심원리 1 [예제 생성 및 요구사항 이해] (0) | 2023.06.10 |