JAVA chapter13. 제네릭. 13.1 왜 제네릭을 사용해야 되는가? 13.2 제네릭 타입(class<T>, interface<T>)
JAVA/CONCEPT 2017. 11. 30. 18:58 |chapter13. 제네릭.
13.1 왜 제네릭을 사용해야 되는가?
* 제네릭(Generic)이란
// 타입을 파라미터화해서 컴파일시 구체적인 타입이 결정되도록 하는 것
// 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거 할 수 있게 되었다.
// 자바5부터 새로 추가된 기능이다.
// 컬렉션, 람다식(함수적 인터페이스), 스트림, NIO에서 널리 사용된다
// 제네릭을 모르면 API 도큐먼트를 해석할 수 없다 (API 도큐먼트를 보면 제네릭 표현이 많기 때문에)
* 제네릭을 사용하므로서 얻는 이점
// 컴파일시 강한 타입 체크를 할 수 있다.
// 실행시 타입 에러가 나는 것보다는 컴파일시에 미리 타입을 강하게 체크해서 에러를 사전에 방지한다
- 타입변환을 제거할 수 있다. (불필요한 타입 변환은 프로그램 성능에 악영향을 미침)
13.2 제네릭 타입(class<T>, interface<T>)
- 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.
// 선언시 클래스 또는 인터페이스 이름 뒤에 "<>" 부호가 붙는다
// "<>"사이에는 타입 파라미터가 위치한다
- 타입 파라미터
// 일반적으로 대문자 알파벳 한문자로 표현한다
// 개발 코드에서는 타입 파라미터 자리에 구체적인 타입을 지정해야 한다
- 제네릭 타입을 사용할 경우의 효과
// 비제네릭
: Object 타입을 사용하므로서, 빈번한 타입 변환 발생 -> 성능 저하
비제네릭 타입 이용 // 실행클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package sec02.exam01_none_generic_type; public class BoxExample { public static void main(String[] args) { Box box = new Box(); box.set("홍길동"); //String->Object(자동변환) String name = (String) box.get();//Object->String(강제변환) box.set(new Apple()); // Apple -> Object(자동변환) Apple apple = (Apple) box.get(); // Object->Apple(강제변환) } } | cs |
Box 클래스
1 2 3 4 5 6 7 8 9 10 11 | package sec02.exam01_none_generic_type; public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } } | cs |
Apple 클래스
1 2 3 4 5 | package sec02.exam01_none_generic_type; public class Apple { } | cs |
* 제네릭
// 클래스를 선언할 때 타입 파라미터 기술
// 컴파일시 타입 파라미터가 구체적인 클래스로 변경됨
제네릭 타입 이용 // 실행 클래스
| Box 클래스
|
'JAVA > CONCEPT' 카테고리의 다른 글
JAVA chapter13. 제네릭. 13.4 제네릭 메소드(<T,R> R method(T t)) (0) | 2017.11.30 |
---|---|
JAVA chapter13. 제네릭. 13.3 멀티 타입 파라미터(class<K,V,...>, interface<K,V,...>) (0) | 2017.11.30 |
JAVA chapter12. 멀티 스레드. 12.9 스레드풀 // 추가하기 (0) | 2017.11.30 |
JAVA chapter12. 멀티 스레드. 12.8 스레드 그룹 (0) | 2017.11.29 |
JAVA chapter12. 멀티 스레드. 12.7 데몬 스레드 (0) | 2017.11.29 |