[JAVA] - 지네릭

ForLearn·2022년 9월 29일
0

JAVA

목록 보기
1/1

지네릭

지네릭이란 결정되지 않은 타입을 파라미터로 처리하고 실제 사용시 파라미터로 구체적인 타입으로 대체시키는 기능이다.

위의 설명은 쉽게 와닫지 않기 때문에 예시로 이해하자.

public class Box <T>{
    
    public T content; 
    
}

위의 Box 클래스에서 결정되지 않은 content의 타입을 T라는 파라미터로 정의했다.

<T> 는 T가 타입 파라미터라는 것을 나타내고, 타입의 자리에 T를 사용할 수 있다는 것을 의미한다. 우리는 T가 어떤 타입인지는 모르지만 객체가 생성될 때 다른 타입으로 대체된 다는 것을 알 수 있다.

만약 Box에 String을 저장하고 싶은 경우, 객체 생성시 T에 String을 넣어주면 된다.

Box<String> box = new box()<String>;
box.content = "안녕하세요"; 
String content = box.content; 
  • 지네릭 타입을 지전하지 않으면 Object 타입이 암묵적으로 사용된다.
  • 주의할 점은 타입 파라미터는 클래스 및 인터페이스만 사용할 수 있다는 것이다.
  • 지네릭 사용의 장점은 사용시 타입을 선택하기 때문에 강제 타입 변환 없이 해당 값을 얻을 수 있고, 타입 형변환시 타입 에러와 같은 오류를 줄여준다.
  • 또한 어떤 타입을 사용할지 객체 생성할때 까지 미룰 수 있는 장점을 가진다.

지넥릭 메서드

지네릭 메서드는 타입 파라미터를 가진 메서드를 말한다. 리턴 타입 앞에 < >를 추가햐여 타입 파라미터를 정의하고 , 리턴 타입과 매개변수 타입에서 사용한다.

public <T> Box<T> boxing(T t){......}

위의 메서드는 타입 파라미터 T가 어떤 값이냐에 따라 컴파일 과전에서 구체적인 타입이 결정된다.

1. Box<Integer> box1 = boxing(100); 

2. Box<String> box2 = boxing("안녕하세요"); 

1.의 경우 매개변수 100이 Integer 타입이므로 T가 Integer로 대체되어 Box<Integer> 로 리턴된다. 2번의 경우는 String..

제한된 타입 파라미터

타입 파라미터를 활용할 때 Object 메소드 외에 다른 메서드가 팔요한 경우가 있다. 이 경우 구체 타입을 제한하면 제한된 타입이 가진 메서드를 사용할 수 있다.

  • 타입 파라미터 제한은 < T extendx 상위타입> 의 방식으로 사용한다.

만약 타입 파라미터를 Number로 제한한다고 해보자

public <T extends Number> boolean compare( T t1, T t2){ 
	double v1 = t1.doubleValue(); 
	double v2 = t2.doubleValue(); 
}

타입 파라미터가 Number로 제한하여 Number이 가진 doubleValue() 를 사용한 것을 볼 수 있다.

와일드카드 타입 파라미터

지네릭에서는 ?(와일드카드)를 활용하여 상속을 활용할 수 있다.

  • <? extends T> 와일드카드의 상한 제약. T와 그 자식들만 사용 가능
  • <? extends T> 와일드카드의 하한 제한. T와 그 조상들만 사용 가능
  • <? extends T> 제한 없이 모든 타입을 사용 가능

Reference

  • 이것이 자바다 - 신용권, 임경균 지음

0개의 댓글