Java 공부/자바 공부 (baek)

2021-09-15 p.654제네릭 맛만보기

Hesitater 2021. 9. 15. 10:42
728x90

chapter 13 제네릭(generic)

: type parameter
ArrayList : generic type
라고 부르지만 사용하다보면 명칭생각 안하고 사용하게 될거 같아용

collection : 다른객체를 담고 있는 객체

p13.notgeneric

Ex01

참조타입은 변환에서 크기 유무 상관 X

getItem은 Object로 리턴 받았으니깐 String으로 사용하려면 강제 형변환 해야됨

결과값

스트링으로 리턴 받은 "html"을 Integer로 형변환하려고 하면 ClassCastException 일어남

Integer 는 String 이 아니니깐

p01generic;
Class Ex01

private Object item; // 모든 객체를 받게 하려고
Object가 ClassCastException 안나오도록 타입을 정해주고 싶었어

class Box { // T가 타입이 정해져 있지않음 <> 안에 다른 알파벳 가능 근데 관습상 Tyte의 약자 T를쓰긴함
private T item;
}

클래스를 정의할 때 타입이 정해져 있지 않은데
main에서 사용할때 내가 타입을 정해줄 수있다

관습상 하나의 대문자를 씀

타입이 여러개 일 경우 T를 중심으로 알파벳 순서대로 쓰긴함

<> 사용하면 강제 형변환을 안해도 되고 코드가 간결해짐

Class Box에 get,set메서드 만들면 (notgeenric에서 Object가 T로 바뀜)

생성할때도 타입명칭을 넣어줘야함

genericEx01 다 표현 되있는것

예를 들어 보면

ex) Interface Comparable
T가 나중에 결정 된다.

p01generic;
class Ex02

타입T 는 T로 타입U, U로 아래그림은 예시

class Container<T,U> 에 get,set 메서드 만들고
main에서 사용 할때 명시

아래그림은 setItem1 은 String 받고 setItem2는 Integer 받는걸 보여줌

생성과 동시에 선언 가능

생성자에도 사용 가능하다.


      Container<String,Integer> c1;                    //두줄로 표현
      c1 = new Container<String,Integer>();

  Container<Double, int[]> c2 = new Container<Double, int[]>();        //한줄로 표현

타입 파라미터가 복잡해서 타입파라미터가 추정될수 있으면 생략이 가능
import java.util.List;
Container를 생성할떄 newContainer<>(); 으로 사용 가능

        Container<Double, int[]> c2 = new Container<Double, int[]>(); 
        Container<Double, int[]> c2 = new Container<>();             // 같다고 추정되어서 생략 가능 한 경우

 

이런경우도 있다는걸 맛만 보자  (나중에 배울것)

 

 

 

'Java 공부 > 자바 공부 (baek)' 카테고리의 다른 글

2021-09-16  (0) 2021.09.16
2021-09-15 15장 컬렉션 프레임워크01  (0) 2021.09.15
2021-09-14  (0) 2021.09.14
2021-09-13_01  (0) 2021.09.13
2021-09-13  (0) 2021.09.13