제네릭은 자바 기본과 객체 지향(4) 에서 잠깐 언급한 적이 있다. 간단하게 복습해보자면 다음과 같다.
- Primitive Type은 Generic Type에 사용 불가하다.
- Reference Type은 Generic Type에 사용 가능하다.
Generic이 무엇이길래 그럴까? 이번에 알아보자.
Generics
Java에서 Generics는 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 객체별로 다른 타입의 자료가 저장될 수 있도록 한다.
- 컬렉션 클래스나 메소드에서 사용할 내부 데이터 타입(type)을 파라미터(parameter) 주듯이 외부에서 지정하는 타입을 변수화 한 기능이다.
ArrayList<String> list = new ArrayList<>();
위의 코드 처럼 <> 괄호가 제네릭이다. <> 안에는 타입명을 기재한다. 그러면 해당 타입명만 다룰 수 있다.
- <> 괄호는 다이아몬드 연산자라고도 한다.
- <> 안에 식별자 기호를 지정함으로써 파라미터화 할 수 있다. 그리고 이를 마치 메소드가 매개변수를 받아 사용하는 것과 비슷하다고 하여 제네릭 타입 매개 변수 / 타입 변수라고 부른다.
- T 식별자 기호가 클래스 필드와, 메소드의 매개변수의 타입을 지정하는데 사용된다. (<T> 이런식으로 사용)
제네릭 타입 전파
구체화라고도 한다.
타입 파라미터 할당 가능 타입
위에서 미리 보았듯이, 제네릭에서 할당 받을 수 있는 타입은 Reference 타입이다. int, double 과 같은 Primitive 타입은 사용할 수 없는데, 이를 위해서 Wrapper 클래스인 Integer, Double 클래스가 사용된다.
그럼 Generic을 왜 사용할까?
Generic 사용 이유
- 컴파일 타임에 타입 검사를 통해 예외를 방지 : 만약, Object 타입이라면 특정 타입으로 사용하기 위해 타입 캐스팅이 필요하다. 이때 잘못된 타입 캐스팅을 방지할 수 있다.
- 불필요한 캐스팅을 없애 성능 향상 : 위 처럼 Object일 때 특정 타입으로 사용하기 위한 타입 캐스팅을 생략할 수 있다.
+) 더 알아보기 : Generic 사용 시 주의 사항
더보기
- 제네릭 타입 자체로 타입의 지정하여 객체를 생성하는 것은 불가능하다. (new 연산자 뒤에 제네릭 타입 파라미터가 올 수 없다.)
- static 멤버에 제네릭 타입이 올 수 없다. (static 변수의 데이터 타입으로 제네릭 타입 파라미터가 올 수 없다. - static 멤버는 클래스가 동일하게 공유하는 변수로 제네릭 객채가 생성되기 때문에 이미 자료 타입이 정해져 있어야 하기 때문(논리적 오류))
- 제네릭 클래스 자체를 배열(ex. new ArrayList<T>[10])로 만들 수 없다. (제네릭 타입의 배열 선언은 허용 - 명시적 캐스팅 필요 | ex. List<Integer>[] = new ArrayList[10];)
참조 1
'개발 > Java' 카테고리의 다른 글
자바 기본 - 어노테이션과 리플렉션 (0) | 2024.11.07 |
---|---|
자바 기본 - 람다와 스트림 (0) | 2024.11.07 |
자바 기본 - 예외 (2) | 2024.11.06 |
자바 기본 - 문자열 (0) | 2024.11.05 |
자바 기본과 객체 지향 (5) - 다형성과 상속, 추상화 (1) | 2024.10.31 |