지네릭스

Lumi·2021년 6월 29일
0

자바의 정석

목록 보기
3/35
post-thumbnail

지네릭스

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능

== 다룰 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 줄인다.

지네릭 클래스로 변경하려면 클래스 옆에 <T.>를 붙인다.

위 아래 코드 같은 내용이지만 아래는 지네릭 클래스로 변경

== T대신 string, int 등등 다양하게 들어갈수 있다.
T는 단순히 하나의 변수 일뿐임

지네릭스의 제한

지네릭 클래스를 활용할떄 객체별로 다른 타입을 지정하는것은 가능하다.
== 본래의 사용목적이 이거임

하지만 static, 배열에 는 사용이 불가능하다.

지네릭 클래스의 객체 생성과 사용

<>안의 값은 변경되면 안된다.(한번 정하면 계속해서 같아야 한다,)

제한된 지네릭 클래스

매개변수 T에 지정할 수 있는 타입의 종류를 제한 하는 방법
-> 지네릭 타입에 extends를 사용한다.

T extends Fruit : Fruit클래스의 자손들만 담을수 있다라는 의미

만약 Fruit가 인터페이스라면 : 이떄에도 extends를 사용한다
implements는 사용 하지 않는다.

와일드 카드

이런 상황이 발생하게되어서 makeJuice를 Apple, Grape등으로 오버로딩 해야 한다면 그것을 불가능하다.

단지 지네릭 타입이 다른것만으로는 오버로딩을 사용할수 없다.

이를 수정하기 위해서 ?를 사용한다.
? extends T : T와 그 자손들만 가능
? super T : T와 그 조상들만 가능
? : 모든 타입이 가능, ? extends Object와 동일

하지만 이렇게 사용하게 된다면 for문의 Fruit가 실제 사용될떄에 Fruit라는 보장이 없다.
하지만 사용을 할수는 있는데 Java내에서 스스로 처리해 주기 떄문이다.

지네릭 메서드

메서드의 선언부에 지네릭 타입이 선언된 메서드를 지네릭 메서드 라고 한다.

Collection.sort()가 대표적인 지네릭 메서드이며 선언 위치는 반환 타입 바로 앞이다.

보통 static멤버에는 타입 매개변수를 사용할수 없지만 메서드에 지네릭 타입을 선언하고 사용하는 것은 가능하다.

지네릭 메서드로 바꾼 모습

선언은 Java가 타입을 추정하기 떄문에 하던방식으로 사용하면 된다.

같은 클래스 내에 있다면 static같은 경우에는 바로 사용이 가능하지만 만약 지네릭 메서드를 사용했다면 반드시 타입을 적어 주어야 한다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글