티스토리 뷰
열일곱번째날 [제네릭(2) - 제네릭 메소드 / 제한된 타입 파라미터 / 와일드카드 타입 / 제네릭 타입 상속 / 제네릭 타입 구현]
구일일구 2022. 8. 16. 18:05목차
- 제네릭 메소드 : <T,R> R method(T t)
- 제한된 타입 파라미터 : <T extends 최상위타입>
- 와일드카드 타입 : <?>, <? extends ...>, <? super ...>
- 제네릭 타입의 상속과 구현
제네릭 메소드 : <T,R> R method(T t)
* 매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드
* 제네릭 메소드 선언 방법
- 리턴 타입 앞에 "<>"기호 추가 ➡️ 타입 파라미터 기술
- 타입 파라미터를 리턴 타입과 매개변수에 사용
public<타입파라미터,...> 리턴타입 메소드명(매개변수, ...){...}
public<T> Box<T> boxing(T t){...}
* 제네릭 메소드 호출하는 방법
리턴타입 변수 = <구체적타입> 메소드명(매개값);
Box<Integer> box = <Integer> boxing(100); //타입 파라미터를 명시적으로 지정
리턴타입 변수 = 메소드명(매개값);
Box<Integer> box = boxing(100); //매개값100을 보고, 구체적 타입을 Integer로 추정
제한된 타입 파라미터 : <T extends 최상위타입>
* 타입 파라미터에 지정되는 구체적인 타입 제한할 필요가 있음
- 숫자를 연산하는 제네릭 메소드는 매개값으로 : Number / Byte, Short, Integer, Long, Double만 가져야 함
* 상속 및 구현 관계 이용해 타입 제한
- 상위 타입은 클래스 뿐만 아니라 인터페이스도 가능 (implements 사용X)
public <T extends 상위타입> 리턴타입 메소드(매개변수, ...){...}
* 타입 파라미터를 대체할 구체적인 타입
- 상위 타입이거나 하위 또는 구현 클래스만 지정 가능
- 메소드의 { } 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드, 메소드)만 가능
- 하위 타입에만 있는 필드, 메소드는 사용 X
와일드카드 타입 : <?>, <? extends ...>, <? super ...>
* 와일드카드(wildcard) : 코드에서 '?'를 부를때 사용
* 제네릭타입<?> : 제한 없음
- 타입 파라미터를 대치하는 구체적인 타입으로 모든 클래스나 인터페이스 타입이 올 수 있다.
- Course<?> 모든 타입이 될 수 있음 : Person, Worker, Student, HighStudent
* 제네릭 타입<? extends 상위타입> : 상위 클래스 제한
- 타입 파라미터를 대치하는 구체적인 타입으로 상위 타입이나 하위 타입만 올 수 있다.
-Course<? extends Student> : Student, HighStudent : Student를 상속받는 클래스와 자기 자신만 넣을 수 있음
* 제네릭 타입<? extends 하위타입> : 하위 클래스 제한
- 타입 파라미터를 대치하는 구체적인 타입으로 하위 타입이나 상위 타입이 올 수 있다.
- Course<? super Worker> : Worker, Person : Worker의 부모 클래스와 자기 자신만 넣을 수 있음
제네릭 타입의 상속과 구현
* 제네릭 타입을 부모 클래스로 사용할 경우
- 타입 파라미터는 자식 클래스에도 기술해야 함
public class ChildProduct<T,M> extends Product<T,M> {...}
- 추가적인 타입 파라미터를 가질 수 있음
public class ChildProduct<T,M,C> extends Product<T,M> {...}
* 제네릭 인터페이스를 구현할 경우
- 제네릭 인터페이스를 구현한 클래스도 제네릭 타입
'Language > JAVA' 카테고리의 다른 글
열아홉번째날[IO기반 입출력 및 네트워킹(1) - IO 패키지 소개 / 입력 스트림 / 출력 스트림 / 콘솔 / 파일 입출력 / 보조 스트림 ] (0) | 2022.08.18 |
---|---|
열여덟번째날[컬렉션 프레임워크] (0) | 2022.08.16 |
열여섯번째날 [제네릭(1) - 제네릭 사용하는 이유 / 제네릭타입 / 멀티 타입 파라미터] (0) | 2022.08.12 |
열여섯번째날 [멀티 스레드(2) - 동기화 메소드 / 동기화 블록 / 스레드 상태 / 데몬 스레드 / 스레드 그룹 / 스레드 풀] (0) | 2022.08.12 |
열다섯번째날 [멀티 스레드 - 개념 / 작업 스레드 생성과 실행 / 스레드 우선순위] (0) | 2022.08.11 |
- Total
- Today
- Yesterday
- 딕셔너리
- StringTokenizer 클래스
- Calendar 클래스
- not_in
- StringBuffer 클래스
- 기본 API 클래스
- Format 클래스
- IndexError
- 스레드 스케줄링
- java.time.package
- 문자열함수
- 프로그램
- Random 클래스
- 순환할당
- StringBuilder 클래스
- 역반복문
- Arrays 클래스
- 리스트연산자
- 함수
- python
- FALSE
- Date 클래스
- 파이썬
- 자료형
- Pattern 클래스
- 리스트
- Objects 클래스
- 요소선택
- Math 클래스
- 포장 클래스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |