지난 글에서 AndroidManifest.xml의 SdkVersion에 대해 이야기 했다. 안드로이드 개발자 사이트에서 이 SdkVersion들에 대한 글을 읽다 보면 이런 말이 나온다.
Android applications are generally forward-compatible with new versions of the Android platform.
라고 나와있다. 상위호환성이 뭔가?
상위호환성을 이해하기 위해 하위호환성을 먼저 살펴보자. 위키피디아(영문)에 따르면 이전 버전에서 만든 입력값을 처리할 수 있다면 ‘하위 호환성’이 있다고 한다. 자바를 예로 들면, 라이브러리만 예전 버전에서 새버전으로 바꾸었는데 여전이 어플리케이션이 잘 동작한다면 하위 호환성이 있는 라이브러리이다. 예를 들어, 진저브레드에서 만들어진 함수를 아이스크림 샌드위치를 내놓을 때 더이상 쓰지 말라고 권유하는 경우가 있다. 하지만, 이를 삭제하지 않고 deprecated 처리하여 하위호환성을 보장해주고 더 좋은 방법으로 구현한 메소드도 추가한다.
그리고 상위호환성은 하위호환성의 반댓말이다. 그럼 최신 버전의 라이브러리로 제작한 어플리케이션이 하위 버전 라이브로리로 바꾸었는데도 잘 동작한다면 하위 호환성이 있다는 뜻인건가?
그건 아니다. 예전 기준으로 만들었던 제품이 변경된 기준에서도 잘 동작하도록 하는 표준이 있다면, 상위 호환성이 있다고 본다. 예를 들어, 핀치 투 줌 기능이 없을 때 만든 앱이라도, 표준 api를 이용하여 만든 앱이라면 최신 단말에서 앱을 실행할 때 핀치 투 줌 기능을 사용자가 사용할 수 있는 경우다. 보통 상위 호환성은 제한된 시나리오에서만 가능하다.
상위호환성이라는 컨셉은 소프트웨어 분야에만 국한된 것은아니다. 전자제품 인터페이스나 전신 신호, 파일 시스템, 프로토콜 등에 모두 적용될 수 있다.
상위호환성을 고려해야하는 이유는 사용하는 단말의 동작(가시적/비가시적 모두)들은 한번 익숙해지면 바꾸기 쉽지 않다. 만약 사용자가 이전 버전에서 만든 앱을 사용하는데, 이 앱이 새 프레임워크와 다르게 동작하면 만족감이 떨어질 것이다. 그렇다고 새 프레임워크가 나올 때마다 앱 개발자가 일일이 확인/수정/릴리즈를 반복해야 한다면 안드로이드 자체의 인기가 떨어질 것이다.(물론 구글은 이걸 권장한다) 이에 구글에서 상위 호환성을 지원함으로서 개발자에 대한 인기와 사용자에 대한 일관성을 지키기 위해 상위 호환성을 지원하게 되었다고 생각한다.