티스토리 뷰
- 포괄적인, 총칭의, 회사 이름이 붙지 않은, 일반 명칭으로 판매되는 사전적 의미로, 딱 하나를 정하지 않고 범용적이고 포괄적이라는 의미
- Data type을 특정한 type하나로 정하지 않고 사용할 때마다 바뀔 수 있게 범용적이고 포괄적으로 지정한다 라는 의미
- Object Class의 한계를 극복
- 호출되는 시점에 실제 Generic 타입을 지정
1. 왜 Generic가 만들어졌을까?
List<String> list = new ArrayList<>() 에서 List<String>처럼 호출되는 시점에 실제 Generic 타입을 지정한다.
2. Generic Class
- Class or Interface로 정의할 수 있음
- 클래스 내부에서 사용하는 데이터의 타입(Type)을 클래스의 인스턴스를 생성할 때 결정하는 것.
- 기본 데이터 타입(int, long..)에 대해서는 지정이 불가능
- Class를 정의하는 시점에 타입을 지정하는 것이 아니라 객체 생성 시점에 실제 타입을 지정
- 주의사항
• 기본 유형으로 제네릭 유형을 인스턴스화 할 수 없음• 유형 매개 변수의 인스턴스를 생성할 수 없음• 유형이 유형 매개 변수 인 정적 필드를 선언할 수 없음• 매개 변수가 있는 유형에 캐스트 또는 instanceof를 사용할 수 없음• 매개 변수가있는 유형의 배열을 만들 수 없음• 매개 변수가있는 유형의 개체를 생성, 캐치 또는 던질 수 없음• 각 오버로드의 형식 매개 변수 유형이 동일한 원시 유형으로 지워지는 메서드를 오버로드 할 수 없음
3. Generic Method
- Method 만들 때 파라미터와 반환 값의 자료형을 Generic로 선언 한 Method
- 입력 매개 변수 값으로 Generic Type을 유추할 수 있을 경우는 생략 가능
- Generic Method 내부에서는 매개변수로 한 참조 변수의 메서드로 Object Class의 Method만 가능
- extends : 매개 변수에 특정 타입만 받게 제한할 때 사용
- 여러 개 사용 시 임의로 타입 설정
4. Generic WildCard
- 와일드카드 타입에는 총 세 가지의 형태가 있으며 물음표(?)라는 키워드로 표현
- 제네릭타입<?> : 타입 파라미터를 대치하는 것으로 모든 클래스나 인터페이스타입이 올 수 있음
- 제네릭타입<? extends 상위타입> : 와일드카드의 범위를 특정 객체의 하위 클래스만 올 수 있음.
- 제네릭타입<? super 하위타입> : 와일드카드의 범위를 특정 객체의 상위 클래스만 올 수 있음.
'Java > 기본' 카테고리의 다른 글
자바에서 Array와 ArrayList차이점 (0) | 2023.05.01 |
---|---|
034. Java Inner Class (0) | 2022.05.31 |
032. Java Class 상속 (0) | 2022.05.24 |
031. Java 외부 구성 요소 (0) | 2022.05.16 |
030. Class 구성 요소 (0) | 2022.05.16 |