특집   기말시험 완전정복

이해가 어려운 내용 중 하나인 제네릭(교재 5장)에 관해 알기 쉽게 정리했다. 아래 나오는 예제를 꼭 이해하도록 한다. 제네릭원소가 정수인 배열을 정렬하는 메서드를 작성해야 한다고 하자. 그런데 문자열 배열도 있고 대소 구별이 가능한 다른 유형의 배열도 정렬이 필요하면 어떻게 해야 할까? 제네릭 개념을 이용하면 한 개의 제네릭 메서드만 작성하면 된다. 즉, Integer, Double, String 등의 자료형 중 원하는 하나를 밝히고 제네릭 메서드를 호출하면, 해당 타입의 배열을 정렬하는 코드를 호출하여 원소들을 정렬시킬 수 있다. 결과적으로 제네릭 메서드 하나만 잘 작성하면 여러 자료형의 데이터에 적용되는 ‘메서드 집합을 정의’하는 효과가 있다. 클래스의 경우에도 마찬가지로 하나의 제네릭 클래스를 잘 정의한다면 ‘동종의 여러 클래스를 정의’하는 효과가 생긴다.  제네릭 메서드제네릭 메서드는 타입 매개변수를 가진다. 이 메서드를 호출하려면 타입 매개변수에 전달될 타입 인자(실제 자료형)를 밝혀야 한다. 즉, 제네릭 메서드를 호출할 때, 가능한 자료형 중 하나를 선택해 호출할 수 있다. 컴파일러는 실제 자료형에 근거해, 정확히 어떤 메서드를 호출할지 결정한다. 제네릭 메서드 정의와 사용은 다음과 같이 한다. - 제네릭 메서드 정의에서 각 괄호 (< >) 안에 타입 매개변수를 표시한다. 각 괄호는 메서드 정의에서 반환형의 왼편에 위치한다.- 여러 개의 타입 매개변수가 필요하면 콤마(,)로 분리하여 표시한다.- 타입 매개변수로 타입, 원소, 숫자, 키, 값 등을 의미하는 T, E, N, K, V 등을 주로 사용한다.- 타입 매개변수는 메서드 정의에서 메서드의 매개변수나 반환값 및 지역변수의 자료형으로 사용된다. - 타입 매개변수는 임의 참조형을 표현하는 것이며 기본형이 될 수 없다.다음 예는 두 객체를 비교할 때, 객체의 유형과 상관없이 하나의 제네릭 메서드를 사용할 수 있음을 보인다. 단, 두 객체는 Comparable의 자식 유형이어야 한다. 일반 메서드public static int compare(Integer t1, Integer t2 ){        return t1.compareTo(t2);}public static int compare(String t1, String t2) {         return t1.compareTo(t2);}제네릭 메서드public static <T extends Comparable<T>> int compare(T t1, T t2) {        return t1.compareTo(t2);}메서드 호출System.out.println( compare(3,0));System.out.println( compare("b","a")); 제네릭 클래스제네릭 클래스는 타입 매개변수를 가지는 클래스이다. 제네릭 인터페이스도 가능하며 둘을 합쳐서 제네릭 타입이라고 통칭한다. 타입 매개변수는 임의의 참조형을 의미하며 클래스를 정의할 때 각 괄호 안에 표시하고, 클래스 이름의 오른편에 위치시키며, 필드의 자료형, 지역 변수의 자료형, 메서드의 매개변수나 반환 값의 자료형으로 사용된다. 다음 예는 제네릭 클래스를 사용하면 컴파일 타임에서 오류를 발견할 수 있음을 보인다.  일반 클래스public class Data {    private Object object;    public void set(Object object) { this.object = object; }    public Object get() { return object; '>
Data d = new Data();

0좋아요 URL복사 공유
현재 댓글 0
댓글쓰기
0/300

사람과 삶

영상으로 보는 KNOU

  • banner01
  • banner01
  • banner01
  • banner01