본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

chap_09. 제네릭스

by TIS_Ha 2023. 6. 21.
반응형

제네릭스는 다양한 타입의 객체를 지원하는 클래스, 인터페이스, 메소드를 정의하는 방법으로

똑같은 동작을 하는 클래스, 메소드를 여러번 만들 필요없이 한번만 정의하면 여러 타입에서 지원할 수 있도록 한다.

 

아래 예제를 통해 이해해보자.

각 자료형 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

 

Chap_07. Reference 참조

기본 자료형 (Primitive Data Types) int, float, double, long, boolean ... 등 소문자로 시작되는 자료형이다. 기본 자료형에 아무 값도 지정하지않은경우 기본값은 0이다. 가지고 있는 메소드가 없다. 참조 자

nossodia.tistory.com

이전 시간에 기본자료형과 참조자료형에 대하여 학습한 적이 있는데,

int, float, double 등의 데이터타입은 기본 자료형에 해당하여 제네릭스로 바로 활용할 수 없다.

이 경우에는 Wrapper 클래스를 이용하여 해당 자료형을 변환 후 사용할 수 있다.

 

위와 같이 제네릭스를 이용하여 메소드를 정의하면 서로 다른 데이터타입이더라도 <T>전체 타입에 대하여 지원이 가능하여 중복된 코드를 줄일 수 있다.

반응형

댓글