요즘 스프링 부트 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