Java 자바 제네릭(Generic)
# 제네릭(Generic)을 사용해야 하는 이유
첫 번째, 제네릭 타입을 사용하면 의도하지 않은 잘못된 타입이 사용될 수 있는 문제를 사전에 제거할 수 있습니다.
자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 타입체크를 합니다.
실행 시 타입 에러가 나는 것보다 컴파일 시 타입을 미리 체크하여 에러나는 것을 사전에 방지하기 위함입니다.
두 번째, 제네릭 코드를 사용하면 타입이 지정되기 때문에 요소를 찾아 참조를 할 때 등에 타입 변환을 할 필요가 없어 코드의 정리 및 프로그램 성능이 향상되는 효과가 있기 때문입니다.
제네릭을 사용하지 않은 경우
// 제네릭을 사용하지 않은 경우 타입변환이 필요함
ArrayList list = new ArrayList();
list.add("hello world");
String tmp = (String) list.get(0);
위 코드와 같이 제네릭을 사용하지 않은 경우는 String tmp에 list값을 참조할 때 형 변환이 필수적인 것을 볼 수 있습니다.
제네릭을 사용한 경우
// 제네릭을 사용한 경우는 타입변환이 필요하지 않습니다.
ArrayList<String> list = new ArrayList();
list.add("hello world");
String tmp = list.get(0);
이 처럼 제네릭을 사용한 경우는 String tmp = list.get(0);
처럼 형 변환이 필요하지 않습니다.
ArrayList<String> list
로 제네릭타입을 명시하였기 때문에 list.get(0)
은 String 타입으로 return 됩니다.
# 제네릭 (Generic) 사용 방법
제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말합니다. 제네릭 타입은 클래스 또는 인터페이스 이름 뒤에 < > 부호가 붙고 사이에 타입을 명시해 줍니다.
public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}
제네릭은 ArrayList 뿐만 아니라 Map, Set, List 등등 다양하게 사용될 수 있습니다.
아래 코드는 Map에 적용한 제네릭 예제입니다.
Map<String, Integer> numberMap = new HashMap<String, Integer>();
numberMap.put("one", 1);
numberMap.put("two", 2);
int one = numberMap.get("one");
int two = numberMap.get("two");
이도 마찬가지로 int one = numberMap.get("one");
를 형 변환 없이 int 타입으로 받을 수 있습니다.
이처럼 이클립스에서 Map<String, Integer>
로 제네릭을 명시하였더니 어시스트도 String key
, Integer value
라고 알려주는 모습을 볼 수 있습니다.
# 제네릭 와일드 카드
와일드카드 타입에는 총 세가지의 형태가 있으며 물음표(?)라는 키워드로 표현됩니다.
제네릭타입<?>
: 타입 파라미터를 대치하는 것으로 모든 클래스나 인터페이스타입이 올 수 있습니다.
제네릭타입<? extends 상위타입>
: 와일드카드의 범위를 특정 객체의 하위 클래스만 올 수 있습니다.
제네릭타입<? super 하위타입>
: 와일드카드의 범위를 특정 객체의 상위 클래스만 올 수 있습니다.
'Programming > Java' 카테고리의 다른 글
[Java] 문자열 분해(배열로 변환) toCharArray(), new String() 사용법 & 예제 (0) | 2021.05.07 |
---|---|
[Java] 자료구조 - 큐(Queue)란 무엇인가? (큐 개념 / 연산) (0) | 2021.05.04 |
[Java] 문자열(알파벳) 대문자 / 소문자로 변환 toUpperCase(), toLowerCase() (0) | 2021.03.25 |
[Java] String / StringBuffer / StringBuilder 사용법 및 차이점 - 불변 문자열, 가변 문자열 (2) | 2021.03.25 |
[Java] 자료구조 - 스택(Stack)이란 무엇인가? (스택 개념, 연산, 구현) (0) | 2021.03.22 |