안드로이드 앱 개발에서 볼 수 있는 코드인데
자바 문법과 연관된 질문이라 이 게시판에 남겨봅니다
질문이 좀 정확치 않는데, 양해 부탁드립니다 ㅜ.ㅜ
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
// Android OS Version 4.1 이상에서 동작할 내용
} else {
// Android OS Version 4.1 미만의 OS에서 동작할 내용
}
안드로이드 api 레벨을 체크해서 분기해서 서로 다른 코드를 실행하도록 하는 코드인데요
특정 api 레벨을 기준으로
deprecated가 되기전 메서드 호출과
deprecated되고 새롭게 추가된 메서드를 호출하는 코드로의 분기입니다
궁금한것은
원래 컴파일 시점에서는 클래스에 존재하지 않는 메서드의 호출 구문이 있으면 컴파일 시점에 에러가 발생하는데
저렇게 동적으로 실행중인 상태에서 버전을 체크해서 서로 다른 메서드를 호출하여 동작하게 하려면
필연적으로 컴파일 시점에서는 특정 API 레벨에서 지원하던 지원하지 않던 모든 버전의 메서드를 제공해야하는것이 아닌가요?
어떤 분은 그게 아니라 자바에서 실행중에 메서드의 호출은 동적 바인딩 되는것으로
물리적으로 존재하지 않는 메서드의 호출은 예외를 발생하는 식으로 디자인 되었다고 하던데
그래서 임의적으로 존재하지 않는 메서드의 호출이 있더라도 컴파일은 무사히 되도록 넘겼을꺼라고 해요
어느쪽이 맞는 것일까요?