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());
	}

}


+ Recent posts