제네릭 Generic


- C++에서 아이디어를 가지고 온 문법

- C++에는 Template이라는 문법이 있다.

- 기능은 똑같지만 DataType별로 따로 만들어야 할 때가 있다.

   Datatype에 상관없이 Template을 이용하여 사용 할 수 있었다.

- java API에서 문서 제목에 <> 표시가 없는 것은 제네릭으로 쓸 수 없다.


1. 용도

1) 특정타입을(객체형)을 미리 검사

    - 실수 할 수 있는 데이터타입을  미리 방지한다.

    - 기본 데이터 타입을 쓸 수 없기 때문에 Wrapper 클래스를 쓴다. 예) 정수형은 Integer

2) C++의 Tempalate과 유사한 용도


2. 문법

1) Generic클래스로 만들때


class 클래스명<이름>{    

}

 

- 데이터 타입의 값을 비워두고 들어오는 데이터에 따라서 값을 결정한다.

- 값 대신에 이름을 임의로 지정하는데 개발자들은 c++ Template의 오마주로 T라고 주로 쓴다.


2) 사용 할 때

클래스명 변수명 = new 클래스명();                                                        //인스턴스 만드는 문법

클래스명<객체형 데이터타입> 변수명 = new 클래스명<객체형 데이터타입>(); //제네릭 인스턴스 만드는 문법




null 

- 현재 가리키고 있는 주소값이 없다. 

- 참조하고 있는 주소가 없다. 

- 인스턴스가 없다.


향상된 for문

배열이나 컬렉션만 쓸 수 있는 for문



for(변수 : ?){

}



데이터 개수만큼 하나씩 꺼내서 변수에 옮겨 담는다.

제네릭이나 컬렉션에서 데이터 타입이 달라서 

어렵다면 변수의 데이터타입을 Object로 한다.



package prjUtil;

import java.util.Vector;

public class GenericTest1 {

    public static void main(String[] args) {

        

   //Vector<String> v = new Vector()<String>;    

   // Java 7이상 버전에서만 앞에 제네릭을 선언했으면 뒤에는 생략가능하다.

   Vector<String> v = new Vector(); 


   //이 클래스를 String형식만 사용하겠다고 제네릭으로 선언하면 다른 형식을 찾아 검사해준다.

        v.add("hello");

        v.add("world");

        v.add("홍길동");

        // v.add(100); 다른 형식을 제네릭이 찾아 검사해준다.

        

        /*

        String str = null;                     //null : 현재 가리키고 있는 주소값이 없다. 인스턴스가 없다.

        for(int i=0; i<v.size(); i++) {

            str = (String)v.get(i);            //Object형 어떤 값이든 꺼내올 수 있다. 자식의 값으로 캐스팅 해줘야한다.

            System.out.println(str);         //스트링으로 출력하기 때문에

        }

        */

        

        for(String str : v) {                   //향상된 for문을 쓸 수 있다. (취향차이)

            System.out.println(str);

        }

        

    }

}


※ 결과값

hello

world

홍길동



제네릭은 데이터 타입의 값을 비워두고 들어오는 데이터에 따라서 값을 결정할 수 있다

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

[java] 입력과 출력 IO (Input Output)  (0) 2017.10.30
[java] 예외처리(Exception)  (0) 2017.10.30
[java] 컬렉션 Collection  (0) 2017.10.28
[java] java.util 패키지를 알아보자.  (0) 2017.10.27
[java] 인터페이스(InterFace)  (0) 2017.10.26

+ Recent posts