_01_Generics
public class _01_Generics {
public static void main(String[] args) {
// 제네릭스
Integer[] iArray = {1, 2, 3, 4, 5};
Double[] dArray = {1.0, 2.0, 3.0, 4.0, 5.0};
String[] sArray = {"A", "B", "C", "D", "E"};
printIntArray(iArray);
printDoubleArray(dArray);
printStringArray(sArray);
System.out.println("-----------------------");
printAnyArray(iArray);
printAnyArray(dArray);
printAnyArray(sArray);
}
// T : Type, K : Key, V : Value, E : Element <>
private static <T> void printAnyArray(T[] array) {
for (T t : array) {
System.out.print(t + " ");
}
System.out.println();
}
private static void printStringArray(String[] sArray) {
for (String s : sArray) {
System.out.print(s + " ");
}
System.out.println();
}
private static void printDoubleArray(Double[] dArray) {
for (double d : dArray) {
System.out.print(d + " ");
}
System.out.println();
}
private static void printIntArray(Integer[] iArray) {
for (int i : iArray) {
System.out.print(i + " "); // 1 2 3 4 5
}
System.out.println();
}
}
제네릭 클래스 - (1)
_02_GenericClass
public static void main(String[] args) {
// 제네릭 클래스
CoffeeByNumber c1 = new CoffeeByNumber(33);
c1.ready();
CoffeeByNickname c2 = new CoffeeByNickname("유재석");
c2.ready();
System.out.println("---------------------");
CoffeeByName c3 = new CoffeeByName(34);
c3.ready();
CoffeeByName c4 = new CoffeeByName("박명수");
c4.ready();
System.out.println("---------------------");
int c3Name = (int) c3.name;
System.out.println("주문 고객 번호 : " + c3Name);
String c4Name = (String) c4.name;
System.out.println("주문 고객 이름 : " + c4Name);
// c4Name = (String) c3.name;
*Object 형을 통해 호출을 시도 but,
*c4Name = (String) c3.name; // 즉 형변환이 안되는 문제 발생
CoffeeByName
public class CoffeeByName {
public Object name; // Integer, Double, String, BlackBox...
public CoffeeByName(Object name) {
this.name = name;
}
public void ready() {
System.out.println("커피 준비 완료 : " + name);
}
}
제네릭 클래스 - (2)
_02_GenericClass
System.out.println("---------------------");
Coffee<Integer> c5 = new Coffee<>(35);
c5.ready();
int c5Name = c5.name;
System.out.println("주문 고객 번호 : " + c5Name);
Coffee<String> c6 = new Coffee<>("조세호");
c6.ready();
String c6Name = c6.name;
System.out.println("주문 고객 이름 : " + c6Name);
* 제네릭스 클래스로 해결
Coffee
public class Coffee <T>{
public T name;
public Coffee(T name) {
this.name = name;
}
public void ready() {
System.out.println("커피 준비 완료 : " + name);
}
}
제네릭 클래스 - (3)
_02_GenericClass
CoffeeByUser<User> c7 = new CoffeeByUser<>(new User("강호동"));
c7.ready();
CoffeeByUser<User> c8 = new CoffeeByUser<>(new VIPUser("서장훈"));
c8.ready();
Chap09> user > User
public class User {
public String name;
public User(String name) {
this.name = name;
}
public void addPoint() {
System.out.println(this.name + "님, 포인트 적립되었습니다.");
}
}
Chap09> user > VIPUser
public class VIPUser extends User {
public VIPUser(String name) {
super("특별한 " + name);
}
}
Chap09> coffee > CoffeeByUser
import chap_09.user.User;
public class CoffeeByUser <T extends User>{
public T user;
public CoffeeByUser(T user) {
this.user = user;
}
public void ready() {
System.out.println("커피 준비 완료 : " + user.name);
user.addPoint();
}
}
*특정 클래스만 상속하는 제네릭 클래스
제네릭 클래스 - (4)
_02_GenericClass
orderCoffee("김영철");
orderCoffee(36);
orderCoffee("김희철", "아메리카노");
orderCoffee(37, "라떼");
}
public static <T> void orderCoffee(T name) {
System.out.println("커피 준비 완료 : " + name);
}
public static <T, V> void orderCoffee(T name, V coffee) {
System.out.println(coffee + " 준비 완료 : " + name);
}
}
'인강 보습 (인프런,유데미,패스트캠퍼스) > 나도코딩의 자바 기본편' 카테고리의 다른 글
제네릭스 (3) - HashSet, HashMap, Iterator (0) | 2023.01.18 |
---|---|
제네릭스 (2) - Wrapper 클래스, ArrayList, LinkedList (0) | 2023.01.18 |
추상 클래스와 인터페이스 (0) | 2023.01.17 |
클래스 (3) - 메소드 오버라이딩, 다형성, Super, 참조, Final, 열거형 (0) | 2023.01.17 |
클래스 (2) - This, 생성자, Getter&Setter, 접근제어자, 패키지, 상속 (0) | 2023.01.17 |