실습 문제는 5월 19일 실습 문제.hwp에 있습니다.
시험에 나오는 건 절대 아니기 때문에 간단히 돌려보시기만 하면 됩니다.
class Orange2
{
int sugarContent;
public Orange2(int sugar) { sugarContent = sugar; }
public void showSugarContent() { System.out.println("오렌지 당도 " + sugarContent); }
}
class Apple2
{
int sugarContent;
public Apple2(int sugar) { sugarContent = sugar; }
public void showSugarContent() { System.out.println("사과 당도 " + sugarContent); }
}
class FruitBox1<T>
{
T item;
public void store(T item) { this.item = item; }
public T pullOut() { return item; }
}
public class assign4 {
public static void main(String[] args) {
FruitBox1<Orange2> fBox1 = new FruitBox1<Orange2>();
fBox1.store(new Orange2(10));
Orange2 org1 = fBox1.pullOut();
org1.showSugarContent();
FruitBox1<Apple2> fBox2 = new FruitBox1<Apple2>();
fBox2.store(new Apple2(20));
Apple2 app1 = fBox2.pullOut();
app1.showSugarContent();
}
}
제네릭에 대해 사용 방법을 익힐 수 있는 예제입니다.
class FruitBox2
{
Object item;
public void store(Object item) { this.item = item; }
public Object pullOut() { return item; }
}
앞서 assign3.java 파일에서 FruitBox 클래스를 이렇게 정의한다면,
메인 메소드에서 FruitBox 클래스의 객체를 선언할 때, 필요에 따라 형 변환을 일일이 해줘야 한다는 단점과,
Object 객체 인자를 넣을 자리에 String 인자나 다른 객체 인자를 넣어준다면
컴파일 오류가 발생한다는 단점이 있습니다. ( 인자의 형은 무조건 똑같아야 합니다. )
class OrangeBox
{
Orange item;
public void store(Orange item) { this.item = item; }
public Orange pullOut() { return item; }
}
FruitBox 클래스 대신에 OrangeBox 클래스를 정의하고 멤버 변수와 객체 인자를 Orange 로 정의할 수 있지만,
필요에 따라 OrangeBox, AppleBox, BananaBox 클래스를 각각 정의해야 한다는 번거로움이 있습니다.
class FruitBox1<T>
{
T item;
public void store(T item) { this.item = item; }
public T pullOut() { return item; }
}
이렇게 제네릭을 사용한다면, 메인 메소드에서 T를 Orange로 대체해서 객체를 생성하고,
T를 Apple로 대체하여 객체를 생성할 수 있습니다.
즉, 하나의 클래스 정의로 둘 이상의 클래스를 정의한 효과를 가져다줍니다!
해당 예제는 밑의 링크에서 가져왔습니다.