2022-09-20(화요일)

코틀린이란 무엇인가


코틀린과 자바의 관계


코틀린의 기본 문법

fun main(args : Array<String>){

	pringln("Hello, World!")

}

코틀린은 다른 언어와는 다르게 main함수를 fun main(args : Array){ } 로 선언한다.

이는 자바와 비슷하면서 다르다.


코틀린의 기본 특징

data class Person{
	val name : String,
	val age : Int? = null
}

fun main(args: Array<String>){
	val persons = listOf(
			Person("Alice")
			Person("Bob", age = 29)
			)

	val oldest = persons.maxBy { it.age ? : 0 }
	println("The oldest is : $oldest")
}

//참고 : https://incheol-jung.gitbook.io/docs/study/kotlin-in-action/1 
  1. 코틀린은 장황했던 Java와 비교하면 눈물날 정도로 간결한 문법을 제공한다. 간결한 문법을 제공하면서도 런타임 오버헤드가 거의없다.
  2. 오버헤드 없는 널 안정성을 제공한다.

    위의 코드에서 예시를 들어보자

     val age : Int? = null
    

    Kotlin의 변수는 Nullable(널 값 사용 가능)과 NonNull(널 값 사용 불가)로 나뉘는데, 변수 선언시 “?”를 붙여 Nullable로 만들 수 있다.

     val s : String? = null //널이 될 수 있음
     val s2 : String = "" // 널이 될 수 없음
    
    1. 예외처리를 강제하지 않는다. JSON Object를 만들 때 눈물이 난다…
    2. 모든 함수가 리턴값을 가진다
    3. 확장함수, 연산자 오버로딩을 지원한다.

      예를 들어 int형을 확장해 ‘i = 3 power 4’같은 식으로 새 연산자를 만들 수 있다.

    4. ==!= 연산자가 객체의 identity가 아닌 내용물을 비교한다.Java에서는 String i와 String j가 같은 문자열을 담고 있어도 가리키는 객체의 메모리 주소는 다를 수 있으므로 i == j는 false가 될 수 있다.

      따라서 객체의 내용물을 비교하려면 equals() 함수를 사용해야 한다. 하지만 Kotlin에서 ==는 equals()와 똑같이, 즉 content equality로 작동한다.

      따라서 i == j는 true다. Java처럼 identity equality를 비교하려면 ===!==를 쓰면 된다.

    5. Java와의 상호 운용이 100% 지원된다.
    6. 코루틴을 지원한다.
    7. 변수 뒤에 타입을 지정해준다

       val name : String
       val age : Int
       val score : Double
      

      위의 코드처럼 변수 뒤에 타입을 지정해준다.