Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Java
- oclick 동적
- 객체
- 변수
- 연산자
- 코딩
- 조건문
- enum
- IBatis CRUD
- 계산기
- 고급자바
- 동적 데이터
- 동적 문자열
- 자바
- Thread
- IBatis 게시판
- I/O
- 동적 버튼 onclick
- MAP
- 객체지향
- 기초
- 동적 버튼 생성
- 변수초기화
- comparator
- iBatis
- 쓰레드
- 변수선언
- Comparable
- io
- ListSort
Archives
- Today
- Total
Jun's Blog
[Java] 예제를 보며 Generic에 대해 알아보자 본문
가변형 인수 => 메서드의 매개변수의 갯수가 실행될 때마다 다를 때 사용한다.
- 가변형 인수는 메서드 안에서는 배열로 처리된다.
- 가변형 인수는 한 가지 자료형에만 사용할 수 있다.
public class T01_ArgsTest {
// 배열을 이용한 메서드
// 매개변수로 받은 정수들의 합계를 구하는 메서드(이 정수들의 개수는 상황에 따라 다르다.)
public int sumArr(int[] data) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return sum;
}
// 가변형 인수를 이용한 메서드
public int sumArg(int...data) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return sum;
}
// 가변형 인수와 일반적인 인수를 같이 사용할 경우에는 가변형 인수를 제일 뒤쪽에 배치해야 한다.
public String sumArg2(String name, int...data) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return name + "씨 점수 : " + sum;
}
public static void main(String[] args) {
T01_ArgsTest at = new T01_ArgsTest();
int[] nums = {100, 200, 300};
System.out.println(at.sumArr(nums));
System.out.println(at.sumArr(new int[] {1,2,3,4,5}));
System.out.println();
System.out.println(at.sumArg(100, 200, 300));
System.out.println(at.sumArg(1,2,3,4,5));
System.out.println();
System.out.println(at.sumArg2("홍길동", 1,2,3,4,5,6,7,8,9));
}
}
Generic Calss 만드는 방법
형식)
class 클래스명 <제너릭 타입 글자> {
제너릭타입글자 변수명; // 변수선언에 제너릭을 사용할 경우
. . .
제너릭타입글자 메서드명() { // 반환값이 있는 메서드에 사용
. . .
return 값;
}
. . .
}
--Generic 타입 글자--
T => Type
K => Key
V => Value
E => Element(자료구조에 들어가는 항목들을 나타낼 때 사용)
import java.util.Iterator;
class NonGeneric{
private Object val;
public Object getVal() {
return val;
}
public void setVal(Object val) {
this.val = val;
}
}
class MyGeneric<T>{
private T val;
public T getVal() {
return val;
}
public void setVal(T val) {
this.val = val;
}
}
public class T02_GenericTest {
public static void main(String[] args) {
NonGeneric ng1 = new NonGeneric();
ng1.setVal("가나다라");
NonGeneric ng2 = new NonGeneric();
ng2.setVal(100);
String rtnNg1 = (String)ng1.getVal();
System.out.println("문자열 반환값 rtnNg1 => " + rtnNg1 );
Integer irtnNg2 = (Integer)ng2.getVal();
System.out.println("정수 반환값 rtnNg1 => " + irtnNg2);
System.out.println();
MyGeneric<String> mg1 = new MyGeneric<String>();
MyGeneric<Integer> mg2 = new MyGeneric<>();
mg1.setVal("우리나라");
mg2.setVal(500);
rtnNg1 = mg1.getVal();
irtnNg2 = mg2.getVal();
System.out.println("제너릭 문자열 반환값 : " + rtnNg1);
System.out.println("제너릭 정수형 반환값 : " + irtnNg2);
}
}
class Util {
/**
* 제너릭 메서드<T, R> R method(T t) 파라미터 타입과 리턴타입으로 타입파라미터를 가지는 메서드 선언방법: 리턴타입 앞에<>
* 기호를추가하고 타입파라미터를 기술 후 사용함.
*
* @param p1
* @param p2
* @return
*/
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
boolean keyCompare = p1.getKey().equals(p2.getKey());
boolean valuecCompare = p1.getKey().equals(p2.getValue());
return keyCompare && valuecCompare;
}
}
/**
* 멀티타입<K,V> 가지는 제너릭 클래스
*
* @param <K>
* @param <V>
*/
class Pair<K, V> {
private K key;
private V 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;
}
public Pair(K key, V value) {
super();
this.key = key;
this.value = value;
}
// 키와 값 출력한느 메서드
public <K,V> void displayAll(K key, V value) {
System.out.println(key.toString() + " : " + value);
}
}
public class T03_GenericMethodTest {
public static void main(String[] args) {
Pair<Integer, String> p1 = new Pair<Integer, String>(1, "홍길동");
Pair<Integer, String> p2 = new Pair<Integer, String>(1, "홍길동");
// 구체적 타입을 일시적으로 지정
boolean result1 = Util.compare(p1, p2);
if (result1) {
System.out.println("논리적(의미)으로 동일한 객체임.");
}else {
System.out.println("논리적(의미)으로 동일한 객체아님.");
}
Pair<String, String> p3 = new Pair<String, String>("001", "홍길동");
Pair<String, String> p4 = new Pair<String, String>("001", "홍길동");
boolean result2 = Util.compare(p3, p4);
if (result2) {
System.out.println("논리적(의미)으로 동일한 객체임.");
}else {
System.out.println("논리적(의미)으로 동일한 객체아님.");
}
// 제너릭 메서드 호출
p1.<String, Integer>displayAll("키값", 1234);
}
}
Comments