- 제네릭(모형자) → 템플릿(모형자)
- generic <> angle blanket
- 컬렉션 프레임워크
- Vector, ArrayList, Map, Set
- 제네릭
- 자료형이 딱히 정해지지 않은 것..
- 여러 참조 자료형이 쓰일 수 있는 곳에 특정한 자료형을 지정하지 않고, 클래스나 메서드를 정의한 후 사용하는 시점에 어떤 자료형을 사용할 것인지 지정하는 방식
- 클래스명<T> : 참조자료형이 정해져있지 않음
- <> : 모형자
- T : type의 약자, 자료형 매개변수
- 나중에 클래스를 사용할 때 T 위치에 실제 사용할 자료형을 지정한다.
class Java {
String title;
Java(String t) { title = t; }
void show() { System.out.println(title); }
}
class DB {
int n;
DB(int n) { this.n = n; }
void pr() { System.out.println(n); }
}
class Program<T> { //모형자 <> : 제네릭 기호
T t; //T:클래스 명 t:참조변수 (Java, DB 가 올 수 있다..)
void in(T t) {
this.t = t; //초기화
}
T get() {
return t;
}
}
public class CollEx07generic {
public static void main(String[] args) {
//T 구체화
Program <Java> p =
new Program<Java>();
p.in(new Java("자바입니다.")); //Java p = new Java("java");
Java j = p.get();
j.show();
Program <DB> d =
new Program<>();
d.in(new DB(30));
DB db = d.get();
db.pr();
}
}
- 제네릭 메서드
- public <자료형 매개변수> 반환형 메서드 이름(자료형 매개변수 ...){ }
class AA {
public String toString() {
//line 19. 객체 출력을 문자열로 하기 위해 오버라이딩함.
return "AA";
}
}
class BB {
public String toString() { //오버라이드
return "BB";
}
}
class In {
<T> void show(T t) { //제네릭 메서드
System.out.println(t);
}
void show() { //오버로드
System.out.println("generic");
}
}
public class CollEx08generic {
public static void main(String[] args) {
AA a = new AA();
BB b = new BB();
In i = new In();
i.show(); //generic
i.<AA>show(a); //AA t = a;
i.<BB>show(b); //BB
}
}
- main() 을 보고 Gen클래스를 작성하시오
public class Review0602B {
public static void main(String[] args) {
Gen<String> g = new Gen<String>("seoul","busan");
System.out.println(g.one()); //seoul 출력
System.out.println(g.two()); //busan 출력
System.out.println(g.three()); //false 출력 (두 문자열 비교)
}
}
class Gen<T> {
T t, t1;
public Gen(T t, T t1) {
this.t=t; this.t1=t1;
}
T one() {
return t;
}
T two() {
return t1;
}
boolean three() {
return t.equals(t1);
}
/*
Boolean three() {
if(t.equals(t1)) {
return true;
}
return false;
}
*/
}
- LinkedList
class Box<T>{ //제네릭 클래스
Box<T> next;
T t;
void in(T t) {
this.t=t;
}
T out() {
return t;
}
}
public class CollEx14LinkedList {
public static void main(String[] args) {
Box<Integer> b = new Box<Integer>(); //T를 <Integer>로 구체화
// b.in(new Integer(30)); //Integer b = new Integer(30);
b.in(30);
b.next = new Box<Integer>();
b.next.in(40); //객체에 한번 더 접근
b.next.next = new Box<Integer>();
b.next.next.in(50);
Box<Integer> tmp;
tmp = b.next;
System.out.println(tmp.out());
System.out.println("***** *****");
System.out.println(b.out());
System.out.println(b.next.out());
System.out.println(b.next.next.out());
}
}
- 제네릭 클래스 제한
class Food{
void show() {
System.out.println("음식");
}
}
class Pizza extends Food{
void show() {
super.show();
System.out.println("피자");
}
}
class Fo<T>{
T t;
void in(T t) {
this.t=t;
}
T out() {
return t;
}
}
public class Test1 {
//? 바인드변수 //Fo<Food> f
//Fo<Pizza> f
static void pr(Fo <? extends Food> f) {
Food fo=f.out(); //Food fo=Food.out();
//Food fo=Pizza.out();
fo.show();
}
public static void main(String[] args) {
Fo<Food> f=new Fo<Food>();
f.in(new Food());
pr(f);
Fo<Pizza> f1=new Fo<Pizza>();
f1.in(new Pizza());
pr(f1);
}
}
728x90
728x90
'JAVA > Java 기초' 카테고리의 다른 글
컬렉션프레임워크 - HashMap (0) | 2022.06.04 |
---|---|
Set 인터페이스 (0) | 2022.06.02 |
Iterator (0) | 2022.06.02 |
Stack (0) | 2022.06.02 |
List 인터페이스 - ArrayList 클래스 (0) | 2022.06.02 |