본문 바로가기

JAVA/Java2021-2

제네릭(Generic) -Collections 프레임워크에 많이 사용된다.

제네릭(Generic)

: 클래스에서 사용하는 변수의 자료형이 여러 개 일 수 있고, 그 메서드가 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정할 수 있도록 선언

: 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식이다.

 (자료형 매개변수 T 이용) : 제네릭 자료형

<> 다이아몬드 연산자.

 

plastic.java

package Basic_Grammar.chap4.ch06Generic.Test01;

public class Plastic {

    public String toString(){
        return "재료가 Plastic 입니다.";
    }
}

powder.java

package Basic_Grammar.chap4.ch06Generic.Test01;

public class Powder {

    public String toString(){
        return "재료가 Powder 입니다.";
    }
}

ex1) 3D 프린터 : 제네릭 없이

package Basic_Grammar.chap4.ch06Generic.Test01;

public class ThreeDPrinterTest {
//    Object 타입을 이용하여 쓸 수 있다.
    public static void main(String[] args) {
        Powder powder=new Powder();
        ThreeDPrinter_Object printer=new ThreeDPrinter_Object();

        printer.setMaterial(powder);

//      But, (클래스타입)으로 형변환을 무조건 해줘야하는 불편함이 있다.
        Powder p=(Powder) printer.getMaterial();
    }
}

 

ex2) 제네릭 이용 (자료형 매개변수 T 이용) 

package Basic_Grammar.chap4.ch06Generic.Test01;

public class GenericPrinter<T> {
    private T material;

    public T getMaterial() {
        return material;
    }

    public void setMaterial(T material) {
        this.material = material;
    }

    @Override
    public String toString() {
        return "GenericPrinter{" +
                "material=" + material +
                '}';
    }
}
package Basic_Grammar.chap4.ch06Generic.Test01;

public class GenericPrinterTest {
    public static void main(String[] args) {
        GenericPrinter<Powder> powderGenericPrinter=new GenericPrinter<>();
        Powder powder=new Powder();
        powderGenericPrinter.setMaterial(powder);

//        Object 이용했을 때는 형변환을 해줘야했는데, Generic을 이용하여 PowderGenericPrinter를 구현하였기 때문에 따로 형변환 안한다.
        Powder p=powderGenericPrinter.getMaterial();
        System.out.println(p.toString());
    }
}