DevBoi

[Java] 제네릭의 개념와 와일드 카드 본문

Language/[Java]

[Java] 제네릭의 개념와 와일드 카드

HiSmith 2022. 2. 20. 16:48
반응형

제네릭은 이전에 공부 했듯이, 특별히 어떤 클래스를 사용할떄, 타입에 대한 제약을 걸어두지 않는 것이다.

그런데, 이렇게 제약조건 없이 사용하게 된다면, String 변수에 Integer가 들어가도런타임시에 발견할수 없다.

그래서 제네릭에서는 제약조건을 와일드 카드라는 개념으로 걸어둘수 있다.

 

간단한 예를 보면서 이해해보자

 

FuncUtil 이라는 클래스는 utilList라는 녀석을 넣을때, Test1의 하위로 제약을 둔다면,

실제 메인에서 Test2라는 클래스로 걸때 오류가 발생하면서 런타임시에 발견할수 있게 된다.

 

만약에 Test2가 Test1을 상속 받게된다면, 해당 오류는 사라지게 된다.

 

자 , 그러면 와일드 카드에 대한 정확한 이해를 해보도록 하자

 

제네릭에서 만약에 특정 제약조건을 무조건 받지 않는다면, 너무 자료형에 대한 문제가 많을 것이다.

그렇기 때문에 와일드 카드를 통해서 해당 값에 대한 제약조건을 걸수있다.

 

제약조건은 크게 두가지이다.

super, extends

 

extends는 예시를 통해서 확인했으니 

super를 확인해보자

 

동일 내용을 extends -> super로 바꿔보자

그렇게 되면, Test2가 Test1을 상속 받는다고 하더라도, 오류는 지속된다.

그 이유는 이렇다

extends 는 Test1에 대한 상속을 받은 녀석 까지, 즉 위로는 제한이 있지만, 아래로는 없다.

하지만 super로 하게 되면, 위로 제한이 없고, 아래로 제한이 끊기게 된다.

따라서

Test3를 Test1이 상속 받게 된다면, 해당 supert Test1에서,

Test3를 사용해도 사용가능하게 된다는 것이다.

 

반응형