티스토리 뷰

배운 것 기록/java

Generic

키죽 2022. 6. 22. 12:57

제네릭(일반화)

객체 생성 시 데이터타입을 지정하여 사용하도록 하는 기법

- 객체를 생성할 때마다 다른 데이터타입으로 사용 가능하다. 데이터타입은 참조데이터 타입만 지정 가능

- 제네릭 타입 지정 생략 시 모든 데이터타입은 Object로 고정된다.

제네릭 타입 사용 시 주의사항
static, new 연산자, instanceof 연산자 사용 시 제네릭 타입의 파라미터를 사용할 수 없다.
사용 시점에서 데이터타입 확인이 불가능하기 때문!

 

Integer 타입만 허용하는 객체를 생성할 경우

List<Integer> li = new ArrayList<Integer>();

 

다른 타입의 데이터가 입력되면 에러가 난다.

li.add(1);
li.add("2");	// 컴파일에러
li.add(3.14);	// 컴파일에러
li.add(2);
li.add(3);

 

데이터 출력

for(int i=0; i < li.size(); i++) {
	int data = li.get(i);	// 오토언박싱
	System.out.println(data);
}

Integer 에서 int로 오토 언박싱 된다.

특정 데이터타입만 저장되기 때문에 타입 판별할 instanceof 연산자가 필요하지 않다.

 

 

Map 계열 객체 생성 시 제네릭 타입 지정은 Key, Value 순으로 지정된다.

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "김김김");
map.put(2, 10);		// 컴파일오류
map.put("3", "박박박");	// 컴파일오류

 

 

제네릭을 사용한 클래스 정의

실제 데이터타입으로 사용할 순 없으나 제네릭 타입에서 임시로 설정하여 관리한다

<> 기호 안 가상의 데이터 타입은 자유롭게 지정 가능하나 주로 E(element), T(type)을 사용한다(예시에서는 R을 씀)

class GenericC<R> {
	R data;
	
	public R getData() {
		return data;
	}
	public void setData(R data) {
		this.data = data;
	}
}

 

다음과 같이 객체를 생성해 사용이 가능하다.

제네릭 타입 지정을 생략하면 Object 타입으로 지정된다.

// Integer 타입으로 사용한 경우
GenericC<Integer> gc = new GenericC<Integer>();
gc.setData(1);
System.out.println(gc.getData());
int num = gc.getData();

// Double 타입으로 사용한 경우
GenericC<Double> gc2 = new GenericC<Double>();
gc2.setData(3.14);
double num2 = gc2.getData();

// String 타입으로 사용한 경우		
GenericC<String> gc3 = new GenericC<String>();
gc3.setData("배고픔");
String sData = gc3.getData();

// 만들어둔 Person 타입으로 사용한 경우		
GenericC<Person> gc4 = new GenericC<Person>();
gc4.setData(new Person("홍길동", 20));
Person p = gc4.getData();

 

'배운 것 기록 > java' 카테고리의 다른 글

Thread  (0) 2022.06.28
StringBuilder / StringBuffer  (0) 2022.06.25
String 메서드  (0) 2022.06.21
Iterator, Map  (0) 2022.06.20
Stack, Queue  (0) 2022.06.19
댓글
최근에 올라온 글
«   2024/12   »
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
글 보관함