quilt code
[고급자바] 제너릭 (1) 본문
1. Args
| 가변형 인수 : 메소드 매개변수의 개수가 실행될 때마다 다를때 사용함 |
| 1) 가변형 인수는 메소드 안에서는 배열로 처리된다. 2) 가변형 인수는 한가지 자료형만 사용할 수 있다. |
1) 배열을 이용한 메소드 (매개변수로 받은 정수들의 합계를 구하는 메소드(이 정수들의 개수는 상황에 따라 다르다)
|
1
2
3
4
5
6
7
8
9
10
|
public class T01ArgsTest {
public int sumArr(int[] data) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return sum;
}
|
cs |
2) 가변형 인수를 이용한 메소드
|
1
2
3
4
5
6
7
8
|
public int sumArg(int...data ) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return sum;
}
|
cs |
3) 가변형 인수와 일반적인 인수를 같이 사용(가변형 인수를 제일 뒤쪽에 배치해야 한다.)
|
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
|
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) {
T01ArgsTest at = new T01ArgsTest();
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(at.sumArg2("홍길동", 1,2,3,4,5,6,7,8));
}
}
|
cs |
2. Generic
제너릭 클래스 만드는 방법 <형식> class 클래스명<제너릭타입글자> { 제너릭타입글자 변수명; // 변수선언에 제너릭을 사용할 경우 ... 제너릭타입글자 메소드명() { // 반환값이 있는 메소드에서 사용할 경우 ... return 값; } ... } |
제너릭타입글자 T : Type K : Key V : Value E : Element (자료구조에 들어가는 요소들을 나타낼 때 사용) |
|
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
29
30
31
32
|
public class T02GenericClassTest {
public static void main(String[] args) {
NonGenericClass ng1 = new NonGenericClass();
ng1.setVal("가나다라");
NonGenericClass ng2 = new NonGenericClass();
ng2.setVal(100);
String rtnVal1 = (String) ng1.getVal();
System.out.println("문자열 반환값 rtnVal1 : " + rtnVal1);
Integer irtnVal2 = (Integer) ng2.getVal();
System.out.println("정수형 반환값 irtnVal2 : " + irtnVal2);
System.out.println();
MyGeneric<String> mg1 = new MyGeneric<String>();
MyGeneric<Integer> mg2 = new MyGeneric<Integer>();
mg1.setVal("우리나라"); // 타입 체크
mg2.setVal(500);
rtnVal1 = mg1.getVal();
irtnVal2 = mg2.getVal();
System.out.println("제너릭 문자열 반환값 : " + rtnVal1);
System.out.println("제너릭 정수형 반환값 : " + irtnVal2);
}
}
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class NonGenericClass{
private Object val;
public Object getVal() {
return val;
}
public void setVal(Object val) {
this.val = val;
}
}
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class MyGeneric<T>{
private T val;
public T getVal() {
return val;
}
public void setVal(T val) {
this.val = val;
}
}
|
cs |
** 제너릭 메소드에 대하여
- 파라미터 타입과 리턴타입으로 타입문자(글자)를 가지는 메소드
- 선언방법 : 리턴타입 앞에 <> 기호를 추가하고 타입문자를 기술 후 사용한다.
|
1
2
3
4
5
6
7
8
|
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 |
1) 멀티타입 <K,V>를 가지는 제너릭 클래스
|
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
29
|
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;
}
public <K, V> void displayAll(K key, V val) {
System.out.println(key + " : " + val);
}
}
|
cs |
|
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
29
|
public class T03GenericMethodTest {
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.<Integer, String>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>("002","홍길동");
boolean result2 = Util.<String, String>compare(p3,p4);
if(result1) {
System.out.println("논리(의미)적으로 동일한 객체임.");
} else {
System.out.println("논리(의미)적으로 동일한 객체가 아님.");
}
p1.<String, Integer>displayAll("홍길동", 100);
}
}
|
cs |
'daily > 고급자바' 카테고리의 다른 글
| [고급자바] 와일드 카드 (0) | 2023.02.03 |
|---|---|
| [고급자바] 제너릭 (2) (0) | 2023.02.03 |
| [고급자바] 컬렉션 프레임워크(4) (0) | 2023.02.02 |
| [고급자바] Student 과제 (0) | 2023.02.02 |
| [고급자바] Lotto 과제 (0) | 2023.02.02 |