Day22 - 제네릭 ( Generic )

2021. 3. 17. 15:56JAVA 공부

점심을 밖에 나가서 먹고 왔는데 밖에 날씨가 굉장히 좋네요 ~

따사로운 햇살에 적당히 부는 바람

딱 덥지도 춥지도 않은데, 기분이 좋은 날 이랄까요?

이런 날에 밖에 나가서 산책 해야 되는데 ㅎㅎㅎ

 

이번에는 제네릭에 대해서 알아 봅시다

제네릭 Generic

제네릭은 클래스 또는 인터페이스 뒤에 <>(꺽쇠) 가 오는 것을 의미합니다

 

제네릭을 왜 사용하는가 ?

먼저 예제를 한번 봅시다

일반적으로, Object 클래스를 사용 할 때 ... ( 모든 타입, 모든 클래스 ) 를 객체로 만들어서 사용하려고 할 때....

Object는 모든 데이터 타입을 받을 수 있습니다.

그런데, ※User1 과 User2 는 서로 모릅니다

User1이 ABC 라는 클래스에 String 형을 넣었습니다.

User2는 ABC 라는 클래스에 있는 getObj 를 이용해서 들어있는 데이터를 사용하고 싶습니다.

그렇다면, User1이 어떤 타입, 어떤 클래스 를 넣었는지 모르니까

꺼내서 쓸 때도 어떤 타입 및 클래스로 받아야 할지 모르겠죠?

그래서 User2는 "음... int로 써볼까?" 라면서 int형으로 받아봅니다

그런데... User1은 분명 String 형을 넣었습니다. User2는 int형으로 변환하면 어떻게 되요?

에러가 납니다 ~

 

이러한 일을 방지하기 위해서

제네릭을 씁니다.

 

제네릭의 사용

제네릭은 위 코드처럼, <> 꺽쇠 사이에 쓰고 싶은 이름을 쓰면 됩니다. 보통 C or T 를 많이 쓴다고 하네요

이렇게 사용을 해주면 됩니다.

즉 .. Type 자리에 넣고 싶은 클래스, 타입을 넣어주면 됩니다

setT를 사용하려고 하니까 어떻게 되어 있죠?

매개변수가 String 형으로 타입변환이 되어 있죠?

그러면 , get 할때도 String 타입 반환으로 변경 되어 있습니다.

 

생성자에서는 <Type> 를 생략할 수 있습니다.

위 코드처럼 뒤에 있는 생성자의 제네릭은 생략할 수 있습니다. 하지만, 앞에는 꼭 써주어야 해요 ~

 

제네릭은 기본 타입은 불가능 합니다

byte char int ...... 등등 의 기본타입은 제네릭으로 사용할 수 없습니다.

그렇기 때문에, wrapper 를 활용해서 사용해 주어야 합니다 ~

제네릭은 다중으로 사용할 수 있습니다

이렇게 제네릭에 대해 알아 보았습니다.

제네릭은 어떻게 사용하는지만 이해를 할 수 있으면 된다고 합니다.

제네릭을 배우는 이유는 다음에 알아볼 컬레션 프레임워크 때문인데...

 

이 프레임워크가 제네릭 형태로 되어 있어서 이렇게 짚고 넘어 간다고 합니다

 

고생하셨습니다