제네릭
클래스 내부에 프로퍼티를 선언할시, 선언과 동시에 타입을 결정해야 한다
(클래스 https://lwndnjs93.tistory.com/33)
하지만 제네릭을 사용하면 해당 클래스의 객체가 생성될때 타입이 결정된다
제네릭은 <> 사이에 형식 매개변수를 지정하며, 형식 매개변수는 하나 이상 지정이 가능하다
제네릭을 사용하면, 의도하지 않은 타입의 객체를 지정하는 것을 막을수 있으며
객체 사용시 원래의 타입에서 다른 타입으로 형 변환을 할때 발생할 수 있는 오류를 줄여준다
FriendsInfo 클래스에서 제네릭을 이용하여 선언시에는 타입이 정해지지 않았지만
main함수에서 friendsName, friendsAge에서 객체 생성시 각각 String, Int로 타입이 정해졌다
만약 객체 생성시 타입 추론이 가능하다면 타입을 생략할수 있다
FriendsInfo클래스는 형식 매개변수를 하나 사용하였지만
여러개를 사용하는 경우 , 를 이용하여 여러개의 형식 매개변수를 사용할수 있다
여러개를 사용하더라도 객체 생성시 타입 추론이 가능하다면, 타입을 생략할수 있다
첫번째 예제에서는 FriendsInfo<T> 라고 형식 매개변수를 T로 사용하였고
두번째 예제에서는 FriendsInfo<S, U> 라고 형식 매개변수로 S, U 두개를 사용하였다
형식 매개변수로 어떠한것을 사용해야한다 라는 강제적인 규칙은 없지만
일반적으로 자주 사용하여, 암묵적인 룰 처럼 사용하는 형식 매개변수들이 있다
형식 매개변수 | 의미 |
E | 요소(Element) |
K | 키(Key) |
N | 숫자(Number) |
T | 형식(Type) |
V | 값(Value) |
S, U, V ... | 두 번째, 세 번째, 네 번째 형식 .... |
위와 같이 형식 매개변수를 한개 이상 받는 클래스가 제네릭 클래스 이다
형식 매개변수를 클래스 내의 함수에서는 사용이 가능하지만
프로퍼티에는 선언 당시 타입을 추론할수 없기때문에 사용이 불가능하다
대신 생성자를 이용할수 있다
주 생성자를 이용하는 경우
부 생성자를 이용하는 경우