제네릭(Generic)

kmb·2022년 5월 18일
0

자바

목록 보기
17/31
post-thumbnail

제네릭(Generic)

--> 어떤 객체를 만들때 타입이 정해져 있지않을때 여러 타입을 가질수 있도록 지정 할 수 있다.
Object 대신 제네릭을 쓰면 편하다. (다운캐스팅을 하지 않아도 되기 때문에)

class 호랑이 {
    String name = "호랑이";
}

class 사자 {
    String name = "사자";
}

class 큰바구니<T> {
    T data;
}

public class GenericEx02 {

    public static void main(String[] args) {
        큰바구니<호랑이> s1 = new 큰바구니<>();
        s1.data = new 호랑이();
        System.out.println(s1.data.name);  // 호랑이

        큰바구니<사자> s2 = new 큰바구니<>();
        s2.data = new 사자();
        System.out.println(s2.data.name); // 사자
    }
}

이때 <?> 는 <? extends Object> 의미와 같다.
또한 <> 내부에는 기본자료형(값)은 들어갈 수 없고 레퍼런스자료형(주소)만 들어갈 수 있다.

abstract class{
    abstract String getName();
}

class 농구공 extends{
    private String name = "농구공";

    public String getName() {  // 자식이 부모의 메서드와 동일한것을 같고있으면
        return name;           // 부모의 메서드가 오버라이드(무효화) 된다.
    }

    public void setName(String name) {
        this.name = name;
    }
}

class 축구공 extends{
    private String name = "축구공";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class 가방<T> {
    private T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

public class GenericEx03 {

    static 가방<? extends> 꺼내기(int time) {
        if(time==9) {
            축구공 s1 = new 축구공();
            가방<축구공> g2 = new 가방<>();
            g2.setData(s1);

            return g2;

        }else {
            농구공 b1 = new 농구공();
            가방<농구공> g1 = new 가방<>();
            g1.setData(b1);

            return g1;
        }
    }

	// 다형성, Object, 추상클래스, 오버라이드(무효화), 동적바인딩 개념 이해 필요
    public static void main(String[] args) {
        가방<? extends> r1 = 꺼내기(9);
        가방<? extends> r2 = 꺼내기(12);

        System.out.println(r1.getData().getName());  // 축구공
        System.out.println(r2.getData().getName());  // 농구공
    }
}

출처

  • 이지업 컨텐츠 내의 데어프로그래밍 자바강의
profile
꾸준하게

0개의 댓글