일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 패캠챌린지
- R
- 패스트캠퍼스
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- 직장인자기계발
- SKT
- 직장인인강
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- AI
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 알버트
- albert
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 패스트캠퍼스후기
- Today
- Total
제주 탈출 일지
패스트캠퍼스 챌린지 25일차 본문
252525225 레스고
08. < T extends 클래스 > 사용하기
상위 클래스의 필요성
T 자료형의 범위를 제한 할 수 있음
아무 클래스나 쓰면 안될 때...
<T extends 클래스>에서 클래스 부분은 일반적으로 직접 사용하지는 않기 때문에 abstract 클래스로 생성한다. 이 클래스를 상속받지 않은 클래스들은 T 자료형 범위 바깥에 있으므로 해당 제네릭 클래스를 사용할 수 없다,. 사용하고 싶으면 상위 클래스를 상속 받아야 한다.
GenericPrinter 클래스
package ch08;
public class GenericPrinter<T extends Material> {
private T material ;
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
public String toString() {
return material.toString();
}
}
T 는 Material 클래스를 상속한다. Material 클래스를 상속받지 않으면 제네릭 타입에 들어갈 수 없다.
Material 클래스
package ch08;
public abstract class Material {
public abstract void doPrinting();
}
doPrinting 추상 메소드만을 포함한 추상 클래스.
Plastic 클래스
package ch08;
public class Plastic extends Material {
public String toString() {
return "재료는 Plastic 입니다.";
}
@Override
public void doPrinting() {
// TODO Auto-generated method stub
}
}
doPrinting이 구현됨.. Powder도 동일하다.
Powder 클래스
package ch08;
public class Powder extends Material {
public String toString() {
return "재료는 Powder 입니다.";
}
@Override
public void doPrinting() {
// TODO Auto-generated method stub
}
}
GenericPrinterTest 클래스
public class GenericPrinterTest {
public static void main(String[] args) {
GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
powderPrinter.setMaterial(new Powder());
Powder powder = powderPrinter.getMaterial(); // 형변환 하지 않음
System.out.println(powderPrinter);
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
plasticPrinter.setMaterial(new Plastic());
Plastic plastic = plasticPrinter.getMaterial(); // 형변환 하지 않음
System.out.println(plasticPrinter);
/* GenericPrinter powderPrinter2 = new GenericPrinter();
powderPrinter2.setMaterial(new Powder());
Powder powder = (Powder)powderPrinter.getMaterial();
System.out.println(powderPrinter);
*/
//GenericPrinter<Water> printer = new GenericPrinter<Water>();
}
}
제네릭 타입에 포함된 Powder와 Plastic은 GenericPrinter를 사용할 수 있지만 water와 같은 다른 클래스들은 제네릭프린터를 사용할 수 없다.(상속받지 않았기 때문)
<T extends 클래스> 를 쓰면서 써야하는 자료형에 대한 한정을 지어주고, 공통으로 써야하는 여러 메소드를 상위클래스에서 지정할 수도 있다.
09. 제네릭 메서드 활용하기
자료형 매개변수를 메서드의 매개변수나 반환 값으로 가지는 메서드
자료형 매개 변수가 하나 이상인 경우도 있음.
제네릭 클래스가 아니어도 내부에 제네릭 메서드는 구현하여 사용 할 수 있음.
public <자료형 매개 변수> 반환형 메서드 이름(자료형 매개변수.....) { }
Point 클래스
package ch09;
public class Point <T,V> {
T x;
V y;
Point(T x, V y) {
this.x = x;
this.y = y;
}
public T getX() {
return x;
}
public V getY() {
return y;
}
}
GenericMethod 클래스
package ch09;
public class GenericMethod {
public static <T, V> double makeRectangle(Point<T, V> p1, Point<T, V> p2) {
double left = ((Number)p1.getX()).doubleValue();
double right = ((Number)p2.getX()).doubleValue();
double top = ((Number)p1.getY()).doubleValue();
double bottom = ((Number)p2.getY()).doubleValue();
double width = right - left;
double height = bottom - top;
return width * height;
}
public static void main(String[] args) {
Point<Integer, Double> p1 = new Point<Integer, Double> (0, 0.0);
Point<Integer, Double> p2 = new Point<> (10, 10.0);
double rect = GenericMethod.<Integer, Double> makeRectangle(p1, p2);
System.out.println("두 점으로 만들어진 사각형의 넓이는 " + rect + "입니다.");
}
}
GenricMethod 클래스는 제네릭 타입이 아니지만, 제네릭 메소드를 사용할 수 있따. GenericMethod.makeRectangle<T, V>는 Point<T, V> 인 제네릭 클래스를 받기 위해서 <T,V> 를 받는 제네릭 메소드로 만들어져 있다.
+ Number 클래스를 처음 본 것 같은데, java.lang.Number
Number is an abstract superclass for numeric scalar types. Integer, Long, Float and Double are subclasses of Number that bind to a particular representation.
라고 한다. 숫자로 된 모든 서브 클래스들을 대표하는 추상 클래스라는 설명이다.
제네릭 클래스 자체가 쉽진 않다..
오늘은 여기까지만....
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'패스트캠퍼스 챌린지!' 카테고리의 다른 글
패스트캠퍼스 챌린지 27일차 (0) | 2021.10.02 |
---|---|
패스트캠퍼스 챌린지 26일차 (0) | 2021.10.01 |
패스트캠퍼스 챌린지 24일차 (0) | 2021.09.29 |
패스트캠퍼스 챌린지 23일차 (0) | 2021.09.28 |
패스트캠퍼스 챌린지 22일차 (0) | 2021.09.27 |