Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 친절한SQL튜닝
- iterator
- 리눅스
- 이터레이터
- 처음 만나는 AI수학 with Python
- 자바편
- 스프링부트핵심가이드
- baeldung
- GIT
- 선형대수
- 처음 만나는 AI 수학 with Python
- 코드로배우는스프링웹프로젝트
- 스프링 시큐리티
- 알파회계
- 자료구조와 함께 배우는 알고리즘 입문
- resttemplate
- network configuration
- 자료구조와함께배우는알고리즘입문
- 서버설정
- d
- 티스토리 쿠키 삭제
- Kernighan의 C언어 프로그래밍
- 네트워크 설정
- 구멍가게코딩단
- ㅒ
- 데비안
- 목록처리
- 코드로배우는스프링부트웹프로젝트
- /etc/network/interfaces
- 페이징
Archives
- Today
- Total
bright jazz music
제네릭 사용 연습: 03. 제네릭 메소드 본문
아래 페이지를 참고하였다.
http://www.tcpschool.com/java/java_generic_various
제네릭 메소드(Generic method)
- 제네릭 메소드란 메소드의 선언부에 타입 변수를 사용한 메소드를 의미.
- 이 때 타입변수의 선언은 메소드 선언부에서 반환 타입 바로 앞에 위치
public static <T> void sort(...) { ... }
아래 예제에서 제네릭 클래스에서 정의된 타입변수 T와 제네릭 메소드에서 사용된 타입변수 T는 별개의 것임을 주의.
class AnimalList<T> {
...
public static <T> void sort(List<T> list, Comparator<? super T> comp){
...
}
}
//제네릭 클래스에서 정의된 타입변수 T와 제네릭 메소드에서 사용된 타입변수 T는 별개이다.
와일드카드(wild card)의 사용
- 와일드카드란 이름에 제한을 두지 않음을 표현하는 데 사용하는 기호를 의미
- 자바의 제네릭에서는 물음표 기호(?)를 사용하여 와일드카드 사용 가능
<?> // 타입변수에 모든 타입을 사용할 수 있다.
<? extends T> // T 타입과 T 타입을 상속하는 자손 클래스 타입만을 사용할 수 있다.
<? super T> // T 타입과 T 타입이 상속한 조상 클래스 타입만을 사용할 수 있다.
- 아래 예제는 클래스 메소드(static method)인 cryingAnimalList() 메소드의 매개변수의 타입을 와일드카드를 사용하여 제한한다.
- 오직 LandAnimal클래스 타입과 LandAnimal를 상속한 자식 클래스 타입만이 cryingAnimalList()의 파라미터가 될 수 있다.
package com.example.demospring.testFile;
import java.util.ArrayList;
//부모 클래스
class LandAnimal{public void crying(){System.out.println("## LandAnimal");}}
//LandAnimal을 상속하는 자식클래스
class Cat extends LandAnimal{public void crying(){System.out.println("## cat cat");}}
class Dog extends LandAnimal{public void crying() {System.out.println("## dog dog");}}
//LandAnimal을 상속하지 *않는* 클래스
class Sparrow{public void Crying(){System.out.println("## chup chup");}}
class AnimalList<T> {
ArrayList<T> animalList = new ArrayList<T>();
//클래스(정적) 메소드 cryingAnimalList()
//오직 LandAnimal클래스 타입과 LandAnimal를 상속한 자식 클래스 타입만이 cryingAnimalList()의 파라미터가 될 수 있다.
public static void cryingAnimalList(AnimalList<? extends LandAnimal> animalList){
//LandAnimal landAnimal = animalList.animalList.get(0); 이렇게 해도 되지만 get을 만들었다.
LandAnimal landAnimal = animalList.get(0);
landAnimal.crying();
}
void add(T animal){animalList.add(animal);}
T get(int index){return animalList.get(index);}
int size(){return animalList.size();}
}
public class TestGeneric03 {
public static void main(String[] args){
AnimalList<Cat> catList = new AnimalList<Cat>();
AnimalList<Dog> dogList = new AnimalList<Dog>();
AnimalList<Sparrow> sparrowList = new AnimalList<Sparrow>();
catList.add(new Cat());
dogList.add(new Dog());
sparrowList.add(new Sparrow());
AnimalList.cryingAnimalList(catList);
AnimalList.cryingAnimalList(dogList);
//AnimalList.cryingAnimalList(sparrowList); //오류발생: Sparrow클래스는 LandAnimal을 상속하지 않기 때문.
}
}
/*
## cat cat
## dog dog
*/
'JAVA' 카테고리의 다른 글
제네릭 사용 연습 : 02. 다양한 제네릭 표현 (0) | 2022.11.02 |
---|---|
제네릭 사용 연습: 01. 제네릭의 개념 (0) | 2022.11.02 |
이터레이터 사용 연습 (0) | 2022.11.01 |
Spring: 컨트롤러의 파라미터 수집과 변환 (0) | 2022.04.07 |
스프링부트 war파일 배포 참고용 (0) | 2021.05.23 |
Comments