return
이 없으면 에러가 발생하는데, 자바스크립트에서는 왜 괜찮을까요?코틀린이나 자바에서는 모든 실행 경로에서 return
이 반드시 존재해야 하지만, 자바스크립트에서는 같은 코드가 문제없이 실행됩니다.
이 차이는 정적 타입 언어 vs 동적 타입 언어의 차이에서 비롯됩니다.
return
이 없으면 컴파일 에러 발생코틀린과 자바 같은 정적 타입 언어에서는 Definite Return Analysis(확실한 반환 분석)을 수행합니다.
즉, 컴파일러가 모든 코드 경로에서 return
이 있는지 검사하고, 만약 빠질 가능성이 있으면 컴파일 에러를 발생시킵니다.
fun isPass(examScore: Int): Boolean {
if (examScore >= 60) {
println("60 up! pass!")
return true
}
if (examScore < 60) {
println("60 down! you fire!")
return false
}
} // ❌ 모든 경로에서 return이 있다고 보장할 수 없음 → 컴파일 에러 발생!
examScore >= 60
이면 return true
, examScore < 60
이면 return false
이지만,✅ 해결 방법:
모든 경우에서 return
이 보장되도록 구조를 변경하면 해결됩니다.
fun isPass(examScore: Int): Boolean {
if (examScore >= 60) {
println("60 up! pass!")
return true
}
println("60 down! you fire!")
return false // ✅ 모든 경우를 커버하도록 return 추가!
}
return
이 없어도 문제없음자바스크립트는 동적 타입 언어이기 때문에, 함수의 반환값이 명확하지 않아도 실행됩니다.
또한, return
이 없으면 자동으로 undefined
를 반환하기 때문에 에러가 발생하지 않습니다.
function isPass(examScore) {
if (examScore >= 60) {
console.log("60 up! pass!");
return true;
}
if (examScore < 60) {
console.log("60 down! you fire!");
return false;
}
} // ✅ return이 없는 경우에도 자동으로 undefined 반환 → 에러 없음!
examScore
가 60 이상이면 return true
, 59 이하이면 return false
가 실행됩니다.examScore
가 숫자가 아닐 때)는 undefined
를 반환합니다.코틀린/자바 (정적 타입 언어) | 자바스크립트 (동적 타입 언어) | |
---|---|---|
타입 검사 | 컴파일 시 타입 검사 | 런타임에 타입 결정 |
return 검사 | 반드시 모든 코드 경로에서 return 이 있어야 함 | 없어도 자동으로 undefined 반환 |
Definite Return Analysis | ✅ 적용됨 (컴파일러가 검사) | ❌ 적용되지 않음 |
return
이 존재해야 합니다.return
이 없어도 자동으로 undefined
를 반환하기 때문에 에러가 발생하지 않습니다. 즉, 정적 타입 언어(코틀린/자바)는 컴파일 단계에서 모든 코드 경로를 엄격하게 검사하는 반면, 동적 타입 언어(자바스크립트)는 더 유연하게 처리하기 때문입니다! 🚀