Java Generic 자바 제네릭
Generic 개념을 제대로 정의하지 않고 넘어가니 계속해서 의문점이 생기는 경우가 늘어난다.
ArrayList<String>
으로만 접한 Generic을 좀더 잘 정의해보도록 한다.
Generic (제네릭)
일반적인 자료형이라고 하면, 우리는 int, double, String 등의 기본 데이터 타입부터 생각하게 된다.
제네릭이란, 이런 데이터 타입을 아직 명시하지 않은 상태
라고 볼 수 있다.
제네릭은 다음과 같은 상황에서 쓸 수 있다.
장점
강제적인 형변환이 발생하지 않는다.
Generic은 Object를 사용하는 코드를 대체할 수 있다.
다음과 같이 필드로 오브젝트를 갖는 클래스가 있다고 하자.
오브젝트를 필드로 쓴 이유는 이 필드가 String 이나 Integer 등 다양한 타입을 받기를 원하기 때문이다. 🤔
이 클래스를 사용하려면, 아래 과정을 거친다.
위에서 보듯 Object 클래스를 다루기에 반드시 형변환
이 필요하다.
Generic을 사용하면 강제적인 형변환을 없앨 수 있다.
반복적인 코드 절약, 코드 재사용성
만약 object와 제네릭을 둘다 사용하지 않고, 각각 들어오는 형마다 다른 게터와 세터를 설정해준다고 생각해보자. 계속해서 반복적인 코드가 쌓이게 된다. 제네릭을 사용하여 이런 점을 막을 수 있다.
컴파일 시 타입 오류를 체크하여 사전에 엄격한 타입체크를 가능하게 함.
제네릭 메소드
매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말합니다.
호출 방식
호출은 위와 같은 방식으로 합니다.
- 매개값과 매개 타입을 모두 적어주거나
- 매개값으로 타입을 유추하게 하는 방식 두 가지 입니다.
요약
제네릭 메소드를 요약해봅시다.
{: style="width:50%; display: block; margin:100px auto 0;"}{: style="display:block;margin-top:10px;color:#828282;font-style:normal;text-align:center"}
Class<T>
는 조금 헷갈릴 수 있는데요.
이를 이해하려면 간단하게 June.class 의 타입은 Class<June>
이라는 용례만 알면 됩니다.
즉 위의 코드에서 clazz라는 이름의 변수는, 어떤 클래스의 타입을 받는 것이라고 할 수 있습니다.