JAVA generic class, generic method (230630)

이원건·2023년 6월 30일
0

JAVA

목록 보기
26/33
post-thumbnail

1. 지네릭(Generic)이란?

  • 이전에는 받을 타입을 제한하기가 어려웠다. 그래서 도입된 문법
  • Box < T > 이런 식으로 class 생성 가능
  • 객체 생성할 때 변수 선언 시 <>안에 클래스 명을 넣어주므로 생성자 쪽에 쓸 때는 <> 안을 생략해도 된다.
  • < T extends Class & Interface >
    • Class에 해당하는 클래스를 상속(확장)한 T 클래스만 들어올 수 있음.
    • T에 들어오는 클래스의 타입을 제한한다.
    • interface끼리의 상속도 가능
    • 대신 1개씩만 제한할 수 있음

2. 아래가 나오도록 프로그래밍 하시오.

  • 문제
class DDBoxDemo {
    public static void main(String[] args) {
        DBox<String, Integer> box1 = new DBox<>();
        box1.set("Apple", 25);

        DBox<String, Integer> box2 = new DBox<>();
        box2.set("Orange", 33);
       
        DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>();
        ddbox.set(box1, box2);

        System.out.println(ddbox);
    }
}
  • 실행 예
Apple & 25
Orange & 33
  • 코드
class DBox<S, N>{
	private S str;
	private N num;
	
	public void set (S str, N num) {
		this.str = str;
		this.num = num;
	}

	@Override
	public String toString() {
		return str +" & " + num;
	}
}

public class ExampleMain2 {
	public static void main(String[] args) {
		DBox<String, Integer> box = new DBox<>();        
        box.set("Apple", 25);
        System.out.println(box);// Apple & 25
	}
}
  • 실행결과
Apple & 25

3. 아래와 같이 출력값이 나오도록 프로그래밍 하시오.

  • 문제
public static void main(String[] args) {
    Box<Integer> box1 = new Box<>();
    box1.set(99);

    Box<Integer> box2 = new Box<>();
    box2.set(55);

    System.out.println(box1.get() + " & " + box2.get());
    swapBox(box1, box2);
    System.out.println(box1.get() + " & " + box2.get());
}
  • 실행 예
99 & 55
55 & 99
  • 코드
class Box7<T>{
	private T t;
	
	public void set(T t) {
		this.t = t;
	}
	public T get() {
		return t;
	}
	
}

class BoxFactory3{
	public static <T> Box7<T> makeBox(T t){
		Box7<T> box = new Box7<>();
		box.set(t);
		return box;
	}
}

public class ExampleMain4 {
	public static void main(String[] args) {
		Box7<String> sBox = BoxFactory3.<String>makeBox("Sweet");
        System.out.println(sBox.get());

        
        Box7<Double> dBox = BoxFactory3.<Double>makeBox(7.59);
        System.out.println(dBox.get());
	}
}
  • 실행결과
Sweet
7.59

4. 지네릭 메소드에 대하여 설명하시오.

  • public static < T > Box< T > makeBox(T t);

    일 때

    Box<T>

    타입을 return .

  • class에 < T > 없을 때 사용할 수 있다.

  • class에는 static을 붙일 수 없으므로 (내부 클래스에는 가능한 듯) static method에 (보통)사용하기 위해 하는 작업인 듯

    generic method는

    public static <T extends Class> Box<T> makeBox(T t);

    이런식으로 선언할 수 있다.

0개의 댓글