-
[Java] 제네릭(generic) - 제네릭 메소드CSE/Java 2015. 9. 20. 10:42
제네릭은 여러 절로 구성되어 있습니다.
제네릭 메소드(<T, R> R method(T t))
제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말합니다.
제네릭 메소드를 선언하는 방법은 리턴 타입 앞에 <> 기호를 추가하고 타입 파라미터를 기술한 다음, 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 됩니다.
12public <타입 파라미터, ...> 리턴 타입 메소드명(매개변수, ...) { ... }cs 다음 boxing() 제네릭 메소드는 <> 기호 안에 타입 파라미터 T를 기술한 뒤, 매개 변수 타입을 명시적으로 지정해도 되고, 컴파일러가 매개값의 타입을 보고 구체적인 타입을 추정하도록 할 수도 있습니다.
1public <T> Box<T> boxing(T t) { ... }cs 제네릭 메소드는 두 가지 방식으로 호출할 수 있습니다.
코드에서 타입 파라미터의 구체적인 타입을 명시적으로 지정해도 되고, 컴파일러가 매개값의 타입을 보고 구체적인 타입을 추정하도록 할 수 있습니다.
12리턴타입 변수 = <구체적타입> 메소드명(매개 값);리턴타입 변수 = 메소드명(매개값);cs 다음 코드는 boxing() 메소드를 호출하는 코드입니다.
123Box<Integer> box = <Integer> boxing(100);Box<Integer> box = boxing(100);cs 다음 예제는 Util 클래스에 정적 제네릭 메소드로 boxing()을 정의하고 BoxingMethodExam 클래스에서 호출했습니다.
* Util.java
123456789101112131415package generic;public class Util {public static <T> Box<T> boxing(T t){Box<T> box = new Box<T>();box.set(t);return box;}}cs * BoxingMethodExam.java
1234567891011package generic;public class BoxingMethodExam {Box<Integer> box1 = Util.<Integer> boxing(100);int intValue = box1.get();Box<String> box2 = Util.<String> boxing("ABC");String strValue = box2.get();}cs 다음 예제는 Util 클래스에 정적 제네릭 메소드로 compare()를 정의하고 CompareMethodExam 클래스를 호출했습니다.
타입 파라미터는 K와 V로 선언되었는데, 제네릭 타입 Pair가 K와 V를 가지고 있기 때문입니다.
compare() 메소드는 두 개의 Pair를 매개값으로 받아 K와 V 값이 동일한지 검사하고 boolean 값을 리턴합니다.
* Util.java
123456789101112package generic;public class Util {public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {boolean keyCompare = p1.getKey().equals(p2.getKey());boolean valueCompare = p1.getValue().equals(p2.getValue());return keyCompare && valueCompare;}}cs * Pair.java
123456789101112131415161718192021222324252627282930package generic;public class Pair<K, V> {private K key;private V value;public Pair(K key, V value) {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;}}cs * CompareMethodExam.java
12345678910111213141516171819202122232425262728293031package generic;public class CompareMethodExam {public static void main(String[] args) {Pair<Integer, String> p1 = new Pair<>(1, "사과");Pair<Integer, String> p2 = new Pair<>(1, "사과");boolean result = Util.<Integer, String> compare(p1, p2);if (result) {System.out.println("논리적으로 동등한 객체입니다.");} else {System.out.println("논리적으로 동등하지 않은 객체입니다.");}Pair<String, String> p3 = new Pair<>("user1", "Jarc");Pair<String, String> p4 = new Pair<>("user2", "Jarc");boolean result2 = Util.compare(p3, p4);if (result2) {System.out.println("논리적으로 동등한 객체입니다.");} else {System.out.println("논리적으로 동등하지 않은 객체입니다.");}}}cs * 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.
'CSE > Java' 카테고리의 다른 글
[Java] 람다식 - Intro (0) 2015.09.20 [Java] 제네릭(generic) - 제네릭 타입의 상속과 구현 (0) 2015.09.20 [Java] 제네릭(generic) - 제한된 타입 파라미터, 와일드카드 타입 (1) 2015.09.20 [Java] 제네릭(generic) - 멀티 타입 파라미터 (0) 2015.09.20 [Java] 제네릭(Generic) - 제네릭 타입 (1) 2015.09.20 [Java] 제네릭(Generic) - Intro (0) 2015.09.20