본문 바로가기

Backend/Java

제네릭 (Generic)

제네릭 (Generic) 

  • 클래스(인터페이스)나 메서드를 타입 파라미터를 이용하여 선언하는 기법
  • public class 클래스명<T> { …. }
  • public interface 인터페이스명<T>  { … }
  • 클래스 설계 시에 타입 <T>는 아직 결정되지 않았음
  • 클래스 내부에서 사용할 데이터 타입을 클래스 외부에서 지정
  • 모든 종류의 타입을 다룰 수 있음
  • 선언 시 클래스 또는 인터페이스 이름 뒤에 <> 붙임 (다이아몬드 연산자)
  • <> 사이에 타입 파라미터 위치
  • <>에는 기본 데이터 타입은 올 수 없음 (Wrapper 클래스 사용)   ex) <int> 불가능, <Integer> 가능

 

Wrapper 클래스

  • 기본 데이터 타입에 대응되는 클래스
  • 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스
  • 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어 줌
  •  java.lang 패키지에 포함되어 제공
기본 타입 래퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

타입 파라미터

일반적으로 대문자 알파벳 한 문자로 표현

  • E : Element
  • T : Type
  • V : Value
  • K : : Key

개발 코드에서는 타입 파라미터 자리에 구체적인 타입을 지정해야 함

ex) Gen<String> gen = new Gen<String>();

     Gen<Integer> gen = new Gen<String>();

 

제네릭을 사용하는 코드의 이점

  • 컴파일 시 강한 타입 체크 가능 -> 타입 에러 사전 방지
  • 강제 타입 변환 과정을 제거 가능 (프로그램 성능 향상)

 

제네릭을 하지 않을 경우

List list = new ArrayList();
list.add(“abc”);

String str = list.get(0); // Object 타입 반환

// -> String 타입으로 형 변환 해주어야 함
String str = (String) list.get(0); // 강제 타입 변환 발생

 

제네릭을 사용할 경우

List<String> list = new ArrayList<String>();
list.add(“abc”);

String str = list.get(0); // 강제 타입 변환 발생하지 않음

 

 

제네릭 요약

클래스 또는 인터페이스 설계 시, 구체적인 타입을 명시하지 않고 타입 파라미터로 대체

-> 실제 클래스가 사용될 때 구체적인 타입을 지정하여 타입 변환 최소화

-> 프로그램 성능 향상 + 에러 사전 방지 (컴파일 시 미리 타입을 강하게 체크)

'Backend > Java' 카테고리의 다른 글

ArrayList에 DTO 객체 저장  (0) 2021.11.30
컬렉션 프레임워크(Collection Framework)  (0) 2021.11.30
DTO DAO 구현 예제  (0) 2021.11.26
JDBC 연동 구현 예제  (0) 2021.11.26
Statement VS PreparedStatement  (0) 2021.11.26