-
[JAVA] Generic개발 강의 정리/JAVA 2021. 6. 30. 11:52
1. 제네릭(Generic)이란?
우유를 하나 산다고 가정해보자. A로 가면 100원 깎아주고 B로 가면 정가를 받는다.
그럼 당연히 A편의점으로 간다. 다른 상품도 A에서 더 싸다면 물건을 사러 갈때 A로 간다=> 일반화
제네릭은 참조 타입을 일반화 하는 것이다.
왜 제네릭을 사용해야 하는가?
1. 컴파일 단계에서 '잘못된 타입 사용될 수 있는 문제' 제거 가능.
다형성1로 발생할 수 있는 문제. => instanceof로 검사
그런데 만약에 부모타입에 들어갈 수 있는 자식 타입을 지정해둔다면? 검사하지 않고도 강제 형변환.
제네릭은 이것과 연관있다 지정된 타입으로
2. 타입변환을 제거한다.
제네릭은 미리 타입을 지정하기 때문에 지정된 타입으로 리턴하고, 매개변수 또한 지정된 타입으로 들어간다.
그렇기 때문에 제네릭 코드는 불필요한 타입 변환을 제거한다.
제네릭 타입이란?
제네릭은 제네릭 타입 뒤에 "<>" 기호가 붙고, 사이에 "타입 파라미터"가 붙는다.
1. 제네릭 타입
: 제네릭 타입은 세개로 구성 되어 있다. (제네릭을 적용하는 부분)
1.제네릭 클래스
2.제네릭 인터페이스
3.제네릭 메소드
이 세가지를 합쳐서 제네릭 타입이라고 한다.
2. 타입 파라미터
: 외부에서 전달인자(참조타입명)를 주면 블록 내에서 쓰라고 주는 매개변수.
T (type): 참조타입명(배열,열거,인터페이스, 클래스)을 받게 만든 매개 변수.
타입 파라미터로 매개변수를 선언하면 컴파일시에 구체타입(지정한 참조타입)으로 바뀌게 된다.
제네릭 타입을 선언 할땐 타입 파라미터를 이용해 타입 파라미터를 지정하고
제네릭 타입을 사용 할땐 구체 타입을 지정한다.
*구체 타입으로 Object 를 넣을 순 있지만 이렇게 하지 않는다!!!
<Integer> 가 가능한 이유. Integer는 Wrapper Class 이기 때문에 참조타입으로, 구체타입으로 들어갈 수 있다.
3. 타입 추론 연산자
Lvlaue의 다이아몬드 기호 안에 구체 타입이 있다면 Rvalue에는 구체타입을 생략하고 다이아몬드 기호를 남긴다.
이때, Rvalue의 다이아몬드 기호를 더이상 다이아몬드 기호라고 하지 않고 "타입추론연산자"라고 부른다.
4. 제네릭 타입은 연산자를 통해 연산할 수 없다!
멀티 타입 파라미터란?
: 두 개 이상의 타입 파라미터를 사용하는 것class<K,V,...> { ;; }
'개발 강의 정리 > JAVA' 카테고리의 다른 글
[JAVA] Generic-3 (0) 2021.07.02 [JAVA] Generic-2 (0) 2021.07.01 [JAVA] 예외처리 코드, 사용자 정의 예외 (0) 2021.06.29 [JAVA] 예외처리 (0) 2021.06.28 [JAVA] 인터페이스 (0) 2021.06.24