[Java] 제네릭(Generic)

chael_lo·2021년 5월 20일
0

Java

목록 보기
21/52

제네릭이란 데이터의 타입을 일반화한다는 것을 의미하며,
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.

제네릭의 장점

  • 제네릭 타입을 이용하지 않으면 컴파일 과정시 잘못된 타입이 사용될 수 있는 문제가 생길 수 있다.
  • 제네릭은 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다.
  • 불필요한 타입 변환(castring)을 제거한다.

자주 사용하는 타입

<T> Type
<E> Element
<K> Key
<V> Value
<N> Number

제네릭 선언

<>안에 파라미터로 사용할 어떤 타입을 지정하여, 해당 객체가 사용할 객체의 타입을 지정해준다.

제네릭 타입 선언

제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.

//데이터 타입을 외부로부터 지정
public class 클래스명<**사용할 타입**> {...}

//제네릭 타입을 두 개로 둘 수도 있다
public interface 인터페이스명<**사용할 타입**, **사용할 타입**> {...}

제네릭 메서드 선언

제네릭 메소드는 매개타입과 리턴타입으로 타입파라미터를 갖는 메소드를 말한다.

public <**사용할 타입**, ...> 반환 타입 메소드명(**타입 파라미터**, ...) { ... }

제네릭 타입 생성과 사용

제네릭 타입을 사용한 자료형에는 제네릭 대신 표현될 자료형(참조형)을 전달해야만 사용 가능하다.
객체 생성 시점에 타입이 결정되기 때문에 의도하지 않은 타입의 객체 저장을 막을 수 있고,
명시적으로 타입을 지정하였기 때문에 객체를 참조할 때 명시적으로 형 변환을 해줄 필요가 없다.

//제네릭 클래스
//T 타입은 나중에 Generic 클래스의 인스턴스가 생성될 때 결정된다.
public class Generic<T> {
	private T field;
	
	public Generic() {
		
	}

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

	public T getField() {
		return field;
	}

	public void setField(T field) {
		this.field = field;
	}
}

//main 메서드
public static void main(String[] args) {
        //제네릭 타입의 필드가 전달된 자료형의 필드로 변환
        //Integer 타입
	Generic<Integer> generic1=new Generic<Integer>();
        //필드와 다른 자료형의 인스턴스를 전달할 경우 에러가 발생한다.
        //generic1.setField("String");//error
	generic1.setField(100);
	Integer returnObject1=generic1.getField();
	System.out.println("필드값 = "+returnObject1.intValue());//출력: 100
	
        //Double 타입
	Generic<Double> generic2=new Generic<Double>();
	generic2.setField(12.34);
	Double returnObject2=generic2.getField();
	System.out.println("필드값 = "+returnObject2.doubleValue());//출력: 12.34
	
        //String 타입
	Generic<String> generic3=new Generic<String>();
	generic3.setField("홍길동");
	String returnObject3=generic3.getField();
	System.out.println("필드값 = "+returnObject3.trim());//출력: 홍길동		
}
profile
천천히 꾸준히

0개의 댓글