Generic 타입에 대해서 알아보기 전에 원시 타입과 참조 타입에 대해서 알아봅시다.
JAVA에는
boolean
: True / False - 논리형byte
: -128 ~ 128 - 정수형short
: -32768 ~ 32767 - 정수형int
: -2147483648 ~ 2147483647 - 정수형long
: -9223372036854775808 ~ 9223372036854775807 - 정수형float
: 1.4E-45 ~ 3.4028235E38 - 실수형double
: 4.9E-324 ~ 1.7976931348623157E308 - 실수형char
: '\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터) - 문자형참조 타입은 원시 타입을 제외한 타입들 (문자열, 배열, 열거, 클래스, 인터페이스) 을 말하며 객체의 주소를 저장하는 타입입니다. 참조 타입은 null 값을 가질 수 있습니다. JAVA에서 실제 객체는 동적 메모리인 Heap 영역에 저장되기 때문에 참조 타입 변수는 정적 메모리 스택 영역에 실제 객체들의 주소를 저장하고 객체를 사용할 때마다 참조 변수에 저장된 객체의 주소를 불러와서 사용합니다.
자바에서 제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에 지정하는 기법을 의미하는데, 객체별로 다른 타입의 자료가 저장될 수 있도록 합니다.
ArrayList<String> list = new ArrayList<>();
여기서 <> 이 꺾쇠 괄호가 제네릭을 의미합니다. 괄호 안에 타입명을 적게 되는데
ArrayList<T> list = new ArrayList<>();
이렇게 적게 된다면 여기서 T는 타입 매개 변수를 의미합니다.
제네릭은 타입을 유연하게 처리하고, 잘못된 타입 사용으로 발생할 수 있는 런타임 타입 에러를 컴파일 과정에서 검출할 수 있기 때문에 사용하게 됩니다.
여기서 제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 의미합니다.
public class Person<T>
public interface PersonInterface<T>