'java generic'에 해당되는 글 2건

  1. 2010.08.12 JAVA Generic 예제
  2. 2010.08.12 JAVA Generic
JAVA2010. 8. 12. 17:12

class Generic {

    T[] i;

    public void set(T[] str) {
        i = str;
    }

 
    public void disp() {
        for(T msg:i) {
            System.out.println(msg);
        }
    }
}

class Generic_Main {

    public static void main(String [] args ) {

        Generic g = new Generic();

        String []str = {"땅","물","바람","불","마음"};
        g.set(str);
        g.disp();
 
        Generic g2 = new Generic();
        Integer[] arr = {10,20,30,40,50};
        g2.set(arr);
        g2.disp();

        Generic g3 = new Generic();
        Double[] dd= {98.7,107.7,108.9,124.5,169.7};
        g3.set(dd);
        g3.disp();
    }
}

'JAVA' 카테고리의 다른 글

10진수 2진수,8진수 변환  (0) 2010.09.09
java systeminfo파일로 정보읽기  (0) 2010.09.08
JAVA 시스템 환경읽어오기  (0) 2010.09.08
JAVA 향상된 For문  (0) 2010.08.12
JAVA Generic  (0) 2010.08.12
Posted by 달빛낙엽
JAVA2010. 8. 12. 10:51

이 글은 http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf 에 대한 손을 좀 본 번역본입니다. 손을 봤다는 게 직역하지 않고, 뺄 거는 빼고 더할 거는 더하고 풀어 쓸 거는 풀어 쓰고 했단 소립니다. 사실 원본이 말이 쓸데없이 많아서 많이 짤라냈습니다.


자바 1.5에서는 자바 언어에 대한 몇가지 확장 기능이 추가되었다. 그 중 하나가 Generics이다.
이 글은 generics를 소개하기 위한 글이다. C++의 템플릿과 같은 다른 언어와 비슷하다.
Generics는 타입에 대한 추상성을 제공한다. Collection에서 쓰이는 컨테이너 타입이 가장 일반적인 예가 될 것이다.
예전에 작성하던 일반적인 코드는 다음과 같다.

List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next(); // 3


3번째 줄에서 캐스팅을 하는 것은 다소 번거롭다. 대개의 경우 프로그래머는 어떤 리스트에 어떤 타입의 데이터가 들어갈 것인지 알고 있지만, 캐스팅은 필수적인 작업이다. 컴파일러는 iterator에 의해 Object 가 리턴될 것이라는 것까지 밖에 보장하지 못한다. Integer 타입이란 것을 명확히 하기 위해서는 캐스팅을 할 수 밖에 없다. 물론, 캐스팅 작업은 프로그램을 난잡하게할 뿐만 아니라, 런타임 에러의 가능성을 발생시킨다.
만약 프로그래머가 만들고자 하던 의도대로 리스트에 특정한 타입만 들어갈 수 있도록 강제할 수 있다면 얼마나 좋겠는가! 이것이 바로 generics의 핵심 아이디어다. generics를 이용한 프로그램의 예는 다음과 같다.


List<Integer> myIntList = new LinkedList<Integer>(); // 1’
myIntList.add(new Integer(0)); //2’
Integer x = myIntList.iterator().next(); // 3’



myIniList 변수에 타입에 대한 정의를 했다는 것이 중요하다. List<Integer>라고 명확하게 적어줌으로써 이 인스턴스가 아무 타입이나 들어갈 수 있는 리스트가 아니라 Integer 리스트라는 것을 명확하게 한다. 이런 경우 List는 타입인자(예제의 경우는 Integer)를 받는 generic 인터페이스라한다. list 객체를 생성하는 시점에 타입인자를 명확히 해준다.
또 한가지 주의할 점은 3'에서 보는 것과 같이 타입 캐스팅이 사라졌다는 것이다.
3번째 줄에서 타입 캐스팅을 하는 대신 1'에서 타입 파라미터로 Integer를 설정해 줌으로 인해 프로그램이 한결 간결해졌다. 매우 중요한 차이는 컴파일러가 이제 타입을 체크할 수 있기 때문에 인자의 정확성을 컴파일 타임에 알 수 있게 되었다는 것이다. myIntList가 List<Integer>로 정의되었을 경우 그게 언제 어디서 쓰이던 타입 안정성에 대해 컴파일러로 부터 보장받을 수 있다. 즉, 타입이 명확하지 않으면, 컴파일이 되지 않는다. 또한 이렇게 코딩함으로 개발자는 그 인스턴스에 들어가는 타입을 더 직관적으로 알 수 있다.


출처 : 삼실청년(http://iilii.egloos.com)


'JAVA' 카테고리의 다른 글

10진수 2진수,8진수 변환  (0) 2010.09.09
java systeminfo파일로 정보읽기  (0) 2010.09.08
JAVA 시스템 환경읽어오기  (0) 2010.09.08
JAVA Generic 예제  (0) 2010.08.12
JAVA 향상된 For문  (0) 2010.08.12
Posted by 달빛낙엽