반응형
제네릭(Generic) 이란?
클래스 내부에서 사용하는 데이터 타입을 클래스 인스턴스를 생성할 때 결정하는 것을 말함.
제네릭 사용 이유?
- 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거
- 메서드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 함
장점
컴파일 시 강한 타입 체크를 함
- 실행 시 타입 에러가 나는 것보다는 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지
타입 변환(casting)을 제거함
- 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미침
List list = new ArrayList();
list.add("hello");
String str = (String)list.get(0); // 타입 변환함
List<String> list = new ArrayList<String>();
list.add("hello");
String str = list.get(0); // 타입 변환 하지 않음
제네릭 타입(class <T>, interface <T>)
- 제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말함
- 클래스, 인터페이스 이름 뒤에 <> 부호가 붙고, 사이에 타입 파라미터가 위치함
public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}
예제
// 비제네릭
public class ObjectType {
private Object object;
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
// 제네릭
public class GenericType<T> {
private T genericType;
public T getGenericType() {
return genericType;
}
public void setGenericType(T genericType) {
this.genericType = genericType;
}
}
public class GenericExample {
public static void main(String[] args) {
//비제네릭
ObjectType ot = new ObjectType();
ot.setObject("비제네릭타입"); // String -> Object (자동 타입 변환)
String str0 = (String)ot.getObject(); // Object -> String (강제 타입 변환)
//제네릭
GenericType<String> gt = new GenericType<String>();
gt.setGenericType("제네릭타입");
String str1 = gt.getGenericType();
}
}
Object 타입을 사용하면 모든 객체를 저장할 수 있는 장점이 있지만, 저장할 때 타입 변환이 발생하고, 읽어 올 때에도 타입 변환이 발생한다. 이런 타입 변환이 빈번하게 발생하면 프로그램 전체 성능에 좋지 못한 결과를 초래할 수 있다. 하지만 제네릭(Generic)은 클래스를 설계할 때 구체적인 타입을 명시하지 않고, 타입 파라미터로 대체했다가 실제 클래스가 사용될 때 구체적인 타입을 지정함으로써 타입 변환을 최소화시키는 것을 확인할 수 있다.
'개발언어 > JAVA' 카테고리의 다른 글
[JAVA] 자바 날짜 포맷 변경 방법(SimpleDateFormat) yyyyMMdd (1) | 2020.08.06 |
---|---|
[JAVA] 람다식(Lambda Expressions)이란? 사용방법 & 장단점 (0) | 2020.08.04 |
[Java] 날짜 계산 방법(년, 월, 일 더하고 빼는 방법) (0) | 2020.08.03 |
[JAVA] ArrayList를 이용하여 Stack, Queue 구현하기 (1) | 2020.03.17 |
[JAVA]자바 변수란 무엇인가? (0) | 2020.03.12 |
댓글