※다양한 종류의 데이터를 처리할 수 있는 클래스와 메소드를 작성하는 기법
※어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 사용할 수 있도록 프로그래밍 하는 것
//T : Type Parameter(타입 파라미터 = 자료형 매개변수)
public class GenericPrinter<T> { //T : Type Parameter(타입 파라미터 = 자료형 매개변수)
}
제네릭을 쓰면 형변환을 안해줘도 된다!! 더 깔끔하다 + 실수안할 가능성 높아진다
※예시를 만들어보자
빨간볼, 노랑볼, 블루볼을 T에 넣을때 각자 나오도록
package practice0418;
class RedBall {
private String color = "빨강";
public String toString() {
return "공색깔은 " + color + "입니다";
}
}
class YellowBall {
private String color = "노랑";
public String toString() {
return "공색깔은 " + color + "입니다";
}
}
class BlueBall {
private String color = "파랑ㄴ";
public String toString() {
return "공색깔은 " + color + "입니다";
}
}
class BallBox<T> {
private T color;
public T getColor() {
return color;
}
public void setColor(T colorsss) {
this.color = colorsss;
}
}
public class BallShoot {
public static void main(String[] args) {
BallBox<RedBall> ball = new BallBox<>();
ball.setColor(new RedBall());
RedBall b = ball.getColor();
System.out.println(b);
BallBox<BlueBall> ball1 = new BallBox<>();
ball1.setColor(new BlueBall());
BlueBall b1 = ball1.getColor();
System.out.println(b1);
BallBox<YellowBall> ball2 = new BallBox<>();
ball2.setColor(new YellowBall());
YellowBall b2 = ball2.getColor();
System.out.println(b2);
}
}
※응용을 해보자 extends를 쓴다면 그 클래스 or 그 자식만 올수있도록 제한가능하다
package practice0418;
class YellowBall {
private String color = "노랑";
public String toString() {
return "공색깔은 " + color + "입니다";
}
}
class BlueBall {
private String color = "파랑ㄴ";
public String toString() {
return "공색깔은 " + color + "입니다";
}
}
class Ball {
String color;
public Ball(String color) {
this.color = color;
}
}
class RedBall extends Ball {
// private String color = "빨강";
public RedBall() {
super("빨강");
}
public String toString() {
return "공색깔은 " + color + "입니다";
}
}
class BallBox<T extends Ball> {
private T color;
public T getColor() {
return color;
}
public void setColor(T colorsss) {
this.color = colorsss;
}
}
public class BallShoot {
public static void main(String[] args) {
BallBox<RedBall> ball = new BallBox<>();
ball.setColor(new RedBall());
RedBall b = ball.getColor();
System.out.println(b);
//오류이유? -> extends로 ball클래스나 그 자식만 올수있다고 제한
BallBox<BlueBall> ball1 = new BallBox<>();
ball1.setColor(new BlueBall());
BlueBall b1 = ball1.getColor();
System.out.println(b1);
//오류이유? -> extends로 ball클래스나 그 자식만 올수있다고 제한
BallBox<YellowBall> ball2 = new BallBox<>();
ball2.setColor(new YellowBall());
YellowBall b2 = ball2.getColor();
System.out.println(b2);
}
}
'수업시간 JAVA > 이론' 카테고리의 다른 글
복습 파일 Input친구들 (0) | 2023.05.02 |
---|---|
Map (0) | 2023.04.26 |
PreparedStatement (0) | 2023.04.13 |
자바로 데이터베이스 연결 후 Statement로 (실제로 해킹위험있어서 안쓴다)->SELECT / INSERT/UPDATE/DELETE (0) | 2023.04.12 |
lombok /@Data/AllArgsConstructor/NoArgsConstructor (0) | 2023.04.12 |