제네릭스는 다양한 타입의 객체를 지원하는 클래스, 인터페이스, 메소드를 정의하는 방법으로
똑같은 동작을 하는 클래스, 메소드를 여러번 만들 필요없이 한번만 정의하면 여러 타입에서 지원할 수 있도록 한다.
아래 예제를 통해 이해해보자.
각 자료형 int, double, String의 배열을 생성하고 해당 데이터를 순차적으로 출력하는 메소드를 생성하였다.
위의 printIntArray, printDoubleArray, printStringArray 메소드를 확인하면 자료형만 다르고 똑같은 코드가 반복되는 것을 볼 수 있다.
만약 위 자료형 외에 또 다른 자료형(long, float..)이 추가된다면 메소드도 추가해야할 것이다.
이런 경우에 제네릭스를 활용해볼 수 있다.
private static <T> void printAnyArray(T[] array){
}
제네릭스는 모든 데이터 타입을 받아 실행할 수 있어야하므로 static <T> void로 메소드를 선언한다.
그리고 파라미터의 데이터타입을 T로 규정하여 특정 데이터 타입을 지정하지 않고 전체 타입을 받아올 수 있도록한다.
이때, T가 아닌 다른 이름으로 선언할 수 있으나, 일반적으로는 Type을 의미하는 T로 지칭한다.
비슷한 예로 K : Key, V: Value, E : Element를 일반적으로 지칭한다.
위와 같이 printAnyArray 제네릭스 메소드를 생성하였다.
다만 위 예시를 보면 printAnyArray(iArray), printAnyArray(dArray)를 호출할 때 오류가 발생된 것을 볼 수 있다.
- String 데이터 타입은 정상. printAnyArray(sArray)
이는 제네릭스에서 지원하는 유형이 객체이기 때문이다.
https://nossodia.tistory.com/227
이전 시간에 기본자료형과 참조자료형에 대하여 학습한 적이 있는데,
int, float, double 등의 데이터타입은 기본 자료형에 해당하여 제네릭스로 바로 활용할 수 없다.
이 경우에는 Wrapper 클래스를 이용하여 해당 자료형을 변환 후 사용할 수 있다.
위와 같이 제네릭스를 이용하여 메소드를 정의하면 서로 다른 데이터타입이더라도 <T>전체 타입에 대하여 지원이 가능하여 중복된 코드를 줄일 수 있다.
'Spec UP - Backend > 나도코딩의 자바기본편' 카테고리의 다른 글
chap_09. Wrapper 클래스 (0) | 2023.06.28 |
---|---|
chap_09. 제네릭 클래스 (0) | 2023.06.21 |
Chap_08.인터페이스(Interface) (0) | 2023.05.10 |
Chap_08. 추상 클래스(AbstractClass) (0) | 2023.05.10 |
Quiz. 클래스를 이용하여 햄버거를 자동으로 만드는 프로그램을 작성하시오 (0) | 2023.05.03 |
댓글