android-kotlin

kotlin 기본 문법

cheesecrust1008 2023. 7. 19. 20:48

변수 선언

 

val, var 키워드로 선언한다.

 

val data1 = 10

var data2 = 2

 

val의 경우는 value의 줄임말로 선언하면 값을 바꿀 수 없고 불변이다.

var의 경우는 variable의 줄임말로 값을 바꿀 수 있는 경우에 사용한다.

 

선언시에 초기 값을 할당해 주어야 한다.

 

val data = 10 // ok

val data1:Int // false

 

하지만 초기화를 미루고 싶다면, lateinit 키워드를 활용하여 초기값 할당을 늦출 수 있다.

 

데이터 타입

 

kotlin 에서의 type은 wrapper type과, primitive type 을 구별하지 않는다. 

따라서 java 로 컴파일 시에 알아서 java의 원시타입이나 wrapper 타입으로 자동으로 변환된다.

 

타입으로는 Int, String, Long, Short, Byte, Double ... 이 존재한다. 

 

모든 타입이 가능하 경우로는 Any, 반환문이 없는 함수의 경우는 Unit이 있다.

 

null 값 할당이 가능하도록 변수를 선언하는 방법도 있는데, Int? Nothing? 등으로 표현한다. 

 

컬렉션 타입

kotlin의 배열은 array class 로 표현한다. 

 

보통은 val data1 : Array<Int> = Array (3, {0}) 이런 식으로 선언한다. 

이 의미는 0우로 초가화한 배열 3개를 선언한다는 의미이다. 

 

조건문과 반복문

조건문은 우리가 흔히 아는 if else도 존재하고, when도 존재한다.

 

when의 경우는 

when(data){

    10 -> println("10)

    ....

}

 

이런식으로 작성한다.

 

이 의미는 data가 10 인경우에 출력한다는 의미이다. 

 

반복문의 경우는 for(i in 1..10){} 이런식 으로 작성한다. 

 

클래스

클래스 선언

 

class 키워드로 선언하며, 생성자는 constructor 키워드로 선언한다. 

 

따라서 예를 들어보면, 

class User{

    constructor(){

    }

}

이렇게 class를 선언한다. 

 

kotlin은 주 생성자와 부 생성자로 구분하는데,

 

주 생성자의 경우는 class 선언시에 class 이름 옆에 constructor() 를 사용한다.

그리고 바로 밑에 init 키워드를 사용해서 주생성자 본문을 작성한다.

 

또한 init을 활용해서 생성자를 정의한 후 그 인자들은 지역변수 이기 때문에 다른 함수에서 바로 사용할 수 없고, 주 생성자에서 this애 등록 시킨 후에 사용한다.

 

class User(name : String, count : Int){
	var name
    init{
    	this.nmae
    }
    fun someFun(){
    	println("name: $name")
    }
 }

따라서 위와 같이 작성한다.

 

보조생성자의 경우는 본문에 constructor를 삽입하여 선언한다. 

 

보조생성자를 통해 생성자들을 overloading 하여 선언할 수 있다.

 

하지만, 이때에 주 생성자와 보조 생성자를 동시에 활용할 경우에는 생성자 끼리 연결을 해주어야 한다.

 

class User(name : String) {
    constructor(name : String, count : Int): this(name) {
    ....
    }
 }

이런 식으로 연결해 주어야 한다.

 

상속

kotlin에서는 상속을 하려면 상위 class 에 open이라는 키워드를 먼저 붙여주어야 한다.

 

따라서 아래와 같이 작성한다. 아래는 매개변수가 있는 경우이므로 상속할때에 소괄호 안에 매개변수를 써 주었다. 

 

open class Super(name : String){
}
class Sub: Super(name){
}

클래스의 종류

데이터 클래스

    데이터 클래스는 data 키워드로 선언하며, 자주 사용하는 데이터를 객체로 묶어준다. 객체를 비교하는 함수는 equals 함수로 비교한다.

객체의 데이터를 반환하는 함수로는 toString 함수가 있다.

 

오브젝트 클래스

    익명 클래스를 만들 목적으로 사용한다. 익명 클래스는 이름이 없는 클래스이다. 오브젝트 클래스는 선언과 동시에 객체를 생성한다는 의미에서 object 라는 키워드를 사용합니다.

 

컴페니언 클래스

    companion 클래스는 멤버 변수나 함수를 클래스 이름으로 접근하고자 사용한다. 컴페니언은 객체를 생성하지 않고도 이름으로 멤ㅓ를 이용할 수 있다.

 

람다 함수

람다 함수는 fun 이 아닌, { } 로 표현한다. { } 안에 -> 로 표현하며, 왼쪽은 매개변수, 오른쪽은 함수 본문이다. 

 

val sum = {no1: Int, no2: Int -> no1 + no2}

위와 같이 표현한다.

 

고차함수

데이터가 아닌 함수를 매개변수나 반환값으로 이용하는 함수를 고차함수라고 합니다.