상세 컨텐츠

본문 제목

Generics:제네릭스에 대하여 스터디 #1

개발

by 동동주1123 2013. 10. 23. 21:46

본문

Generics 이란?

1. 주로 Collection 에서 많이 사용된다,

2. Collection은 어떤타입을 담을지 알수 없으므로 Object로 저장되고 관리된다.

3. Type의 안정성을 제공

4. 타입체크와 형변환을 생략 하여 코드가 간결 해짐

5. 반드시 객체 타입이 사용되어야 한다

int , string (X) : 기본 자료형

Integer , String (o) : 객체 타입


기본자료형을 객체화 시킨 Wrapper Class를 사용해야 한다.

6. 다형성 사용가능


public class TestGenericsExtends {

 

    public static void main(String[] args) {

         

        // product클래스의 자손객체들을 저장할 있는 ArrayList 생성

        ArrayList<Product> list = new ArrayList<Product>();

        list.add(new Product());

        list.add(new Vcr());

        list.add(new Audio());

         

        Product p = list.get(0);

        Vcr v = (Vcr)list.get(1);

    }

}

 

class Product{};

class Vcr extends Product{};

class Audio extends Product{};


자식 객체를 사용할 수 있으나 꺼낼때는 원래의 형으로 형변환을 해야 한다.


Vcr v = (Vcr)list.get(1);


매개변수 형으로 선언 된경우는 하위 객체를 사용할 수 없다


public class TestGenericsEx01 {

 

    public static void main(String[] args) {

        ArrayList<Product> pArrayList = new ArrayList<Product>();

        ArrayList<Vcr> vArrayList = new ArrayList<Vcr>();

         

        printAll(pArrayList);

        printAll(vArrayList); // 컴파일 에러!!!!!

    }

     

    public static void printAll(ArrayList<product> list){

        for(Product p : list){

            System.out.println(p);

        }

    }

}


매개변수의 다형성을 이용하려면 와일드카드 <?>를 사용한다

하나이상의 타입을 사용할 수 있게 해준다


(ArrayList<? extends Product> list) 

-interface를 받더라도 extends를 사용한다





문제

1. Collection에 의도하지 않는 자료형이 담긴다면 어떻게 될까?

: 오류가 발생하지만 컴파일 단계가 아닌 런타임시에 발견된다.


해결

1. 제네릭 타입을 이용하면 개발자가 원하는 객체의 타입을 명시하므로 잘못된 타입이 저장된다면 

    오류가 나지 않는 해결 방법이 아니라 컴파일 단계에서 오류를 확인 할 수 있게 된다.



Genetics Class 정의

1. 일반적인 클래스를 정의 하는것과 동일하나 다만 클래스명 뒤에 <Generic Type>을 정의 하게 된다


public class Box<T>{

private T t;


public void add(T t) {

this.t = t;

}



public T get() {

return t;

}


}


2. 선언/생성


Box<Integer> integerBox;

integerBox = new Box<Integer>();



참고 : http://arabiannight.tistory.com/63




'개발' 카테고리의 다른 글

instanceof 연산자  (0) 2013.10.23
postgreSQL 간단 사용  (0) 2013.06.18
윈도우8 프로모션 업그레이드 구입한뒤 윈도우 재설치 할때.  (0) 2013.01.20

관련글 더보기