본문 바로가기

# 02/코틀린

[Kotlin] 언어의 특징

반응형

프로그래밍적인 특징

  

  - 확장 함수, 연산자 오버로딩을 지원한다.

- int 형을 확장해 'i = 3 power 4'식으로 새 연산자를 만들 수 있다.

  

  - '==' 연산자의 경우 equals()와 똑같이 작동 하므로 i == j는 true이다.

- 자바의 '==' 를 쓰려면 '===' 를 쓰고, != 의 경우 !== 이다.

  

  - static 메서드가 없다. 대신, companion object를 사용해 '클래스명.companion.메서드_혹은_get변수명()'을 사용한다.

  

  - 자바와 완전하게 상호 운용된다.




NPE(NullPointerException)


- 필드나 변수를 선언할 때 기본값을 강제하지 않으므로.

- field, method 등이 어느 시점에 초기화 되는지 잘 알 수 없다.

- 안드로이드의 Activity, Fragment의 생명주기 때문에 특정 시점에 null일 수 있다.



NPE 대처 방법


if ( foobar != null ) {

// foobar 사용하는 코드

}



try {

foobar.doSomething();

} catch ( NullPointerException e ) {

// 예외 처리

}



Null Safety


- null을 처리하는 데 있어 안전한 방법을 제공

- 변수를 선언할 때 읽기만, 쓰기 가능여부

- null 값을 가질 수 있는지 없는지

- 초기값으로 어떤 값을 가지는지 정해야 한다.



hello?.doSomething()


- ?는 null이 될 수 있음을 나타낸다.

- if ( hello != null ) hello.doSomething()과 동일

- hello가 null이 아닌 경우에만 doSomething()을 호출함

- hello!!.doSomething() 표현식을 쓰면 호출을 강제하고 null 이면 NullPointerException을 발생한다.




코드예제

var neverNull : String = "something"

var mightBeNull : String? = null    // ?를 사용해 null이 될 수 있음을 나타낸다.


if ( neverNull.length > 0 ) {    // 이 경우엔 문제 없음

...

}


if ( mightBeNull.length > 0 ) {    // 이 구문은 컴파일러에서 에러

...

}




Higher-order Functions


- 함수 자체를 파라미터로 가져오거나 리턴할 수 있다.

- 함수는 변수에 저장되어 나중에 사용될 수 있다.

- 함수는 다른 함수 안에서 생성될 수도 있다.



Lambdas


- 함수가 선언되지 않았는데 전달 될 수 있다.




Java의 onClick에 대한 기본 형태

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

view.setAlpha(0.5f);    // do something

}

});


Kotlin의 Lambda식으로 변환된 형태

button.setOnClickListener {

view -> view.alpha = 0.5f    // onClick에 view를 변수로 가지므로

}


- 제공되는 it 키워드를 사용하는 경우 ( 제한 : 함수의 변수가 한 개 이어야 함 )

button.setOnclickListener {

it.alpha = 0.5f




Data classes

데이터를 가진 클래스


- 특정 데이터 타입을 정의할 때 클래스와 속성 필드만 있는 클래스를 만들어 왔다.

- Java에서는 각 필드의 get/set 메서드를 통해 접근하며 이러한 메서드를 만드는 과정이 지루하다.

- 코틀린에서는 클래스를 싱글라인으로 모든 속성과 함께 선언할 수 있다.

- 또한, 컴파일러가 모든 get/set을 만들고 toString(), copy() 함수까지 생성한다.




매개변수가 많은 메서드와 기본인수

 - 기본인수의 사용


fun orderPizza  ( size : Size, pepperoni : Boolean, mushrooms : Boolean,

ham : Boolean, pineapple : Boolean, pickles : Boolean,

sausage : Boolean, peppers : Boolean, onion : Boolean)

{

...

}


// Wait... did I just order pickles on my pizza?

// Why do we even have that option?

orderPizza ( Size.LARGE, true, false, false, false, true, false, true, false)



fun orderPizza  ( size : Size, 

pepperoni : Boolean = false, 

mushrooms : Boolean = false,

ham : Boolean = false, 

pineapple : Boolean = false, 

pickles : Boolean = false,

sausage : Boolean = false, 

peppers : Boolean = false, 

onion : Boolean = false)

{

...

}


orderPizza ( Size.LARGE, ham = true, mushrooms = true )



- 아래쪽이 훨씬 읽기 쉽게 되어있다.




요약


- static 대신 companion object를 사용해 접근한다.


- 자바와 완전하게 상호 운영된다.


- NPE(NullPointerException)을 대처할 수 있다.

- 필드나 변수를 선언할 때 기본값이 반드시 정해져야 한다.

- null 가능성이 있을때는 ?, NPE를 발생 시키려면 !!를 사용한다.


- Higher-order 함수는 함수 자체를 파라미터로 가져오거나 리턴할 수 있다.


- data 클래스는 get/setter 함수는 자동으로 만들며 싱글라인에 선언할 수 있다.


- 불변성/가변성 변수 선언을 위한 val, var을 제공한다.



반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] 변수와 타입 2  (0) 2019.08.12
[Kotlin] 변수와 타입 1  (0) 2019.08.12
[Kotlin] super와 this의 참조  (0) 2019.08.08
[Kotlin] 상속과 다형성  (0) 2019.08.07
[Kotlin] 생성자  (0) 2019.08.06