1. Generic (제네릭 기법)
# 클래스 내부에서 사용할 '데이터 타입'을 외부에서 지정하는 방법
* JDK 1.5버전부터 사용
1) 구조
T: Type
2) <> 다이아몬드 지시자
- 다이아몬드 지시자 안에 클래스를 선언해서 사용
3) 특징
(1) 클래스 내부에서 사용하는 형(Type)을 다이아몬드 지시자로 받을 수 있다.
(2) 명확하지 않은 형 변환 과정을 생략할 수 있다.
(3) 하나의 클래스로 다양하게 처리할 수 있다.
- 제네릭이 없다면 ArrayList 객체 내부에 어떤 형태의 클래스가 있는지 확인하기가 어렵다.
- 또한 형 변환에서 발생할 수 있는 런타임 예외를 처리하거나, 불필요한 코드를 제거하기 위해서 여러 개의 클래스가 필요할 것이기 때문이다.
# Generic 연습하기 (1)
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | package genericex; // 1. 일반적인 방법 class Demo { private Integer data; public void setData(Integer data) { this.data = data; } public Integer getData() { return data; } } // 2. 제너릭 방법 class GenericDemo<T> { private T data; public void setData(T data) { this.data = data; } public T getData() { return data; } } public class GenericTest01 { public static void main(String[] args) { System.out.println("일반 클래스의 사용법"); Demo d1 = new Demo(); d1.setData(100); //auto-boxing System.out.println("data: " + d1.getData()); System.out.println("제너릭 클래스의 사용법"); // 모든 타입이 들어갈 수 있다. // GenericDemo g1 = new GenericDemo(); // Integer 타입만 들어갈 수 있다. GenericDemo<Integer> g1 = new GenericDemo<Integer>(); g1.setData(100); // g1.setData("100"); // g1.setData(4.15); System.out.println("data: " + g1.getData()); } } # 실행 결과 일반 클래스의 사용법 data: 100 제너릭 클래스의 사용법 data: 100 | cs |
# Generic 연습하기 (2)
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 33 34 35 36 37 38 39 40 41 42 43 | package genericex; class Student { String name; public Student(String name) { this.name = name; } @Override public String toString() { return name; } } class Person<T, E> { T data; E id; public Person(T data, E id) { this.data = data; this.id = id; } } public class GenericTest02 { public static void main(String[] args) { // T, E 자리에는 클래스만 가능 // Person<int, double> p1 = new Person(data, id); // Person<Student, Integer> p1 = new Person(new Student("hgd"), 100); // <> 생략 가능 Person<Student, Integer> p1 = new Person<Student, Integer>(new Student("hgd"), new Integer(100)); System.out.println(p1.data + ", " + p1.id); System.out.println(p1.data.name + ", " + p1.id); } } # 실행 결과 hgd, 100 hgd, 100 | cs |
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day14 | 컬렉션 (Collection) (2) List 인터페이스 (0) | 2018.01.31 |
---|---|
JAVA2_day14 | 컬렉션 (Collection) (1) (0) | 2018.01.31 |
JAVA2_day13 | GUI 연습문제 (2) (0) | 2018.01.30 |
JAVA2_day13 | GUI (PopupMenu, MenuItem) (0) | 2018.01.30 |
JAVA2_day12 | 내부 클래스 (Inner class) (0) | 2018.01.30 |