girrafelim
386
2020-12-15 11:50:55
2
182

Java 제네릭<T>에 대해 질문 드립니다.


안녕하세요. 이번에 Java8을 공부하다가 궁금한 사항이 생겨 질문 남깁니다.

아래의 코드는 Optional 클래스의 of 메서드 입니다.

public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }

위 코드를 보게되면 메서드 헤더부분은 <T> Optional<T> of (T value)로,

메서드의 이름: of

인자: T value

반환타입: Optional<T> 인 것을 이해할 수 있었는데요.

반환타입의 앞에 제네릭<T>는 무엇을 의미하는 것인지 궁금합니다.

예를들어 아래와 같은 코드로 Optional 객체를 생성하였을때

Optional<String> strOptional = Optional.of("str")

제가 생각해보았을때, of 메서드는 동적으로 아래와 같이 채워질 것 같은데

public static String Optional<String> of(String value) {
        return new Optional<>(value);
    }

static 키워드와 반환타입(?) Optional<String> 사이의 String은 무엇을 의미하는 것인가요?.

답변해주시면 감사하겠습니다!.

0
  • 답변 2

  • Dierslair
    4k
    2020-12-15 12:05:22

    제네릭 T는 클래스 타입 정의시에 명시하는데, 클래스가 제네릭이 아니고, 메서드만 제네릭인 경우 메서드에 제네릭 정의를 내립니다. <T> 또는 <T super String> 또는 <T extends String> 등으로 제약을 걸어 정의가 가능하며, <T>는 정의이기 때문에 위에 적어두신대로 String Optional<String>이 아닌 그냥 Optional<String>이 반환 타입이 됩니다.

    class Generic<T> {
      public T something() {...} //  클래스에서 정의한 제네릭 T를 따름
    }


    class NotGeneric {
      public <T> T something() {...} // 메서드에서 제네릭 T를 정의함
    }


  • girrafelim
    386
    2020-12-15 12:52:31

    @John Shur님 답변 감사합니다!. 덕분에 이해할 수 있게 되었습니다!!.

  • 로그인을 하시면 답변을 등록할 수 있습니다.