based on: #206 by @undeadtimo
들어가며
원글에서 살펴보았듯, 적용 가능성 테스트에서의 타겟 타입(Target Type)은 메서드 오버로딩에서 파라미터 관련 정보를 제공하는 역할을 맡기도 하는데요. 이번 글에서는 타겟 타입이 가지는 의미를 살펴보고자 합니다.
Java 버전 별 타겟 타입
Java 4와 그 이전
Java 4와 그 이전에는 제네릭이나 람다 표현식 등이 도입되지 않았으므로, 대부분 명시적으로 타입을 선언해야했습니다. 기본적인 타입 추론도 primitive type에서만 이루어졌습니다.
Java 5와 Java 7
Java 5에서 제네릭 기능이 도입되면서, 컴파일러는 컨텍스트에 따라 타입을 추론하게 되었습니다. 자연스럽게 제네릭에 필요한 타입 파라미터도 넘겨주게 되었습니다.
// https://www.baeldung.com/java-generalized-target-type-inference
List<String> strListInferred = Collections.emptyList();
List<Integer> intListInferred = Collections.emptyList();
위 코드에서 컴파일러는 문맥을 통해 strListInferred와 intListInferred에 대해 타입을 추론할 수 있습니다. 바로 아래 제네릭 메서드를 통해서요.
public static final <T> List<T> emptyList()
또한, Java 7에 이르러 다이아몬드 연산자 <>가 도입되면서 제네릭 타입 추론 과정이 이용자에게 간단해졌는데요. 이는 현재 익숙한 아래 코드와 같은 방식으로 동작합니ㅏㄷ.
List<String> list = new ArrayList<>()
Java 8 이후
Java 8에서부터는 람다 표현식, 메서드 참조, 함수형 인터페이스와 같은 함수형 프로그래밍 기능이 도입되었습니다. 타겟 타입은 컴파일러 타입 추론 과정에서 그 역할이 강화되었는데요.
특히, 함수형 프로그래밍은 함수를 인자로 받고 반환하는 고차 함수와 익명 함수를 핵심으로 삼는데요. 타겟 타입은 코드의 유연성을 높이면서도, 타입 추론과 타입 안정성을 보장하는 역할을 한다고 볼 수 있겠습니다.
References
https://www.baeldung.com/java-generalized-target-type-inference
based on: #206 by @undeadtimo
들어가며
원글에서 살펴보았듯, 적용 가능성 테스트에서의 타겟 타입(Target Type)은 메서드 오버로딩에서 파라미터 관련 정보를 제공하는 역할을 맡기도 하는데요. 이번 글에서는 타겟 타입이 가지는 의미를 살펴보고자 합니다.
Java 버전 별 타겟 타입
Java 4와 그 이전
Java 4와 그 이전에는 제네릭이나 람다 표현식 등이 도입되지 않았으므로, 대부분 명시적으로 타입을 선언해야했습니다. 기본적인 타입 추론도 primitive type에서만 이루어졌습니다.
Java 5와 Java 7
Java 5에서 제네릭 기능이 도입되면서, 컴파일러는 컨텍스트에 따라 타입을 추론하게 되었습니다. 자연스럽게 제네릭에 필요한 타입 파라미터도 넘겨주게 되었습니다.
위 코드에서 컴파일러는 문맥을 통해
strListInferred와intListInferred에 대해 타입을 추론할 수 있습니다. 바로 아래 제네릭 메서드를 통해서요.또한, Java 7에 이르러 다이아몬드 연산자
<>가 도입되면서 제네릭 타입 추론 과정이 이용자에게 간단해졌는데요. 이는 현재 익숙한 아래 코드와 같은 방식으로 동작합니ㅏㄷ.Java 8 이후
Java 8에서부터는 람다 표현식, 메서드 참조, 함수형 인터페이스와 같은 함수형 프로그래밍 기능이 도입되었습니다. 타겟 타입은 컴파일러 타입 추론 과정에서 그 역할이 강화되었는데요.
특히, 함수형 프로그래밍은 함수를 인자로 받고 반환하는 고차 함수와 익명 함수를 핵심으로 삼는데요. 타겟 타입은 코드의 유연성을 높이면서도, 타입 추론과 타입 안정성을 보장하는 역할을 한다고 볼 수 있겠습니다.
References
https://www.baeldung.com/java-generalized-target-type-inference