일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- layout #thymeleaf #화면분할
- git #gitlab #github
- 스프링 부트
- 1
- 스프링
- DispatcherServlet
- zepettoworld.com
- Bean
- spring
- 오토와이어드
- Component
- autowired
- Today
- Total
기록과 정리
제네릭(Generic)에 대하여 본문
제네릭(Generics)
컴파일시 타입 체크해주는 기능으로 , 파라미터화 하여 타입이 결정되도록 하는 기능. JDK 1.5에 도입이 되었으며 이전에는 Object타입으로 모든 데이터 타입을 받아주는 형식으로 개발을 하였고 (Generic이 필요한 시점의 코드) 의도하지 않는 타입을 받거나 , 모든 타입을 받아주었기 때문에 프로그램 성능저하를 일으킬 수도 있을 것 같다.
제네릭을 사용하면 컴파일 시점에 에러테크를 할 수 있으며, 자바 라이브러리에 많이 쓰이고 있어 라이브러리 분석 또는 실제 업무에서 쓰이기 때문에 알고 넘어가도록 하자.
장점
1. 타입의 안정성을 높인다. - 의도하지 않은 타입의 객체 저장을 막고, 잘못 형변환 되어 발생할 수 있는 오류를 막는다.
2. 형변환의 번거로움을 줄인다.
사용
MyArray라는 class를 만들고 <T> 타입 변수를 주었다 . String도 받고 Integer도 받을 수 있다. 타입변수는 클래스뿐 아니라 메서드의 매개변수나 반환값으로도 사용 가능하다.
( 타입 변수의 자리에는 기본 타입 (primitive type)을 사용할 수 없다. Integer와 같은 Wrapper class를 사용하도록 하자. )
타입 변수의 제한
extends - 타입을 제한하여 특정 타입만을 사용하도록 제한할 수 있다.( 단, interface를 제한하고 싶을 시에도 implements가 아닌 extends를 사용한다.)
Integer 를 상속받는 또는 Integer만 타입 변수로 받을 수 있는 클래스를 생성 후 , String 을 타입변수로 넣어보면 컴파일 에러가 남을 볼 수 있다.
혹 클래스와 인터페이스 둘다 상속받고 구현해야할 때는 '&' 를 이용하여 타입변수를 지정할 수 있다.
와일드카드
이름을 제한 두지 않음에 표현하는 타입변수에 사용되는 기호
<?> - 타입 변수의 모든 타입을 사용할 수 있다.
<? extends T> - T 또는 T를 상속 받는 자손 클래스만 사용 가능.
<? super T> - T 또는 T를 상속받는 조상 클래스만 사용 가능.
타입의 종류 (T , E , K , V...)
이는 암묵적으로(?) 사용하는 규칙일 뿐 아래와 같이 사용할 필요는 없다. R을 사용하든 T를 사용하든 무방하지만 통상적으로 알기 쉽게 하기 위함으므로 참고 바란다.
T : Type
E : Element
K : Key
V : Value
N : Number
'IT > Java' 카테고리의 다른 글
Iterable과 Iterator (0) | 2022.02.18 |
---|---|
자바의 정석 6장) 객체지향 프로그래밍 1 (0) | 2021.12.06 |
Date와 Time API (0) | 2021.08.31 |
Java Optional (0) | 2021.08.23 |
Java8 Stream API (스트림 API) (0) | 2021.08.12 |