Programming/Java
제네릭
Boxya
2025. 4. 30. 21:01
[KT] AIVLE SCHOOL 26일
제네릭(Generics)
- 정의와 종류
- 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
- 데이터 타입(Data Type)을 일반화(Generalize)하는 것을 의미
- 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 저장하는 방법
- 제네릭 사용시에 클래스나 메소드 내부에 사용되는 객체의 타입 안정성 향상
- 반환 값에 대한 타입 변환 및 타입 검사에 들어가는 비용 절감
- 사용 방법
- public class 클래스명<T> {...}
- public interfce 인터페이스명<T> {...}
- 제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스
- 제네릭 타입은 클래스 또는 인터페이스 이름 뒤에 < > 부호가 붙고 사이에 타입 파라미터가 위치
- 자주 쓰는 타입
- T : 타입(Type)을 나타냄. 일반적으로 클래스나 인터페이스에서 타입 매개변수로 사용됨
- E : 요소(Element)를 나타냄. 주로 컬렉션에서 사용되는 항목의 타입을 지정할 때 사용함
- K : 키(Key)를 나타냄. 맵(Map) 같은 자료구조에서 키의 타입을 지정할 때 사용됨
- V : 값(Value)을 나타냄. 맵(Map)에서 값의 타입을 지정할 때 사용됨
- N : 숫자(Number)를 나타냄. 숫자 타입의 제한을 두고 싶을 때 사용함
- 제네릭 클래스
- 클래스를 설계할 때 구체적인 타입을 명시하지 않고 타입 파라미터로 넣어두었다가 실제 설계한 클래스가 사용될 때
- ExClassGeneric<String> exGeneric = new ExClassGeneric<>();
- 위 형태로 구체적인 타입을 지정하면서 사용하면 타입 변환을 최소화 시킬 수 있음
- 클래스처럼 제네릭으로 설정해두고 활용 가능
- 멀티 타입 파라미터
- 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있고 이 경우 각 타입 파라미터를 콤마로 구분
- 제네릭 메소드
- 리턴 타입을 정의하기 전에 제네릭 타입에 대한 정의를 반드시 명시
- 제네릭 클래스가 아닌 일반 클래스 내부에도 제네릭 메서드를 정의
- 클래스에 지정된 타입 파라미터와 제네릭 메서드에 정의된 타입 파라미터는 관계 없음
- 즉, 제네릭 클래스에 <T>를 사용하고 같은 클래스의 제네릭 메서드에도 <T>로 같은 이름을 가진 타입 파라미터를 사용하더라도 둘을 전혀 관계 없음
- 제네릭 와일드 카드
- 와일드카드 타입에는 총 세가지의 형태가 있으며 물음표(?)라는 키워드로 표현
- 제네릭 타입<?> : 타입 파라미터를 대치하는 것으로 모든 클래스나 인터페이스 타입 가능
- 제네릭 타입<? extends 상위타입> : 와일드카드의 범위를 특정 객체의 하위 클래스만 가능
- 제네릭 타입<? super 하위타입> : 와일드카드의 범위를 특정 객체의 상위 클래스 가능