Link Search Menu Expand Document

Generic Method

Table of contents

  1. Generic Method Basic
  2. Method Compare

Generic Method

Generic Method Basic

제네릭 클래스를 메소드에서 이용

제네릭 메소드란 메소드의 선언부에 타입 변수를 사용한 메소드를 의미

이때 타입 변수의 선언은 메소드 선언부에서 반환 타입 바로 앞에 위치

Generic Class

public class Box<T> {

	private T t;
	
	public T get() {
		return t;
	}
	
	public void set(T t) {
		this.t = t;
	}
	
}

Generic Method

public class Util {

	//1. 일반메서드
	public static Box method(Box box) {
		Box box1 = new Box();
		box1.set("hammer");
		return box1;
	}
	
	//2. 제네릭메서드
    //Box<T>를 객체로 해서 제네릭으로 선언된 타입만 들어오게  메소드를 선언하고 있음
    //호출하면 안에서 데이터 타입에 맞는 box객체를 생성후 값을 지정한후 돌려줌
	public static <T> Box<T> boxing(T t) {
		Box<T> box = new Box();
		box.set(t);
		return box;
	}
	
}

실행부

public class MethodMain {
public static void main(String[] args) {
	
	Box<Integer> boxA = Util.boxing(1000);
	Integer val1 = boxA.get();
	System.out.println(val1);
	
	Box<String> boxB = Util.boxing("망치");
	String val2 = boxB.get();
	System.out.println(val2);
	
	Box<Car> boxC = Util.boxing(new Car());
	Car car = boxC.get();
	System.out.println(car);
	
	Box<Apple> 사과상자 = Util.boxing(new Apple());
	Apple apple = 사과상자.get();
	System.out.println(apple);
}
}

class Car{
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "포르쉐";
	}
}

Method Compare

메소드가 동일 객체인지 확인하는 방법

  1. Util 클래스에서 정적제네릭 메서드 compare()메서드를 정의하고
  2. main()에서 compare() 메서드를 호출해서
  3. pair클래스에서는 제네릭 타입으로 Key, Value(K,Y)를 정의한 후에 동일객체 여부를 비교

Pair

public class Pair<K, V> {

	private K key;
	private V value;
	
	public Pair(K key, V value) {
		super();
		this.key = key;
		this.value = value;
	}

	public K getKey() {
		return key;
	}

	public void setKey(K key) {
		this.key = key;
	}

	public V getValue() {
		return value;
	}

	public void setValue(V value) {
		this.value = value;
	}
	
}

Util

public class Util {
	
	public static <K, Y> boolean compare(Pair<K, Y> p1, Pair<K, Y> p2){
		
		boolean keyCompare = p1.getKey().equals(p2.getKey());
		boolean valCompare = p1.getValue().equals(p2.getValue());
		return keyCompare && valCompare;
		
	}
	
}

CompareMain

public class CompareMain {
public static void main(String[] args) {
    
	Pair<Integer, String> p1 = new Pair<Integer, String>(1, "소향");
	Pair<Integer, String> p2 = new Pair<Integer, String>(1, "소향");
	Pair<String, String> p3 = new Pair<String, String>("홍길동", "소향동");
	Pair<String, String> p4 = new Pair<String, String>("홍길동", "소향");
                                        
	// 1. 제네릭 메서드를 명시적으로 호출
	Boolean result = Util.<Integer, String>compare(p1, p2);
	if(result) {
		System.out.println("논리적으로 동일 객체");
	}else {
		System.out.println("논리적으로 다른 객체");
	}
	
	// 2. 제네릭메서드를 묵시적으로 호출(추정)
	result = Util.compare(p3, p4);
	if(result) {
		System.out.println("논리적으로 동일 객체");
	}else {
		System.out.println("논리적으로 다른 객체");
	}
	
}
}

이 웹사이트는 jekyll로 제작되었습니다. Patrick Marsceill, Distributed by an MIT license.