보초의 코딩일기장

코틀린 이것만 보면 돼 : 1일차 본문

Android/Kotlin

코틀린 이것만 보면 돼 : 1일차

장보비 2020. 1. 7. 21:06

 

1.

코틀린의 변수는 두가지 형태로 나눌 수 있다.

가변 변수인 var, 불변 변수인 val를 이용하는 것이다.

(불변변수 val는 자바의 final과 같은 의미)

 

Kotlin ) var name: String = "name"

JAVA ) String name = "name";

 

이렇게 코틀린은 세미콜론(;)도 없으며 콜론(:) 다음에 변수 타입을 지정한다.

 

2.

null을 가질 수 없으면 Non-null, null을 가질 수 있으면 Nullable 타입이다.

var name: String = null (x) -> Non-null 타입에 null을 할당한 경우이기 때문이다.

var name: String? = null (o) -> 물음표를 앞에 선언하여서 Nullable타입으로 변경한다.

 

Nullable 타입은 Non-null타입을 할당할 수 있지만 그 반대는 불가능 하다.

 

안전 호출 연산자) Nullable 변수 ?. 참조할 속성 또는 호출할 메소드

안전 호출 연산자는 null여부를 판단하여 null이 아니면 속성을 참조하거나 메소드를 호출한다.

만약 null이라면 null을 리턴하는 것이다. (if문이랑 비슷한 듯)

var firstName: String? = null
print("${firstName?.legnth}")

 

firstName?.legnth: "firstName이 null인지 아닌지 판별 후 null이 아닐 경우 firstName의 길이를 출력한다." 로 해석해볼 수 있다!

현재 상태에서는 firstName 이 null이므로 null을 출력하게 된다.

Nullable타입은 length를 참조하기 위해 안전 호출 연산자를 반드시 사용해야 한다.

 

자바에서는 아래와 같이 표현된다.

if(firstName !=null){
  firstName.legnth();
} else{
  null;
}

 

코틀린을 사용해 코드를 굉장히 간결하게 만들 수 있다는 것을 느끼고 있는 중이다.

 

3.

코틀린은 Nullable 타입의 값이 null이면 null을 리턴하는 안전 호출 연산자를 사용할 때 null 대신 사용할 값을 지정할 수 있는 엘비스 연산자 ?: 을 제공한다. 널 복합 연산자라고도 한다.

엘비스 연산자는 좌항이 null이 아니면 좌항을 값으로 갖고 null이라면 우항을 값으로 갖는 것이다.

좌항과 우항은 변수 뿐만 아니라 표현식, 함수 호출도 가능하다!

 

fun main(args:Array<String>){
  var first:String ?= null // Nullable변수로 변경
  //first가 A와 같은지 판단. 같으면 좌항 값인 True, 다르면 오른쪽 항인 False 반환.
  var second:Boolean? = first?.equals("A") ?: getDefaultSecond() 
  println("first = $first" + "second = $second")
}

fun getDefaultSecond() = false

 

4.

그 밖에도 null이 아님을 단언하는 !! 연산자가 있다.

예측 불가능한 NPE의 정확한 발생 지점을 알고 싶을 때 사용한다.

 

5.

확장함수는 아래와 같이 사용 가능하다.

fun 확장하려는 대상.함수명(매개변수) : Unit { } or

fun 확장하려는 대상.함수명(매개변수) : 리턴타입 { }

여기서 확장하려는 대상은 함수를 추가할 클래스이며 수신자 타입이라고도 한다.

fun main(args: Array<String>){
  val a = "Apple"
  val b = "Banana"
  prnit(a.getLonggerLength(b))
}
//String에 getLonggerLength라는 함수를 추가할 것이다.
//매개변수는 String이고, 반환형도 String이다.
fun String.getLonggerLength(x:String): String{
 // Apple 글자수가 Banana의 길이보다 길다면 Apple 반환, 그렇지 않으면 Banana 반환.
  return if(this.length > x.length){
    this
  } else {
    x
  }
}

 

6.

코틀린의 클래스 선언방식은 자바와 마찬가지로 class 키워드를 사용한다.

객체를 만든 후 자바의 필드처럼 변수명으로 쉽게 부를 수 있다.

class Person{ .... }

val student = Person() //new 키워드를 사용하지 않음.

 

companion object로 static 변수 역할을 할 수 있다.

 

getter의 선언 방법은 프로퍼티 바로 다음에 get(),

setter의 선언 방법도 프로퍼티 바로 다음에 set() 으로 나타낼 수 있다.

커스텀 접근자를 사용할 때에는 Backing Field를 사용할 수 있다.

자바에서 this를 사용하고 싶을 때, field를 사용하면 될 듯!

 

init 키워드를 통해 초기화 코드를 작성할 수 있다.

 

Buy me a coffeeBuy me a coffee
Comments