코드 그라데이션

후발대 12일차 전체 코드 본문

Java/후발대

후발대 12일차 전체 코드

완벽한 장면 2023. 1. 27. 10:26

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
Comments