제네릭 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 |