본문 바로가기

Develop/Kotiln

[Kotlin] 안드로이드 개발을 하겠다면 알아야할 코틀린 기본 문법

 

안드로이드 스튜디오로 Kotlin 연습하기

안드로이드를 kotlin으로 개발해보겠다고 마음을 먹었다면, 일단은 kotlin과 친해져보자.

친해져보기 위해서는 직접 kotlin을 쳐봐야겠지?.?

여러 컴파일 프로그램이 있지만, 안드로이드 스튜디오에서도 kotlin을 직접 연습해볼 수 있다.

 

 

 

먼저, 새 프로젝트를 만들면  app > java > ExampleUnitTest 파일을 확인할 수 있다.

 

그러면 위처럼 클래스명이 보일것이고, 제가 주석해놓은 부분에서 원하는 코딩을 해주시면 된다.

 

 

그후, 런을 돌려주시면 

 

결과를 확인하실 수 있다.

 

 

 

 

안드로이드를 하면서 자주 만날 Kotlin 문법

 

너무 기본적인 문법 설명보다는, 안드로이드를 개발하면서 자주 만날 문법 위주로 정리할 예정이다.

혹, 개발 자체가 처음이거나 기본적으로 어떻게 동작하는지 모르시는 분들은 다른 자료를 참고하시면서 보는게

나으실 듯 하다.

 

 

(1) Kotlin의 상수 / 변수

 

 

//var의 예시
var token : String = ""
  
 //val의 예시 
 val networkService: NetworkService by lazy {
        ApplicationController.instance.networkService
    }

코틀린에서의 상수/변수는 val과 var로 지정한다.

val은 상수로, 변하지 않는 값이며 var은 변수로 변할 수 있는 값을 말한다.

초반에 코틀린을 처음 접했을 때 둘이 굉장히 헷갈렸었는데,

같이 공부하던 친구가 사랑은 변하지 않으니 val(love의 l을 따서)이 변하지 않는 값인 상수다, 라고 드립을 친 후부터는

바로 외워버렸다.

 

 

var s : String = “문자열”

var i : Int = 1 // 32비트
var l :Long = 123L //64비트


var f : Float = 0.2f //32비트
var d : Double = 0.3 //64비트

var b : Boolean = true


var s   = “문자열”

var i  = 1 // 32비트
var l  = 123L //64비트


var f   = 0.2f //32비트
var d  = 0.3 //64비트

var b  = true

 

위에 두 코드는 같다. 코틀린에서는 타입을 직접 지정하지 않아도, 초기화 값에 따라 타입이 자동으로 지정되기 때문에

일일히 다 타입을 지정 안해줘도 된다.

물론 널값을 받거나 하는 등 상황에 따라 초기화에 타입을 꼭 지정해주는 게 좋을 때도 있다.

 

 holer.count.text = mypageDeliveryList[position].count.toString()

 

혹, 초기화한 값과 내가 지금 대입하려는 값이 다를 경우에는

인코딩 메소드를 통해 강제로 값의 타입을 바꿔서 넣어줄 수 있다.

 

 

코틀린에서 지원하는 인코딩 메소드는 아래와 같다.

 

 

 

(3) Kotlin은 null을 허용하지 않는다.

 

코틀린 특징 중 하나는 null을 허용하지 않는다.

하지만 null을 허용할 수 있도록, 따로 지정은 해줄 수 있다.

null 발생할 있는 곳이 있다면 ? 붙여서 null 허용해준다,라고 표시해주면 된다.

val name : String? = null

 

또한 코틀린으로 개발을 하다보면 !! 이 표시를 많이 보게 된다.

이는 null값이 절대로 안들어온다고 보증해주는 연산자이다.

하지만 null값이 들어오게 되면 오류가 발생하기 때문에 

정말 null 필요 없는 경우에만, 유의해서 사용해야 한다.

 tl_ac_my_page_delivery_manage_toptab.getTabAt(0)!!.customView = toptab.findViewById(R.id.rl_ac_my_page_delivery_manage_check) as RelativeLayout

 

혹, null이 들어올지 안들어올지 모르겠다면 let을 사용해보자.

let 함수를 호출하는 객체를 블록의 인자로 넘기고 블록의 결과값을 반환한다.

또한 let if (a != null) 대신할 있어서 null check 간단하게 있다.

var name = null
var res = name?.let ( it ->
	//널이 아닐 때 실행코드
}

 

(4) 함수 생성

 

자바에서는 

public int sum(int a, int b) {
      return a+b;
}

위와 같이 함수를 생성한다.

하지만 코틀린에서는 다른 형태로 만들어진다.

fun sum(a : Int, b: Int) : Int {
	return a+b
}

 

코틀린의 함수 형태를 뜯어보게 되면

fun 함수명(변수명: 변수타입) :리턴타입 {
  Return 값
}

이와 같은 모양을 가지고 있으며,

fun sum (a: Int, b: Int) : Int = a+b 
fun sum(a : Int, b: Int ) = a+b 

이렇게 더 단순하게 함수를 정의할 수도 있다,

 

 

(5) ;(세미콜론)을 안해도 되는,  java보다 간단한 인스턴스 생성까지 기특한 Kotlin

코틀린은 문장 끝에 ;를 하지 않아도 된다.

물론 써도 되지만 의미가 없기 때문에 굳이 안해도 된다.

또한 인스턴스르 생성할 때 java처럼 new를 쓰지 않아도 되기 때문에

인스턴스 생성이 간편하다.

new를 안해도 된다는 것은 생각보다 안드로이드 개발할 때 행복을 주는데,

통신을 하거나 여러 기능을 만들 때  간단하게 인스턴스를 생성하기 때문에

코드가 굉장히 간결해진다.

 

 

 

(6) Array<>

코틀린의 배열의 특징은 타입이 다른 값들도 모두 넣을 수 있다는 점이다.

또한 코틀린에서의 Any java에서의 object 비슷하다.

val any array : Array<Any> = arrayof(“다예하다”,28,0.5f,11.07, true)

 

 

(7) run

 run 함수는 이미 생성된 객체의 메서드나 필드를 연속적으로 호출할 때 사용한다. 

아래 코드처럼 사용하며, dataList라는 반복적인 코드를 run 문법을 통해 줄일 있다.

let 함수와 마찬가지로 ?를 사용하여 널 안정성 검사를 할 수 있다.

dataLsit.run{
	add(Person(name:”홍길동”, age : 21))
	add(Person(name:”김철수”, age : 22))
	add(Person(name:”영희”, age : 23))
	forEach {
		println(it.name)
	}
}