코틀린 vs 자바
*코틀린 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 에서 발췌하였습니다.