프로그래밍 언어/Java 프로그래밍
Generic(제네릭)
by Hyeon_
2021. 11. 29.
제네릭(Generic)
- 클래스(인터페이스)나 메서드를 타입 파라미터를 이용하여 선언하는 기법
pubilc class 클래스명<T> {....}
public interface 인터페이스명<T> {...}
classGen<T> {
private T value;
}
- 클래스 설계 시에 타입
<T>
는 아직 결정되지 않음
- ㅗㅁ든 종류의 타입을 다룰 수 있음
- 선언 시 클래스 또는 인터페이스 이름 뒤에 <>을 붙임 (다이아몬드 연산자 < >)
- < > 사이에 타입 파라미터 위치:
<T>
타입 파라미터
- 일반적으로 대문자 알파벳 한 문자로 표현
- E : Element
- T: Type
- V: Value
- K: Ket
- 개발 코드에서는 타입 파라미터 자리에 구체적인 타입을 지정해야 함
Gen<String> gen = new Gen<String>();
Gen<Integer> gen = new Gen<Integer>();
- 클래스 내부에서 사용할 데이터 타입을 클래스 외부에서 지정
- 주의!
- <>에는 기본 데이터 타입은 올 수 없음
- <int> : X
- <Integer>: O
- Wrapper 클래스 사용
- 기본 데이터 타입에 대응되는 클래스
- 기본 데이터 타입을 객체로 포장
제네릭을 사용하는 코드의 이점
- 컴파일 시 강한 타입 체크 가능
- 실행 시 타입 에러가 나는 것 방지
- 컴파일 시 미리 타입을 강하게 체크해서 에러를 사전에 방지
- 강제 형 변환 과정을 제거 가능(프로그램 성능 향상)
제네릭을 하지 않을 경우
List list = new ArrayList();
list.add("abc");
String str = (String)list.get(0); // Object 타입 반환 -> String으로 변환 필요
제네릭을 사용할 경우
- 강제 형 변환 필요 X -> 프로그램 성능 향상
List<String> list = new ArrayList<String>();
list.add("abc");
String str = list.get(0);
제네릭 Vs. 오버라이드 메소드
- 제네릭: 컴파일 시 타입 결정
- 오버라이드 메소드: 실행 시 결정 (동적 다형성 이용)
제네릭 정리
- 제네릭은 클래스나 인터페이스를 설계할 때 구체적인 타입을 명시하지 않고 타입 파라미터로 대체
- 실제 클래스가 사용될 때 구체적인 타입을 지정하여 타입 변환을 최소화시킴으로서 프로그램 성능을 향상 시킬 수 있음
- 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지하기 위한 방법