Web Programming/JAVA

Genric

myHyem 2020. 7. 15. 20:16

요즘 스프링 부트 2로 개발 공부를 하던 중에 이해가 안 가는 코드가 있어서 검색을 해보았고

어느 정도 이해한 내용을 정리해보기로 했습니다.

 

List <String>

List <?>

 

 

코딩을 하다가 이런 문법을 자주 보셨을 겁니다

저는 'List는 크기가 없는 배열이구나!'라고 인식하고 있었고

대충 어림짐작으로 <> 안의 내용은 타입을 지정해주는 것이고

? 는 지정되지 않은 타입을 바인딩할 때 사용한다고 생각하고 사용해왔습니다

실제로 이렇게만 알고 있어도 List를 사용하는 데는 지장이 없었습니다

 

그런데!

오늘 이 코드를 보고는 생각이 바뀌었습니다

 

1
2
@Select(strategy = SelectType.COLLECT)
<R> R selectAll(final UserCriteria criteria, final SelectOptions options, 
final Collector<User, ?, R> collector);
 

 

제가 스프링 부트 공부를 위해 구매한 서적인데

너무 어려운 책을 사는 바람에 예제 코드에서 에러를 뿜었던 부분입니다

솔직히 이 부분은 아직도 다 이해가 안 됩니다만...

 

아무튼

'아니 도대체 <R>, R 이 뭐야?!?!'

라며 혼자 열폭을 하다 폭풍 검색을 하기에 이릅니다

 

우선 <>는 List에만 사용한다는 생각부터 버립니다

'다양한 타입의 객체를 바인딩하기 위해 사용한다'

'우선 선언해놓을게 객체 생성할 때 완성해!'

가 저의 최종 결론입니다

 

1
public <T> SingleResult<T> getSingleResult(T data)
 

 

이러한 메서드가 있습니다

여기서 <T>는 <Type>을 의미하고,

원하는 타입을 가져다 놓으라는 말과 같습니다

만약 이 메서드를

<String> SingleResult <String>

으로 사용하면 return 값은 String 이 됩니다

동작은 이런 식으로 동작이 됩니다

 

T - Type

E - Element

K - Key

V - Value

N - Numver

R - Result

? - Hidden

으로 사용됩니다 (보편적으로 사용되는 규약입니다. 실제로는 아무거나 넣어도 작동됩니다.)

 

여기서 T는 'Genric 변수' 라 하고

이를 파라미터로 가지는 클래스나 인터페이스를 'Genric 타입'이라 합니다

이러한 Genric을 잘 이용하면 불필요한 형 변환을 줄여

좀 더 효율적으로 코딩할 수 있게 됩니다

 

깊게 들어가면 더 많은 내용이 있지만

여기까지만 알아도 문법 사용에 지장은 없다고 생각합니다

 

자세한 내용은 출처로 남겨두겠습니다

감사합니다

 

출처 : https://namjackson.tistory.com/18

 

[Java/Android]Java Generic 제너릭 타입 - 개념,사용법,활용법

Genric Java Genric 타입이란 무엇인가? Genric은 일반적인 이란 뜻을 가진 단어이다. 프로그래밍의 Generic은 - 일반적인 코드를 작성하고, 이코드를 다양한 타입의 객체에 대하여 재사용하는 프로그래��

namjackson.tistory.com

출처 : https://palpit.tistory.com/665

 

[Java] 제네릭(Generic) - 제네릭 타입

제네릭은 여러 절로 구성되어 있습니다. Intro 제네릭 타입 멀티 타입 파라미터 제네릭 메소드 제한된 타입 파라미터 & 와일드카드 타입 제네릭 타입의 상속과 구현 제네릭 타입(class , interface )  �

palpit.tistory.com