Generic :
클래스 내부에서 사용할 데이터 타입을 외부에서 지정.
Generic 사용 이점
- 컴파일시 강한 타입 체크를 할 수 있다. (실행시 타입 에러가 나는 것보다는 컴파일시에 미리 타입을
체크해서 에러를 사전에 방지한다. )
- 타입 변환을 제거할 수 있다.
비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다.
list.add("aaa");
String str = (String) list.get(0); //타입변환.
List<String> list = new ArrayList<String>();
list.add("aaa");
String str = list.get(0); //타입 변환을 하지 않는다.
-----------------------------------------------------------------------------------------------------------------------
Generic 타입이란.
타입을 파라미터로 가지는 클래스와 인터페이스를 말한다. class<T>, interface<T>
비제네릭
- Object 타입을 사용하므로서 빈번한 타입 변환 발생 ( 성능저하)
Object타입을 사용하면, 모든 종류의 자바 객체를 저장할 수 있다는 장점은 있지만, 저장할 때 타입 변환이 발생하고 , 읽어올 때에도 타입 변환이 발생한다.
모든 종류의 객체를 저장하면서 타입 변환이 발생하지 않도록 하는 것을 제네릭에서 찾을 수 있다.
[출처] 제네릭(Generic) 표현에 대해서 알기! |작성자 IT 강사
[출처] 제네릭(Generic)|작성자 쭝
[출처] 제네릭(Generic)|작성자 쭝
[출처] 제네릭(Generic)|작성자 쭝
-generic에서는 Primitive 타입은 사용할 수가 없다. 때문에 Reference 타입인 Integer를 사용한다.
ex)
[출처] [JAVA] Generic(제네릭)[0], generic의 사용법|작성자 once
public Class GenericSample {
public static void main(String[] args){
Sample<String> eg = new Sample<String>();
Sample<Integer> eg2 = new Sample(); //참고로 위처럼 인스턴스를 만들어 줄 때 오른쪽의 항에 타입을 명시해 주지 않아도 문제없이 실행은 되지만 //이클립스에서 Type safety를 위해 Integer로 명시해 주라는 경고를 보냄
[출처] [JAVA] Generic(제네릭)[0], generic의 사용법|작성자 once
eg.info = "string";
eg2.info = 3;
Syste.out.println(eg.info);
Syste.out.println(eg2.info);
}
}
class Sample<T> {
public T info;
}
결과 : string
3
[출처] 제네릭(Generic1)|작성자 쭝
-generic 사용 예제1
이렇게 사용할것을 아래와 같이 사용할수 있다.
-generic 사용 예제2
//실제 아래 Map import해서 많이 사용함
import java.util.Map;
Map<String, Object> map = new HashMap<String, Object>();
map.put("string","안녕");
-generic 사용 예제3 Wildcard
Unbounded Wildcards
unbounded wildcard 타입은 List<?> 와 같이 물음표 만으로 정의 되어 진다(모든 타입을 인자로 받을 수 있다). 이 방법은 두 가지 유효한 사용법이 있다. 첫 번째는 Object 클래스에서 제공되는 기능만을 사용할 경우이고, 두 번째는 제네릭 클래스의 메소드들중에 List.size, List.clear처럼 타입 파라미터에 의존하지 않는 메소드들만을 사용할 경우이다.
[출처] [자바] 제네릭에서 와일드카드|작성자 미니
Upper Bounded Wildcards
위의 코드에서는 Number 클래스를 상속받는 어떠한 클래스(Integer, Double, 등)가 와도 됨
[출처] [JAVA] Generic(제네릭)[3], wildcard|작성자 once
Lower Bounded Wildcards
여기서는 Integer의 부모 클래스들(Number, Object, 등)을 사용할 수 있게 됨
[출처] [JAVA] Generic(제네릭)[3], wildcard|작성자 once
출처 | http://blog.naver.com/oos2/220621559667
http://blog.naver.com/harryandws/220612702094
'Java' 카테고리의 다른 글
[펌]Java Persistence API(JPA) (0) | 2016.03.16 |
---|---|
Reflection API (0) | 2016.03.08 |
Collection API (0) | 2016.03.08 |
Excel download & upload (1) | 2016.03.03 |
[error] The type BASE64Decoder is not accessible due to restriction on required library (0) | 2016.01.11 |