[Android/Kotlin] 1 안드로이드와 코틀린

[Android/Kotlin] 1 안드로이드와 코틀린

안드로이드가 동작하는 플랫폼과 리눅스 커널, 현재 사용되고 있는 안드로이드의 API레벨 그리고 함수형 프로그래밍에 대해 알아보겠다.


1) 운영체제와 플랫폼

  • 안드로이드 플랫폼은 리눅스 운영체제 안에서 리눅스와 상호작용하면서 동작한다.
  • 아래 그림은 안드로이드 플랫폼으로 전체 아키텍처 위쪽에 안드로이드가 실행되는 런타임 영역(파란색 영역)이 존재한다. 

img

2) 플랫폼 버전과 API 레벨

  • 안드로이드는 사용하는 플랫폼 버전과 별개로 API 레벨이 있다.
  • API는 개발자에게 안드로이드 플랫폼의 기능을 사용할 수 있게 제공하는 도구이다.
  • API 레벨에 따라서 새로운 기능이 추가된다.
  • 그러므로 API 레벨의 변경 사항이 있을 때는 코드 전체를 변경해야 하는 경우도 있기 때문에 기존 코드를 다시 한번 확인할 필요가 있다.

img

  • 현재 플랫폼의 최신 버전은 안드로이드 13(베타)이지만 실제 사용자가 사용하는 버전은 훨씬 다양합니다.
  • 개발용 툴인 안드로이드 스튜디오에서 새로운 프로젝트를 생성할 때 나타나는 “Help me choose”링크를 눌러 버전별 점유율을 확인할 수 있습니다.
  • 현재 API 레벨 21, 롤리팝 버전 이상을 사용하는 디바이스가 전체의 98.8% 입니다.
  • 특별한 경우가 아니라면 그 이전 버전은 고려하지 않아도 됩니다.

여기서 잠깐!

  • 안드로이드는 일년에 한번 정도 메이저 버전이 업데이트 되고 있습니다.(메이저 버전이 바뀐다는 것은 새로운 버전의 안드로이드가 출시 된다는 의미입니다.)
  • 하지만 새로운 버전으로 사용자가 옮겨 가는 데는 적어도 몇 년의 시간이 소요되기 때문에 항상 최신 버전에 맞춰서 개발할 필요는 없습니다.

3) 코틀린(Kotlin)

  • 안드로이드 플랫폼의 구조를 떠올리면 리눅스 커널과 자바 API 프레임워크가 결합된 형태입니다.

  • 과거에 안드로이드 플랫폼에 대한 설명에는 JVM(정확히는 Dalvik VM 입니다만, 이해를 돕고자 JVM으로 표기합니다.)이 항상 따라 붙었는데 자바 가상 머신 위에서 앱이 동작했기 때문입니다.

  • 현재는 이를 대신해 안드로이드 런타임(Android Runtime, ART)을 사용합니다.

  • 따라서 JVM이 없지만 여전히 가상 머신 위에서 동작한다는 점에서 자바의 동작 구조를 차용하고 있습니다.

  • 기존에는 주로 자바를 앱 개발 언어로 사용했지만 2017년 5월 Google I/O에서 Kotlin을 공식 언어로 채택한 후 코틀린으로 앱을 개발하게 되었습니다.

  • Google은 2019년 Goolge I/O에서 Kotlin 퍼스트를 선언하며 모든 문서에서 Kotlin 코드를 먼저 노출하는 등 좀 더 강력하게 Kotlin을 메인 언어로 지원하고 있습니다.

  • Kotlin은 Jetbrans사가 만든 프로그래밍 언어입니다.

  • 여담으로 젯프레인 사에서 만든 가장 유명한 프로그램은 IntelliJ라는 개발 툴이고, 이를 기반으로 안드로이드 스튜디오가 만들어졌습니다.

4) 함수형 프로그래밍 언어 코틀린

  • Kotlin은 함수형 프로그래밍을 표방하고 있습니다.
  • 객체지향 프로그래밍과 비교하자면 객체지향 프로그래밍은 클래스 내부에 있는 함수에서만 로직을 작성하지만, 함수형 프로그래밍은 이런 제한 없이 어디에서나 작성할 수 있습니다.
  • “Hello World”를 출력하는 짧은 코드로 비교하면 다음과 같습니다
// [Java Code]
class Hello {
    public static void main(String args[]) {
        System.out.print("Hello World");
    }
}
// [Kotlin Code]
print("Hello World")

5) 안드로이드 개발에 있어서 자바와 코틀린의 차이

  • Kotlin으로 코드를 작성하면 자바로 작성했을 때보다는 코드의 양이 훨씬 적어집니다.
  • 간단하게 체크박스를 클릭하면 화면에서 이미지를 숨겼다가 보여주는 코드를 살펴보겠습니다.
    • 다음 코드는 각각 자바와 Kotlin으로 작성한 예제입니다.
    • 자바로 작성하기 위해서는 기본 코드 외에 약 열 줄 이상의 코드가 필요하지만 Kotlin으로 작성하면 세 줄의 코드로 표현할 수 있습니다.

// [Java Code]
CheckBox checkBox = findViewById(R.id.check);
ImageView imageView = findViewById(R.id.image);
check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    public void onChanged(CompoundButton buttonView, boolean isChecked){
        if (isChecked){
            image.setVisibility(View.VISIBLE);
        } else {
            image.setVisibility(View.GONE);
        }
    }
});
// [Kotlin Code]
binding.check.setOnCheckedChangeListener { buttonView, isChecked ->
    binding.image.visibility = if(isChecked) View.VISIBLE else View.GONE
}

© 2023. All rights reserved.

by SoftyChoo