제네릭이란?
자바에서 제네릭(Generics)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다.
객체별로 다른 타입의 자료가 저장될 수 있도록 한다.
자바에서 배열과 함께 자주 쓰이는 자료형이 리스트(List)인데, 다음과 같이 클래스 선언 문법에 꺾쇠 괄호 <> 로 되어있는 코드 형태를 한 번 쯤은 봤을 것이다.
ArrayList <String> name = new ArrayList<>();
저 꺾쇠 괄호가 바로 제네릭이다. 괄호 안에는 타입명을 기재한다. 그러면 저 리스트 클래스 자료형의 타입은 String 타입으로 지정되어 문자열 데이터만 리스트에 적재할 수 있게 된다.
제네릭의 사용 이유?
1. 타입 안정성 보장
→ 컴파일 시점에 타입 오류를 방지한다. 런타임 에러를 막을 수 있다는 점에서 큰 메리트가 있다.
→ 예: List<String>에는 문자열만 들어갈 수 있음.
2.형변환 생략 가능
→ Object로 처리할 필요 없어 형변환(casting)이 필요 없음.
아래의 예제 코드에서 Apple 배열을 FruitBox의 Object 배열 객체에 넣고, 배열 요소를 가져올때 반드시 다운 캐스팅(down casting)을 통해 가져와야 했다. 이는 곧 추가적인 오버헤드가 발생하는 것과 같다
Apple[] arr = { new Apple(), new Apple(), new Apple() };
FruitBox box = new FruitBox(arr);
// 가져온 타입이 Object 타입이기 때문에 일일히 다운캐스팅을 해야함 - 쓸데없는 성능 낭비
Apple apple1 = (Apple) box.getFruit(0);
Apple apple2 = (Apple) box.getFruit(1);
Apple apple3 = (Apple) box.getFruit(2);
반면 제네릭은 미리 타입을 지정 & 제한해 놓기 때문에 형 변환(Type Casting)의 번거로움을 줄일 수 있으며, 타입 겁사에 들어가는 메모리를 줄일 수 있고 더불어 가독성도 좋아진다.
// 미리 제네릭 타입 파라미터를 통해 형(type)을 지정해놓았기 때문에 별도의 형변환은 필요없다.
FruitBox<Apple> box = new FruitBox<>(arr);
Apple apple = box.getFruit(0);
Apple apple = box.getFruit(1);
Apple apple = box.getFruit(2);'JAVA' 카테고리의 다른 글
| JAVA 깊은 복제와 얕은 복제 (1) | 2025.04.28 |
|---|---|
| JAVA 어노테이션 (0) | 2025.04.28 |
| 자바 인터페이스 (6) | 2025.04.22 |
| 자바 오버로딩 , 오버라이딩 (2) | 2025.04.18 |
| 자바의 특성(장점) (2) | 2025.04.17 |