📁 ex01
☕ Main.java
// 제네릭 메소드
// T : 타입변수. 원하는 어떤 이름으로든 명명 가능
public static <T> T pickRandom (T a, T b) {
return Math.random() > 0.5 ? a : b;
}
int randNum = pickRandom(123, 456);
boolean randBool = pickRandom(true, false);
String randStr = pickRandom("마루치", "아라치");
// import sec05.chap08.ex01.YalcoChicken;
YalcoChicken store1 = new YalcoChicken("판교");
YalcoChicken store2 = new YalcoChicken("역삼");
YalcoChicken randStore = pickRandom(store1, store2);
// ⚠️ 타입이 일관되지 않고 묵시적 변환 불가하면 오류
// double randFlt = pickRandom("hello", "world");
double randDbl = pickRandom(12, 34);
public static <T> void arraySwap (T[] array, int a, int b) {
if (array.length <= Math.max(a, b)) return;
T temp = array[a];
array[a] = array[b];
array[b] = temp;
}
// 원시값 배열(double[])을 쓰면 오류 - 배열로는 오토박싱이 안 되므로
Double[] array1 = new Double[] {
1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8
};
Character[] array2 = new Character[] {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'
};
arraySwap(array1, 3, 5);
arraySwap(array2, 2, 7);
// 셔플
for (int i = 0; i < 100; i++) {
arraySwap(
array2,
(int) Math.floor(Math.random() * array2.length),
(int) Math.floor(Math.random() * array2.length)
);
}
📁 ex02
☕ Pocket.java
// 원하는 자료형들로 세 개의 필드를 갖는 클래스
public class Pocket<T1, T2, T3> {
private T1 fieldA;
private T2 fieldB;
private T3 fieldC;
public Pocket(T1 fieldA, T2 fieldB, T3 fieldC) {
this.fieldA = fieldA;
this.fieldB = fieldB;
this.fieldC = fieldC;
}
public T1 getFieldA() {
return fieldA;
}
public T2 getFieldB() {
return fieldB;
}
public T3 getFieldC() {
return fieldC;
}
}
☕ Main.java