반응형

자바의 Generics(제네릭)이란 다양한 타입의 객체들을 타입체크 해주는 기능을 말한다.
객체들의 타입을 컴파일 시에 체크시키면서 객체의 타입의 안정성과 형변환의 번거로움을 덜어주고 코드들이 간결해진다.

 

제네릭을 알아보기 위해 Person 클래스를 작성해보자.

class Person{
    Object name;
    Object age;

    public void setName(Object name) { this.name = name; }
    public void setAge(Object age) { this.age = age; }
    Object getName(){return name;}
    Object getAge(){return age;}
}

제네릭을 적용하면 어떻게 바뀔까?

 

동일한 Person 클래스가 아래처럼 변경된다.

class Person<T>{
    T name;
    T age;

    public void setName(T name) { this.name = name; }
    public void setAge(T age) { this.age = age; }
    T getName(){return name;}
    T getAge(){return age;}
}

정의하는 클래스 옆에 <T>를 붙였고 Object 자료형을 모두 T로 변경했다.

 

Ttype variable(타입변수) 라고 부른다.

 

임의의 참조형 타입을 뜻하며, 다양한 리턴값이나 매개변수로 Object타입 등을 제공해야하는 하는 경우에 제네릭을 사용함으로써 사용과 동시에 타입을 지정만 해주면 된다.

 

사용은 어떻게 할까?

public static void main(String[] args) {
    Person<Object> p1 = new Person<Object>();
    p1.setAge(21);
    p1.setName("홍길동");

    System.out.println("이름은 " + p1.getName() + " 나이는 " + p1.getAge() + "살 입니다.");
}

결과

기존의 클래스 생성방식은 이미 타입이 지정이 되어 있었다면 제네릭 클래스는 객체를 생성할 때, 타입을 지정해준다.

제네릭 클래스라고해서 지정을 안해준다고 에러가 발생하지는 않지만 경고가 발생한다.

 

반응형