코드 그라데이션
후발대 12일차 전체 코드 본문
Generics (제네릭스)
- 다양한 타입의 객체를 지향하는 클래스나 인터페이스,또는 메서드를 정의하는 방법
- 똑같은 동작을 여러번 만들필요없이 딱 한번만 정의하고나서 여러타입에 대해서 지원을 해주도록 하는 것
_01Generics
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();
}
}
_02_GenericsClass
public class _02_GenericClass {
public static void main(String[] args) {
// 제네릭클래스
// 주문 번호, 닉네임으로 불러준다고 가정을 하겠음
// 33번 손님 커피준비되었습니다.
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;
System.out.println("--------------");
------------------
//wrapper 클래스 써야함
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);
System.out.println("--------------");
//<> 뒤에 꺽쇠에는 유저가 있어도 되고 없어도 됨
CoffeeByUser<User> c7 = new CoffeeByUser<>(new User("정우성"));
c7.ready();
CoffeeByUser<User> c8 = new CoffeeByUser<>(new VIPUser("박서준"));
c8.ready();
System.out.println("--------------");
// CoffeeByUser<User> c9 = new CoffeeByUser<>(new Camera());
}
}
CoffeeByNumber
public class CoffeeByNumber {
public int waitingNumber;
public CoffeeByNumber(int waitingNumber) {
this.waitingNumber = waitingNumber;
}
public void ready(){
System.out.println("커피준비 완료: "+waitingNumber);
}
}
CoffeeByNickName
public class CoffeeByNickname {
public String nickname;
public CoffeeByNickname(String nickname) {
this.nickname = nickname;
}
public void ready(){
System.out.println("커피 준비 완료: "+ nickname);
}
}
CoffeeByName
public class CoffeeByName {
public Object name; // Integer, Double, String, Camera...
public CoffeeByName(Object name) {
this.name = name;
}
public void ready() {
System.out.println("커피 준비 완료: "+ name);
}
}
Coffee
public class Coffee <T>{
public T name;
public Coffee(T name) {
this.name = name;
}
public void ready() {
System.out.println("커피 준비 완료: " + name);
}
}
User
public class User {
public String name;
public User(String name) {
this.name = name;
}
public void addPoint() {
System.out.println(this.name+"님, 포인트 적립되었습니다.");
}
}
VipUser
public class VIPUser extends User{
public VIPUser(String name) {
super("특별한" + name);
}
}
CoffeeByUser
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();
}
}
728x90
'Java > 후발대' 카테고리의 다른 글
후발대 13일차 전체 코드 (0) | 2023.02.03 |
---|---|
후발대 12일차 전체적 정리 (0) | 2023.01.27 |
후발대 11일차 수업 내용별 클래스 분류 (0) | 2023.01.23 |
후발대 11일차 전체 내용 (0) | 2023.01.23 |
후발대 10일차 개념별 클래스 분류 (1) | 2023.01.23 |
Comments