Android App/Kotlin

코틀린 vs 자바

AppJinny 2022. 10. 18. 20:30

*코틀린 vs 자바

-과거 안드로이드는 자바 가상머신 위에서 앱이 동작하므로 JVM(Dalvik VM) 사용 했음

-현재는 JVM을 대신해 안드로이드 런타임(Android Run Time, ART) 사용

-JVM은 없지만 여전히 가상 머신위에서 동작한다는 점이 자바의 동작구조를 차용함

-자바같은 객체지향 프로그래밍은 클래스 내부에 있는 함수에서만 로직을 작성

-코틀린은 함수혐 프로그래밍이며 함수형 프로그래밍은 제한없이 어디에서나 로직을 작성할 수 있음

객체지향 프로그래밍 - 자바코드
함수형 프로그래밍 - 코틀린 코드

-하지만 안드로이드 앱을 개발할 떄는 코틀린도 객체지향 언어처럼 클래스 내에 로직을 작성해야 함

 

*코틀린

-Google은 Google I/O 2019에서 Android 개발이 점차 Kotlin 우선으로 될 것이라고 발표했고 모든 문서에서 코틀린 코드를 먼저 노출하는 등 코틀린을 메인 언어로 지원하고 있음

-코틀린은 젯브레인(JetBrains)사가 만든 프로그래밍 언어

-함수형 프로그래밍을 표방하고 있음

 

**코틀린에서 새롭게 다루는 것들

-젯팩 / 자세한 설명 : https://heeyjinny.tistory.com/51

-뷰 바인딩 / 자세한 설명 : https://heeyjinny.tistory.com/50

-코루틴

-Null Safe / 자세한 설명 :  https://heeyjinny.tistory.com/33

-Scope Function (apply, also, let, with, run) / 자세한 설명 : https://heeyjinny.tistory.com/35

-Data Class / 자세한 설명 : https://heeyjinny.tistory.com/28

-Lambda expression  

-lateinit/ 자세한 설명 : https://heeyjinny.tistory.com/34

-lazy / 자세한 설명 : https://heeyjinny.tistory.com/34

 

*젯팩(Jetpack)

-모든 버전과 기기에서 일관되게 동작하는 라이브러리

-각각의 버전 및 기기별로 여러 버전의 코드를 작성할 필요가 없음

 

*뷰 바인딩(View Binding)

-뷰에대한 접근, 뷰에 접근해서 값을 입력하거나 사용자와 상호작용하는 방식

-기존의 findViewById()를 대체해 사용하던 코틀린 익스텐션을 사용했지만 2021년 9월 기준으로 완전제거됨

-코틀린 익스텐션을 개선한 것이 뷰 바인딩

-뷰 바인딩은 레이아웃 파일이 사용되는 모든 곳에서 코틀린 익스텐션 대체 가능

-액티비티, 프래그먼트, 어탭터에서 각각의 사용법이 다름

 

*코루틴

-기존 스레드를 대체하는 새로운 백드라운드 처리 방식, 스레드의 경량화

-동시성 프로그래밍 가능, 다른 언어에서 이미 사용되고 있는 개념을 코틀린에 도입

-기존 스레드는 코루틴을 위에 실행 가능한 공간을 제공하는  역할만 함

-하나의 스레드에 여러개의 코루틴이 존재할 수 있음

-기존 스레드의 변경에서 발생할 수 있던 성능저하는 더 이상 발생하지 않음

 

*Null Safe

-코틀린

val a : Int? = 100 //null허용

val b : Int = 100 //null비허용

a?.sum() //초기화 했을 때 null값을 허용함. a의 값이 null일경우 실행하지 않게 하기 위해서는 '?'를 붙임

b.sum() //초기화 시 null safe

 

-자바

-자바코드에서 null로 초기화 한 경우 아래와 같이 null safe한 코드를 구성해야함

Integer c = 100;

c = null;

if (c != null) { //만약 c가 null이 아닐 때 ( !=)

    c.sum();

}

 

*Scope Function (apply, also, let, with, run)

-코드를 읽기 쉽게 만들어주는 코틀린 함수

 

--apply함수

-주로 객체 초기화 시 사용

-람다의 객체를 축약해서 넘겨주게 되고 apply함수는 this를 통해 접근하는데 this는 생략가능

코틀린
자바

 

--also함수

-객체가 파라미터로 전달되고 람다의 입력값으로 내려오게 될 때 이 입력값은 it으로 접근함

-람다로 전달된 값이 한개이면 value생략 가능

코틀린
자바

 

--⭐️let함수

-nullsafe를 위해 사용하는 함수

-null이 아닌 객체에서 람다를 실행할 때 사용

코틀린

//null이 아닐경우 ?.let뒤 함수 실행,

//.orEmpty() : number가 null값일 때 빈 값으로 출력하게 함

자바

 

--With함수

코틀린
자바

 

--Run함수

-어떤 값을 계산할 필요가 있을 때 사용

-with과 비슷하게 반환값이 람다의 결과값

코틀린

//with함수와 다르게 확장함수로 사용가능함

//결과는 query()의 반환값이 result에 들어가게 됨

자바

 

*Data Class

-데이터를 저장하는 목적으로 클래스를 만듦

-자바에서의 getter와 setter가 코틀린에서 생략되며 자동으로 생성됨 (var)

 

*Lambda expression

-함수에 함수를 전달하고 함수를 실행시키는 역할을 함

-코틀린에서 람다식을 사용할 때 파라미터가 한 개일 때 생략이 가능함

코틀린

//파라미터 생략

자바

 

*lateinit

-null safe한 코드를 사용하기 위해서 변수 선언 시 초기값이 필수여야함 

-만약 초기값이 없는 변수를 선언하려면 변수선언 맨 앞에 'lazyinit' 사용

 

*lazy

-변수를 미리 선언해놓고 사용할 때 할당

-나중에 꼭 사용해야 미리 선언해 놓은 값을 할당할 수 있음

 


이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.