romworld

Generic 본문

JAVA/개념정리

Generic

inderrom 2022. 10. 31. 00:55
package kr.or.ddit.basic.generic;
/*
	- 제네릭 클래스를 만드는 방법
	형식)
	class 클래스명<제네릭타입글자>{
		
		제네릭타입글자 변수명;    // 변수 선언에 제네릭을 사용할 경우
		
		제네릭타입글자 메서드명(매개변수들...){		//메서드의 반환값 자리에 사용할 경우
			.....
			return 반환값;
		}
		
		반환값타입 메서드명(제네릭타입글자 변수명, ...){  // 메서드의 매개변수에 사용할 경우
		
		}
	}	
	
	-- 많이 사용되는 제네릭타입글자 --
	T ==> Type
	K ==> Key
	V ==> Value
	E ==> Element
*/

class MyGeneric<T>{
	private T value;	// 변수 선언에 사용
	
	public T getValue() {	// 메서드의 반환값 자료형에 사용
		return value;
	}
	
	public void setValue(T value) {	//메서드의 매개변수에 사용
		this.value = value;
	}
}

class NonGeneric{ // 형변환이 자동으로 될때 자식 객체를 부모한테 넣으면됌
	private Object value;

	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}
}

public class GenericTest {

	public static void main(String[] args) {
		NonGeneric ng1 = new NonGeneric();
		ng1.setValue("가나다라");
		
		NonGeneric ng2 = new NonGeneric();
		ng2.setValue(100);
		
		//Object strTemp = ng1.getValue(); // getValue()가 오브젝트이므로 안됨
		
		String strTemp = (String)ng1.getValue();
		System.out.println("문자열 반환값 : "+ strTemp);
		
		//Integer intTemp = (Integer) ng2.getValue(); // 일반데이터가 객체형으로 바뀜(박싱)-근데 자동으로 바꿔줌 - 그게 오토박싱
		 int intTemp = (int)ng2.getValue();												// -- object 자식이므로 자동 형변환됨
		System.out.println("정수형 반환값 : " + intTemp);
		System.out.println("---------------------------------");
		
		MyGeneric<String>mg1 = new MyGeneric();
		mg1.setValue("안녕하세요");
		//mg1.setValue(100);  // 제네릭과 다른 자료형의 데이터를 저장할 수 없다.
		
		MyGeneric<Integer> mg2 = new MyGeneric();
		mg2.setValue(200);
		//mg2.setValue("문자열"); // Error
		
		String strMg = mg1.getValue();	// 데이터를 꺼내올 때 형변환 없이 꺼내올 수 있다.
		int intMg = mg2.getValue();
		
		System.out.println("제네릭 문자열 반환값 : "+ strMg);
		System.out.println("제네릭 정수형 반환값 : "+ intMg);
		
		System.out.println("----------------------------------");
		
		// 컴파일에러는 빨간줄 나는 거 --> 에러표시를 해줌
		// 런타임에러 실행단계에서 나는 에러
		int test = (int)ng1.getValue();    // ng1은 스트링으로 저장되어 있어서 보기엔 오류가 없어보여도 실행시키면 런타임오류
		System.out.println("test = " + test );
		
	//	int test2 = mg1.getValue(); 제네릭은 오류를 바로 컴파일에러로 보여줌
		
	}
}

'JAVA > 개념정리' 카테고리의 다른 글

Thread 경마 프로그램  (0) 2022.11.27
Thread  (0) 2022.10.31
enum  (1) 2022.10.31
Args  (0) 2022.10.28
Properties  (0) 2022.10.28
Comments