High Level Programming Language/Learning the Java Language
Type Inference 알고리즘의 원칙: '후반부 결과'를 사용하지 않는 이유
헬로우월드
2025. 4. 30. 13:40
"추론 알고리즘은 프로그램 후반부의 결과를 사용하지 않습니다"라는 의미는 타입 추론(Type Inference)의 작동 방식을 이해할 때 중요한 개념입니다.
🔍 의미 해석: "프로그램 후반부의 결과를 사용하지 않는다"
자바 컴파일러의 타입 유추(type inference) 알고리즘은, 어떤 expression의 타입을 결정할 때 항상 그 시점의 "앞 정보"만 보고 판단합니다.
즉, "미래에 어떤 값이 될 것이다", "결국 어떤 타입이 될 것이다" 같은 후속 정보(후반부 결과)는 사용하지 않습니다.
✅ 예시:
List<String> list = new ArrayList<>();
위 코드에서는 ArrayList<>()
의 타입 아규먼트를 명시하지 않았지만, 좌변이 List<String>
이라는 걸 보고 컴파일러는 ArrayList<String>
으로 타입을 유추합니다.
✔ 그런데 다음처럼 쓴다면?
var result = process(new ArrayList<>());
...
String name = result.get(0); // ← 이건 "후반부 결과"
여기서 process()
의 파라미터로 넘긴 new ArrayList<>()
의 타입은 process()
메서드의 파라미터 타입이나 호출 시점에서만 판단할 수 있어야 합니다.
즉, 컴파일러는 result.get(0)
이 String
으로 사용될 것이라는 "후반부 결과"를 참고하지 않고, 오직 process(new ArrayList<>())
시점의 정보로만 추론합니다.
🧠 핵심 개념 요약
구분 | 설명 |
---|---|
타입 추론 시점 | 해당 expression이 작성된 시점에서 결정됨 |
사용하는 정보 | 호출된 메서드의 시그니처, 아규먼트, 좌변 타입 등 앞의 정보 |
사용하지 않는 정보 | 이후 코드에서의 리턴 값 사용, 후속 연산, 타입 캐스팅 등 "후반부 결과" |
💡 쉽게 비유하면?
"시험 문제를 풀 때, 뒷 문제 정답을 보고 앞 문제의 정답을 바꾸면 안 된다"는 것과 비슷합니다.
타입 추론도 마찬가지로, 앞에서 정해진 정보만으로 판단을 끝내고 뒤에 있는 결과는 참고하지 않는 원칙을 따릅니다.