본문 바로가기

STUDY/Java

[JAVA] Generic 제네릭

 

01 Generic 제네릭

package com.generic;

class Box{
	private Object ob; // Object 클래스의 ob 객체

	public Object getOb() {
		return ob;
	}
	public void setOb(Object ob) {
		this.ob = ob;
	}
}

public class GenericTest {
	public static void main(String[] args) {
		Box box = new Box();
		box.setOb("제네릭");
		System.out.println(box.getOb());
		box.setOb(11); // 숫자가 아닌 객체
		//System.out.println(box.getOb() + box.getOb()); 
		int a = (int)(box.getOb());
		System.out.println(a + a);
	}
}
 

 

① 4행: Box 클래스에서 Object 클래스의 ob 객체 생성 후 getter, setter 생성

② 17행: ob 객체에 "제네릭" 대입 후 출력

③ 19행: ob 객체에 11이라는 숫자를 입력하고 싶음 하지만 ob는 숫자가 아닌 객체로 저장되므로 11+11을 할 수 없음

④ 21행: 따라서 box.getOb()를 int로 형변환 해야 함

 

[결과화면]

* 문자형이나 정수형을 넣을 때마다 클래스를 수정해야 하는 불편함이 있음


ex) 제네릭 사용해서 문자열, 숫자 출력하기

package com.generic;
class Box<T>{
	private T ob;
	
	public T getOb() {
		return ob;
	}

	public void setOb(T ob) {
		this.ob = ob;
	}
}

public class GenericTest {
	public static void main(String[] args) {
		Box<String> box = new Box<String>(); // 문자열
		box.setOb("홍길동");
		String name = box.getOb();
		System.out.println("이름: " + name);
		
		Box<Integer> box2 = new Box<Integer>(); // 정수
		box2.setOb(10); // 숫자가 아닌 객체
		System.out.println("숫자 합: " + (box2.getOb() + box2.getOb()));
	}
}
 

① 2행: <T> Generic 구조 (T: 임의변수)

② 16행: 클래스를 변경하지 않고 문자형과 정수형을 선언 가능

③ 16행, 21행: 대신 객체를 2번 만들어야 함

 

[결과화면]

 

 


 

'STUDY > Java' 카테고리의 다른 글

[JAVA] 람다식, Enum  (0) 2021.11.05
[JAVA] Collection (List, Set, Map)  (0) 2021.11.05
[JAVA] Thread, 스레드  (0) 2021.11.05
[JAVA] 예외처리  (0) 2021.11.05
[JAVA] 정렬, 익명클래스  (0) 2021.11.05