[Kotlin] 코틀린은 무엇인가?

yuseon Lim·2021년 4월 14일
0

Kotlin

목록 보기
1/11
post-thumbnail
post-custom-banner

공부하기 전에..

학교 안드로이드 수업으로 갑자기 코틀린을 배우게 되었다. 자바도 완벽하지 않은 시점에서 코틀린을 공부하려 하니 매우 어려워서 블로그에 정리를 해 나가며 공부를 하려고 한다. 검색을 해보며 참고한 자료들은 아래 참고자료에 써놓겠지만 대부분

를 많이 참고해서 쓸 예정이다. 개인적으로 교수님 멋지시다.. 학교 교수님이 이런 최신(?) 언어를 가르쳐 주실줄은 몰랐다. 작년까진 자바로 수업하셨는데 이번 년도부터 코틀린으로 바뀌었다.

👻이 Kotlin 시리즈는 Java를 알고있다는 전제 하에 작성합니다!

Kotlin?

자바의 가상머신(JVM)위에서 돌아가는 프로그래밍 언어로, Jetbrain (IntelliJ, Android Studio 만든 회사) 에서 자바를 보완하기 위해 만들어진 언어이다.
Google은 Google I/O 2019에서 Android 개발이 점차 Kotlin 우선으로 될 것이라고 발표 했다고 한다. 아직은 Java중심의 안드로이드 개발이 대부분이지만 점점 바뀌어 나갈 것이다.

Java대신 Kotlin 쓰는 이유

Type Inference

할당되는 리터럴 값을 알아서 추론해준다.

val a: Int = 1 // 이렇게도 할 수 있지만
val b = 2 // 따로 명시하지 않아도 b는 Int타입임을 추론(inferred)한다.
val c = "Hello: // c는 languageName또는 String으로 추론

JVM Compatable

  • 코틀린으로 작성한 코드는 컴파일 되면 결국 자바 바이트 코드가 된다.
  • 자바와 100% 호환되므로 자바 기반 코드를 호출하거나 자바 기반 코드에서 Kotlin을 호출한다.

Null Safety

String s = null
s.length // Error

Java에서 null 값에 접근하게되면 NullPointerException이 발생한다.
이렇게 개발자가 null 체크를 깜빡하게 되면 에러가 발생하여 프로그램이 비정상적으로 종료되곤 한다. 그래서 Kotlin은 Nullable/Non-Nullable 타입을 만들어서 구분하게 했다.

Kotlin 변수는 기본적으로 null 값을 가질 수 없다.

// 이렇게 쓸 수 없다.
val a: String = null

null을 할당하려면 nullable 타입으로 명시해야한다.

// Nullable type
val a: String? = null

함수형 언어

Kotlin은 메소드 대신 function을 사용한다.
따라서 Kotlin의 function은 메소드와는 달리 항상 리턴값이 존재한다.
void와 비슷하게 Kotlin의 기본 리턴값은 Unit이다.(생략가능)

// 매개변수가 둘다 Int이고 반환형이 Int
fun sum(a: Int, b: Int): Int {
    return a + b
}

// 파라미터 함수. 리턴 타입은 추론된다.
fun sum(a: Int, b: Int) = a + b

// Unit(void) 리턴
fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}")
}

// Unit은 생략할수있다.
fun printSum(a: Int, b: Int) {
    println("sum of $a and $b is ${a + b}")
}

Function vs Method

함수는 독립적으로 존재하고 메소드는 class에 종속적인 함수이다.

  • 함수는 로직 처리 이후 사용자가 원하는 결과를 반환하고
  • 메소드는 해당 클레스에 대한 객체가 생성되어야 사용할 수 있다.

안드로이드 개발에서의 Kotlin

앞에서 Kotlin은 함수형 언어라고 했지만 OOP, 객체지향 프로그래밍 언어이기도 하다. 안드로이드 개발에서는 클래스 내에서 로직을 작성하는등 자바의 형식에 맞춰 Kotlin을 사용해야 하지만 자바로 작성했을때보다 간결하고 기능도 다양하다.

참고자료

profile
🔥https://devyuseon.github.io/ 로 이사중 입니다!!!!!🔥
post-custom-banner

0개의 댓글