1. 제네릭
1. 제네릭이란
- 자바 제네릭은 타입의 안정성과 재사용성을 높여주는 기능.
- 제네릭을 사용하면 클래스나 메소드를 정의할 때 타입을 지정하지 않고 인스턴스 생성할 때나 메소드를 호출할 때 타입을 지정하여 타입만 변경하여 계속 사용 가능.
- 제네릭을 사용하면 중복된 코드를 제거할 수 있고 유지보수성과 가독성이 좋아진다.
- 의미상의 제네릭
- T : Type
- K : Key
- V : Value
- E : Element
- N : Number
2. 제네릭 클래스
제네릭 클래스는 클래스명 다음에 (타입매개변수) 을 붙여서 정의하는 클래스.
에는 어떤 클래스도 사용할 수 있다.
정의
public class Clss<T> { List<T> listT; T t; Map<String, T> tMap; }
사용
Clss<타입으로 사용할 클래스> cl = new Clss<타입으로 사용할 클래스>();
3. 제네릭 메소드
- 메소드의 반환타입 앞에 를 붙여서 정의한다. T는 임의의 이름으로 사용가능.
- public T test(T[] tArr or T t or List tList .....) : 반환타입 앞의 타입을 지정하면 반환타입과 매개변수의 타입이 결정된다.
4. 제한된 제네릭
- 에 제한을 줄 수 있다. 어떤 클래스를 상속받은 클래스만 허용하던가 어떤 클래스의 부모클래스만 허용하도록 제한을 걸 수 있다.
- <T extends 부모클래스> : 부모클래스를 상속받은 클래스만 T로 지정가능하도록 설정
- <T super 자식클래스> : 자식클래스에 상속을 해준 부모클래스와 자식클래스 본인만 지정될 수 있도록 제한
5. 와일드카드(?)
와일드 카드 <?>는 메소드의 매개변수에 List, Map, Set...에 어떤 타입의 클래스든 다 지정할 수 있게 하고 싶을 때 사용한다.
public int add(List<Integer> intList) {
}
public int add(List longList)
{
}
- 위 두 개의 메소드는 타입이 다르지만 매개변수의 형태가 리스트로 동일하다. 그래서 메소드 오버로딩이 성립되지 않는다. 위 문제를 방지하고자 할 때 와일드카드를 사용한다.
public int add(List<?> intList) {
}
- 와일드카드도 extends와 super 키워드를 사용해서 제한을 걸 수 있다.
728x90
'네이버클라우드 캠프 5기 > 학습내용 정리' 카테고리의 다른 글
9. JAVA - MultiThread (0) | 2023.04.11 |
---|---|
8. Java - Enum (0) | 2023.04.05 |
6. JAVA - 컬렉션 프레임워크 (List, Map, Set ....) (0) | 2023.03.27 |
5. JAVA - 중첩클래스 관련 정리 (0) | 2023.03.23 |
4. JAVA - interface 관련 정리 (0) | 2023.03.23 |