이번 포스팅은 Java 5부터 등장한 제네릭(Generic)에 대하여 알아보겠습니다. 제네릭(Generic)은 일반화한다는 뜻을 가진 generalize에서 비롯된 말입니다. 그럼 이쯤에서 생각해 볼 수 있는 내용은 어떠한 것을 일반화를 하는 데 쓰인다. 라고 생각할 수 있습니다. JAVA에서 어떠한 것은 바로 자료형이다. 즉 자료형을 일반화함으로써 자료형에 종속적이지 않은 클래스를 정의할 수 있다.
왜 제네릭(Generic)을 사용하는 것일까?
List testList = new ArrayList();
testList.add("mooonstar");
testList.add(1000);
int i = 변수
String dst = (String)testList.get(i);
이와 같은 코드가 있으면 컴파일단계에서의 에러는 발생하지 않습니다. 하지만 프로그램 실행 도중 i가 1이 되는 상황이 발생한다면 testList에서 두 번째 요소는 int 형이기 때문에 캐스팅 관련 에러가 발생합니다. 이러한 이유로 인해 자료형을 국한하고 컴파일 단계에서 에러를 잡기 위하여 제네릭(generic)을 사용합니다. 같은 예제를 제네릭(generic)을 사용하여 바꿔보겠습니다.
제네릭(Generic)을 사용한다면?
List<String> testList = new ArrayList<String>();
testList.add("mooonstar");
testList.add(1000); ---> 타입이 맞지 않기 때문에 컴파일 에러 발생
int i = 변수
String dst = testList.get(i);
String으로 제네릭(generic) 타입을 국한하게 되면 세 번째 코드에서 컴파일 에러를 발생시킵니다. 또한 마지막 줄에서는 위의 제네릭(generic)을 사용하지 않았을 때처럼 형 변환을 할 필요도 없습니다. 이러한 이유로 인해 제네릭(generic)을 사용합니다.
또 다른 제네릭(Genric)의 사용
추가적으로 제네릭(Generic) 타입은 클래스와 인터페이스에서도 사용한다.
클래스(Class)
class ClassGene<T> {
private T t;
public void T get() {
return t;
}
private void set(T t) {
this.t = t;
}
}
인터페이스(Interface)
interface InterfaceGene<T> {
T.test(T, t);
}
인터페이스 구현부(Interface Implement)
class InterfaceGeneImpl implements InterfaceGene<String> { //구현부에서 자료형 지정
@Override
public String test(String t) {
return null;
}
}
'Languages > Java' 카테고리의 다른 글
[Java]정규식(Regular Expression) - 유용한 문자열 처리를 위한 강력한 도구 (7) | 2023.07.23 |
---|---|
[Java]인터페이스 - 객체지향 프로그래밍의 주요 개념과 활용방법 (6) | 2023.07.23 |
[Java]문자열(String)과 리스트(List)의 null, 빈 값인지 확인하는 방법 (15) | 2023.07.20 |
[Java]안정적인 NULL 처리가 가능한 Optional 알아보기(NullPointerException) (4) | 2023.07.16 |
[Java]문자열 클래스 String, StringBuffer, StringBuilder 알아보기 (1) | 2023.07.06 |