Generics(일반화) - 일반화(Generalization), 일반화 프로그래밍(Generic Programming), 제네릭의 필요성, 제네릭화의 이점

CODEDRAGON Development/Java

반응형

   

   

일반화(Generalization)

특수한 개념으로부터 공통된 개념을 찾아 묶는 것을 의미합니다.

 

 

일반화 프로그래밍(Generic Programming)

·       일반화 프로그래밍은 일반화(generalization)를 이용하는 프로그래밍 기법

·       데이터 형식(Data Type) 일반화(generalize)를 이용하는 프로그래밍 패러다임

 

 

 

♣제네릭(Generics)

·       JDK 1.5부터 도입된 기능입니다.

·       제네릭은 클래스를 정의 할 때는 데이터 타입을 확정하지 않고 인스턴스를 생성할 때 데이터 타입을 지정하는 방법을 의미합니다.

·       Generics컬렉션(자료구조) 또는 객체들을 저장(수집)하는 구조적인 성격을 제공합니다.

·       제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미

·       제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 나중에 인스턴스를 생성할 때(컴파일 할 때) 확정하는 것

·       제네릭은 코드를 간결하게 작성할 수 있는 기능이므로 꼭 기억해 두시기 바랍니다.

 

 

 

제네릭

컵이라는 특정 객체가 있습니다.

컵에는 마실 수 있는 음료수를 담을 수 있습니다.

컵은 물만 담을 수 있는 물컵, 또는 이 컵은 우유만 담을 수 있는 우유컵이라고 해서 이렇게 상징적으로 만든 것이 바로 Generics입니다.


   



 

class Cup<T>{}

Cup<> watercup = new Cup<>();

Cup<우유> milkcup = new Cup<우유>();

Cup<소주> sojucup = new Cup<소주>();

 

 

 

제네릭의 필요성

·       JDK5.0에 와서 Generics가 포함되면서 특정 컬렉션(자료구조)에 원하는 객체 타입을 명시하여 실행하기 전에 컴파일단계에서 지정된 객체가 아니면 절대 저장이 불가능하게 할 수 있습니다.

·       이전 버전까지는 반드시 실행하여 컬렉션(자료구조)에 있는 자원들을 하나씩 검출하여 확인할 수 밖에 없었습니다.

·       Object로부터 상속받은 객체는 모두 저장이 가능했던 이전의 버전들과는 달리 제네릭을 사용하면 보다 체계적으로 저장 할 수 있습니다.

·       실행 시 자원 검출을 하게 되면 별도의 형 변환(Casting)이 필요 없이 <>사이에 선언하였던 객체자료형으로 검출되어 편리합니다.

·       제네릭을 이용하면 템플릿 형태의 클래스를 제작할 수 있어 코드가 간결해지고 일관성 있는 코드를 작성할 수 있습니다.

·       클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습니다.

·       반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다.

·       제네릭은 자바의 고급 프로그래밍을 위해 중요한 문법입니다.

 

 

 

 

제네릭화의 이점

·       컴파일 단계에서 오류가 검출됩니다. (인스턴스 생성시 결정된 T의 자료형에 일치하지 않으면 컴파일 에러가 발생 하므로 자료형에 안전합니다.)

·       중복의 제거와 타입 안전성을 동시에 추구할 수 있게 됩니다.