1.Generic
Generic은 클래스의 인자를 유동적으로 사용하기 위해 만들어진 개념이다.
클래스 생성자나 메소드 그리고 변수의 자료형은 상황에 따라서 유동적일 필요가 있기 때문이다.
사용법은 [접근제한자] class [이름] [<A, B, C, .....>] 와 같이 사용할 자료형 갯수만큼 <> 안에 넣어두면 된다.
기본적인 예제
package chap08.exam04.generic; public class Box<T> { // 아직 뭔지는 모르나 어떤 타입이 설정 될 예정 // 타입이 설정되면 클래스 모든 타입이 통일 된다. // 클래스 선언/객체화 될 때 타입을 설정함. // T 자리에는 쓰고싶은거 써도 됨 private T value; public T getValue() { return value; } public void setValue(T value) { this.value = value; } }
package chap08.exam04.generic; public class Main { public static void main(String[] args) { // 객체화 할 때 타입을 지정 Box<Integer> box = new Box<Integer>(); // 뒤에 인티져는 생략 가능 box.setValue(1234); int val = box.getValue(); System.out.println(val); } }
제네릭 선언시에는 다음과 같이 인자를 무한히 사용 할 수 있다.
하지만 getter와 setter 설정과 선언, 객체화 시 번거로움이 생긴다.
package chap08.exam05.multi; // 복수의 파라미터는 , 로 구분 public class MultiBox<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; } }
package chap08.exam05.multi; public class Main { public static void main(String[] args) { MultiBox<String, Integer> box = new MultiBox<String, Integer>(); // 추천 메소드 항목에서도 반환타입이 바뀐걸 확인 할 수 있다. // 데이터 넣기 box.setKey("홍길동"); box.setValue(90); // 데이터 빼기 String name = box.getKey(); int score = box.getValue(); System.out.println(name + " : " + score); } }
제네릭 응용
제네릭의 요소가 너무 많을경우 코드 길이가 길어지고 작성하는데도 오래 걸리지만 다음과 같이 사용하면 된다.
package chap08.exam07.classtype; public class Employee <T> { private T t; public T getT() { return t; } public void setT(T t) { this.t = t; } }
package chap08.exam07.classtype; public class Info { private int emp_no; private String name; private int age; private long salary; private long asset; private float commision; private boolean married; private String hobby; public int getEmp_no() { return emp_no; } public void setEmp_no(int emp_no) { this.emp_no = emp_no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public long getAsset() { return asset; } public void setAsset(long asset) { this.asset = asset; } public float getCommision() { return commision; } public void setCommision(float commision) { this.commision = commision; } public boolean isMarried() { return married; } public void setMarried(boolean married) { this.married = married; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } }
package chap08.exam07.classtype; public class Main { public static void main(String[] args) { Employee<Info> emp = new Employee<Info>(); // 넣는 과정 info에다가 값 넣음 -> Employee에 저장 Info info = new Info(); info.setEmp_no(123); info.setName("Kim"); info.setSalary(1000000); info.setHobby("movie"); emp.setT(info); // emp에서 info를 빼옴 -> info에서 개별값을 꺼내옴 info = emp.getT(); System.out.println(info.getEmp_no()); System.out.println(info.getName()); System.out.println(info.getSalary()); System.out.println(info.getAge()); } }
'개념 및 코딩 > 06.기타' 카테고리의 다른 글
[JAVA]06-07.Generic 메소드, Generic 상속 (0) | 2018.09.03 |
---|---|
[JAVA]06-05.Object (0) | 2018.09.03 |
[JAVA]06-04.String (0) | 2018.09.03 |
[JAVA]06-03.Throw 예외처리, 커스텀 예외처리 (0) | 2018.09.03 |
[JAVA]06-02.예외처리 instance of, try catch (0) | 2018.09.03 |