3-1 (1) Generics 제너릭스

zhyun·2020년 9월 17일
0

HighJava

목록 보기
12/67
post-custom-banner

Generics

Generic이란?

  • 클래스에 사용할 타입을 디자인(설계)시에 지정하는 것이 아니라
    클래스를 사용할 때 타입을 지정한 후 사용하는 기술을 말한다.

Generic 사용시 장점

  • 컴파일 시 잘못된 타입이 사용될 수 있는 문제를
    컴파일 과정에서 제거 할 수 있다.
  • 안전한(Type Safty)코딩을 할 수 있다. (프로그램 성능 향상됨)
  • 불필요한 타입변환(casting)을 하지 않아도 된다.
  • 컴파일 시 강한 타입체크를 할 수 있다.

Generic 클래스 선언 방법

  • 형식)
 *   class 클래스명<제너릭타입글자> { //컴파일 시점까지 제너릭타입을 알려줘야한다.
 *   	제너릭타입글자 변수명; // 변수선언에 제너릭을 사용할 경우
 *   	...
 *   	제너릭타입글자 메서드명() {//반환값이 있는 메서드에서 사용
 *    	 ...
 *    	 
 *       return;	
 *   	}
 *   	...
 *   }

Generic 타입 글자

  • T => Type

  • K => Key

  • V => Value

  • E => Element(자료구조에 들어가는 항목들을 나타낼 때 사용)

  • Eclipse Oxygen T02_GenericTest

  • 일반 클래스

class NonGeneric{ // 일반 클래스
	private Object val; // 다 때려넣을 수 있다. 단, 형변환 해야한다.

	public Object getVal() {
		return val;
	}

	public void setVal(Object val) {
		this.val = val;
	}
}
  • Generic 클래스
class MyGeneric<T>{ // 클래스명 다음에 제너릭 타입글자
	private T val; //T가 String이 될지 Integer가 될지 어떤타입이 될지 모른다. 
				   //내가 사용할 타입(딱 한개)을 지정할 수 있다. 

	public T getVal() {
		return val;
	}

	public void setVal(T val) {
		this.val = val;
	}
}
  • Main클래스에 Generic => get() set()
  • 사용시점에서 제너릭클래스에 미지정한 <T>타입을 정해줘야 한다 (아래 예시)
public class T02_GenericTest {
	public static void main(String[] args) {
		NonGeneric ng1 = new NonGeneric();
		ng1.setVal("가나다라");
		
		NonGeneric ng2 = new NonGeneric();
		ng2.setVal(100);
		
		String rtnNg1 = (String)ng1.getVal();
		System.out.println("문자열 반환값 rtnNg1 =>"+rtnNg1);
		
		Integer irtnNg2 = (Integer)ng2.getVal();
		System.out.println("정수 반환값 itrNg2 =>"+ irtnNg2);
		System.out.println();
		
       		 // 사용할 시점에 <>안에 타입을 정해줘야 한다.
        	//MyGeneric<T> class에서 미지정 타입<T>를 String타입으로 지정
		MyGeneric<String> mg1 = new MyGeneric<String>(); 
        
       		 //MyGeneric<T> class에서 미지정 타입<T>를 Integer타입으로 지정
		MyGeneric<Integer> mg2 = new MyGeneric<>(); //T가 Integer
		
		mg1.setVal("우리나라");
		mg2.setVal(500);
		
		rtnNg1 = mg1.getVal();
		irtnNg2 = mg2.getVal();
		
		System.out.println("제너릭 문자열 반환값 : "+rtnNg1); //우리나라
		System.out.println("제너릭 정수형 반환값 : "+irtnNg2); //500
	}
}

Integer는 int값에 대한 객체타입으로 자바에서 제공하는 표준API다.

제너릭타입

class< T > & interface< T >

  • 제너릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.
  • 제너릭 타입은 클래스 또는 인터페이스 이름 뒤에 "<>" 부호가 붙고,
    사이에 타입 파라미터가 위치한다.
public class 클래스명<T>{ ... }
public interface 인터페이스명<T>{...}

멀티 타입 파라미터

class< K,V...> & interface< K,V ...>

  • 제너릭 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있는데
    타입 파라미터를 콤마로 구분한다.
profile
HI :)
post-custom-banner

0개의 댓글