java/코드 리뷰

15. demo2 - (4) FruitDemo ( ☆ 제네릭 메서드)

Astaroth아스 2020. 4. 24. 15:59
1
2
3
4
5
6
7
8
9
10
11
package demo2;
 
public class Fruit {
    
    @Override
    public String toString() {
        return "과일";
    }
    
}
 
1
2
3
4
5
6
7
8
9
10
package demo2;
 
public class Apple extends Fruit {
    
    public String toString() {
        return "사과";
    }
    
}
 
 
1
2
3
4
5
6
7
8
9
10
package demo2;
 
public class Grape extends Fruit {
    
    public String toString() {
        return "포도";
    }
    
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package demo2;
 
import java.util.ArrayList;
 
public class FruitBox<T> {
    
    private ArrayList<T> list = new ArrayList<T>();
    
    public void add(T t) {
        list.add(t);
    }
    
    public T get(int index) {
        return list.get(index);
    }
    
    public int size() {
        return list.size();
    }
    
}
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package demo2;
 
public class Mixer {
    
    // 제네릭 메서드
    // 메서드가 여러 종류의 객체를 다루는 경우 (여러 객체를 매개변수로 다루거나,
    // (매개변수로 전달받아야 하는 경우) 제네릭 메서드로 만듬
    
    // 메서드의 리턴타입 앞체 제네릭 선언
    // 메서드 호출 전달 받은 객체의 타입 지점에서 T를 선언
    
    public static <T> void mix(FruitBox<T> box) {
        int size = box.size();
        for (int i=0; i<size; i++) {
            T t = box.get(i);
            System.out.println(t.toString() + "를 믹싱합니다.");
            
        }
        System.out.println();
    }
    
}
 
 
 
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
31
package demo2;
 
public class FruitDemo {
    
    public static void main(String[] args) {
        
        // Fruit, Apple, Grape 객체를 담는 과일 상자
        FruitBox<Fruit> box1 = new FruitBox<Fruit>();
        box1.add(new Fruit());
        box1.add(new Apple());
        box1.add(new Grape());
 
        // Apple만 담는 과일 상자
        FruitBox<Apple> box2 = new FruitBox<Apple>();
//        box2.add(new Fruit());
        box2.add(new Apple());
//        box2.add(new Grape());
 
        // Grape만 담는 과일 상자
        FruitBox<Grape> box3 = new FruitBox<Grape>();
//        box3.add(new Fruit());
//        box#.add(new Apple());
        box3.add(new Grape());
        
        Mixer.mix(box1); // 과일박스<Fruit>
        Mixer.mix(box2); // 과일박스<Apple>
        Mixer.mix(box3); // 과일박스<Grape>
 
    }
}