1. 제네릭의 등장
- Java 5부터 Generic이라는 타입이 새로 추가되었습니다.
- 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거가 가능해졌습니다.
- 컬렉션, 람다, 스트림 등에서도 사용되므로 자바를 잘 활용하려면 이해해야 합니다.
- 제네릭은 클래스, 인터페이스, 메소드를 정의할 때 타입을 파라미터로 사용할 수 있도록 도와줍니다.
2. 제네릭의 장점
컴파일 시 강한 타입 체크를 할 수 있다.
컴파일 시 에러를 다 도출해내기 때문에 실행 중에 일어나는 에러(RuntimeException)를 방지할 수 있습니다.
// List Integer 타입으로 제네릭 타입 적용
List<Integer> list = new ArrayList();
list.add(1);
list.add("5"); // ERROR java: incompatible types: java.lang.String cannot be converted to java.lang.Integer
타입 변환을 제거한다.(casting)
다음 예시와 같이 제네릭을 사용하지 않는 경우 불필요한 타입 변환이 필요하게 됩니다.
따라서 프로그램 성능에 좋지 않은 영향을 미칩니다.
List list = new ArrayList();
list.add(1);
// 강제 형 변환 필요
Integer number = (Integer) list.get(0);
물론 제네릭을 사용하지 않으면 다음과 같이 모든 종류의 객체를 저장할 수 있습니다.
1. Object 형태로 변환되어 List에 쌓입니다.
이렇게 되면 저장할 때 타입 변환 발생, 2. 읽어올 때에도 타입 변환이 발생하게 됩니다.
List list = new ArrayList();
list.add(1);
list.add("5");
list.add(0.1);
Object o1 = list.get(0);
Object o2 = list.get(1);
Object o3 = list.get(2);
Integer num = (Integer) o1;
String str = (String) o2;
Long L = (Long) o3;
제네릭을 사용할 경우 List에 저장되는 요소를 Integer로 제한하기 때문에 get(index)할 경우 타입 변환이 필요가 없게 되어 프로그램 성능이 향상됩니다.
List<Integer> list = new ArrayList();
list.add(1);
// 형 변환 필요 없음
Integer number = list.get(0);
'Backend > Java' 카테고리의 다른 글
[Java] 자바 문자형 숫자 정수형 변환 (char type number to int) (0) | 2022.03.01 |
---|---|
[Java] 자바 8 Comparator API 데이터 정렬 (0) | 2022.02.25 |
[Java] 자바 제네릭 API Response 활용하기 (Response DTO) (0) | 2022.02.23 |
[Java] 자바 컬렉션 멀티 스레드 환경에서 안전하게 작업(synchronizedList, synchronizedMap, synchronizedSet) (0) | 2022.02.22 |
[Java] LIFO 스택, FIFO 큐 (Stack, Queue) (0) | 2022.02.11 |