Java/java

java :) generic class의 이해

euncheol kim 2022. 3. 13. 22:35

goal

Generic class를 이해한다.

 

1. Generic class

  • generic은 data type을 일반화할 때 사용한다.
  • generic은 class나 method에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.
  • 컴파일시에 미리 타입 검사(type check)를 수행하면 아래와 같은 이점을 가진다.
    • 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다.
    • 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.
class MyArray <T> {
    T element;
    void setElement(T element){ this.element = element; }
    T getElement() { return this.element; }
}
  • T를 Type Variable이라고 하며, 임의의 참조형 타입을 의미한다.
  • T는 쉼표(,)로 구분하여 여러개 명시가 가능하다.
  • Type Variable은 클래스에서뿐만 아니라 메소드의 매개변수나 반환값으로 사용할 수 있다.
  • Generic class 생성시 타입 변수 자리에 사용할 실제 타입을 명시해야한다.
    • MyArray<Integer> myArr = new MyArray<Integer>();
      MyArray<Integer> myArr = new MyArray<>();
    • MyArray myArr = new MyArray<>(); 경우 JDK 1.7이상부터 지원

 

1. generic class 코드 예제

import java.util.ArrayList;

class LandAnimal{
    public void crying() {
        System.out.println("어떤 동물의 울음소리일까?");
    }
}
class Cat extends LandAnimal{
    public void crying() {
        System.out.println("멍멍");
    }
}
class Dog extends LandAnimal{
    public void crying() {
        System.out.println("야옹야옹");
    }
}

class AnimalList <T> {
    ArrayList<T> al = new ArrayList<T>();

    void add(T animal) { al.add(animal); }
    T get(int index) { return al.get(index); }
    boolean remove(T animal) { return al.remove(animal);}
    int size() { return al.size(); }
}

public class generic01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AnimalList<LandAnimal> landAnimal = new AnimalList<LandAnimal>();

        landAnimal.add(new LandAnimal());
        landAnimal.add(new Cat());
        landAnimal.add(new Dog());

        for (int i=0; i < landAnimal.size(); i++) {
            landAnimal.get(i).crying();
        }


    }

}

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

java :) interface와 abstract의 공통점과 차이점  (0) 2022.04.22
java :) generic method  (0) 2022.03.14
java :) clone()메소드( + interface Cloneable)  (0) 2022.03.13
java :) interface  (0) 2022.03.13
java :) 20220311 java 복습  (0) 2022.03.11