[Java 16-2 GenericApp] 제네릭(Generic) : 필드의 자료형(참조형) 대신 사용 가능한 식별자

임승현·2022년 10월 19일

Java

목록 보기
76/126

🐧제네릭(Generic) : 필드의 자료형(참조형) 대신 사용 가능한 식별자 - 미지정 자료형

→ 참조형 선언시 <> 기호에 제네릭 타입(식별자) 선언
형식) public class 클래스명<제네릭,제네릭,...> {}
→ <>안에 제네릭 타입은 , 기호를 사용하여 나열 선언 가능
→ 제네릭 타입의 식별자는 대문자로 작성하는 것을 권장

◎제네릭으로 전달받을 수 있는 클래스를 상속을 사용하여 제한 가능
형식) public class 클래스명<제네릭 extends 부모클래스> {}
→ 제네릭은 반드시 부모클래스를 상속받은 자식클래스만 전달받아 사용 가능

package xyz.itwill.util;

public class Generic<T extends Number> {//제네릭 클래스
	 private T field;
	 
	 public Generic() {
		// TODO Auto-generated constructor stub
	}

	public Generic(T field) {
		super();
		this.field = field;
	}

	public T getField() {
		return field;
	}

	public void setField(T field) {
		this.field = field;
	}
	 
	
}
package xyz.itwill.util;

//제네릭 클래스로 객체를 생성하여 사용하는 프로그램
//→ 제네릭 대신 설정된 클래스의 객체만 필드에 저장 가능 - 제한적인 객체 저장
//→ 필드값을 반환받아 사용할 때 명시적 객체 형변환 불필요
public class GenericApp {
	public static void main(String[] args) {
		//제네릭 클래스를 이용할 경우 제네릭 대신 사용할 클래스를 전달해야만 사용 가능
		//→ 전달받아 클래스를 제네릭 대신 사용하여 필드 또는 메소드 완성
		Generic<Integer> generic1=new Generic<Integer>();
		
		//제네릭으로 설정된 클래스와 동일한 자료형의 객체를 전달하여 필드에 저장
		//→ 제네릭으로 설정된 클래스와 다른 자료형의 객체를 전달할 경우 에러 발생
		generic1.setField(100);//오토박싱
		//generic1.setField(12.34);//에러 발생
		
		Integer returnObject1=generic1.getField();
		
		System.out.println("필드값 = "+returnObject1);
		System.out.println("=====================================");
		
		Generic<Double> generic2=new Generic<Double>();
		generic2.setField(12.34);//오토박싱
		
		Double returnObject2=generic2.getField();
		
		System.out.println("필드값 = "+returnObject2);
		System.out.println("=====================================");
		
		//제네릭의 부모클래스를 상속받지 않은 자식클래스로 제네릭 클래스를 이용하여 에러 발생
		/*
		Generic<String> generic3=new Generic<String>();
		generic3.setField("홍길동");//오토박싱
		
		String returnObject3=generic3.getField();
		
		System.out.println("필드값 = "+returnObject3);
		System.out.println("=====================================");
		*/
	}
}

0개의 댓글