👩🏻‍💻 Programming/Java

Generic 메소드 활용

한국의 메타몽 2022. 2. 4. 03:52

 

Generic 메소드의 활용

 

1. 두 점을 입력받아 한 점을 왼쪽위 모서리, 다른 한쪽을 오른쪽아래 모서리로 지정한다.

2. 사각형의 넓이를 double 형으로 계산하여 출력한다. 단, 입력되는 모서리의 값은 Integer일수도 있고, double일수도 있다.

 

 

코드 구성

 

 

  • GenericMethod : 두 점을 통해 사각형의 넓이를 구해 출력할 main 클래스
  • Point : 두 점을 저장할 제네릭 클래스

 

 

사각형의 넓이를 구하는 코드 예제

 

[ Point ]

package ch07;

public class Point <T,V>{
    T x;
    V y;

    Point(T x, V y){
        this.x = x;
        this.y = y;
    }

    public T getX(){
        return x;
    }

    public V getY(){
        return y;
    }
}

 

[ GenericMethod ]

package ch07;

public class GenericMethod {

    public static <T,V> double makeRectangle(Point<T,V>p1, Point<T,V>p2){
        double left = ((Number)p1.getX()).doubleValue(); // 1
        double right = ((Number)p2.getX()).doubleValue();
        double top = ((Number)p1.getY()).doubleValue();
        double bottom = ((Number)p2.getY()).doubleValue();

        double width = right-left;
        double height = bottom - top;

        return width * height;
    }

    public static void main(String[] args) {
        Point<Integer, Double> p1 = new Point<>(0, 0.0);
        Point<Integer, Double> p2 = new Point<>(10, 9.0); // <> 타입 내부는 비워둬도 OK
        double size = makeRectangle(p1,p2);
        System.out.println(size);

        Point<Integer, Integer> p3 = new Point<>(5,5);
        Point<Integer, Integer> p4 = new  Point<>(10,10);
        size = makeRectangle(p3,p4);
        System.out.println(size);
    }
}

* 1 ) 추상 클래스 Number는 클래스 BigDecimal, BigInteger, Byte, Double, Float, Integer, Long  Short 슈퍼 클래스이다.

Number 클래스의 각 서브 클래스는 주어진 수치를 형태 byte, double, float, int, long  short로 변환하는 메서드를 제공하지 않으면 안된다. (참고 링크 : http://cris.joongbu.ac.kr/course/java/api/java/lang/Number.html)

 

Number (Java 2 Platform SE 5.0)

java.lang 클래스 Number java.lang.Object java.lang.Number 모든 구현된 인터페이스: Serializable 알려진 직계 서브 클래스: AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short public abstract clas

cris.joongbu.ac.kr

 

[ 결과 ] 

90.0
25.0