Kotlin 기본 문법 정리

Kotlin 기본 문법 정리

기본 문법

변수 생성

var / val

var: mutable value 선언 val: immutable value 선언

자료형

  • Double
  • Float
  • Long
  • Int
  • Short
  • Byte
  • String

Type casting

to~~~ 메소드를 이용

ex) 
- toLong()
- toInt()
...

Getter & Setter

C#에 있는 getter와 setter와 유사함

ex)

class Sample<T> {
  var list: List<T> = mutableListOf()
    set(value) {
      if (value.isNotEmpty()) {
        field = value
      }
    }

    get() = field
    
  val isEmpty: Boolean
    get() = this.list.isEmpty()
}

private 변수

setter나 getter에 private 키워드를 삽입한다.

class Test {
  var name: String = "userName"
    private set()
}

laze vs lateinit

laze

  • 늦은 초기화로, 호출 시점에 초기화됨
  • val과 함께 사용함
val name: String by lazy {
  "lazy initialized"
}

lateinit

  • var만 사용 가능
  • null 이나 초기값이 필요 없음
  • 늦은 초기화 이므로, 초기화 전에 사용하면 오류
  • 변수에 대한 setter/getter 사용 불가
lateinit var name: String
name = "lateinit initialized"

Tip

String Templates

문자열 중간에 변수를 넣기 편함 문자열 중간에 "${value}" 를 사용할 수 있음

Function

함수 생성

여러가지 형태로 축약해서 사용 가능

fun getName(): String {
  return "name"
}

fun getName(): String = "name"

fun getName() = "name"

Extension Function

기존 타입에 함수를 확장해서 사용 가능

  • class에 있는 함수가 우선순위가 더 높음

Class

기본 구조

class 클래스이름 constructor(변수) {
}
class 클래스이름(변수) {
}

// primary constructor - constructor 생략 가능
class Sample constructor(val name: String, val age: Int) {
  // secondary constructors - 생략 불가
  constructor(name: String) : this(name, 0)
}

class Sample(val name: String, val age: Int = 0) {
  init {
    println("name: $name, age: $age")
  }
}

상속

상속을 위해선 open class로 생성해야함

Data Class

모델을 위한 클래스로 앞에 data 키워드를 붙이면 됨

Inner Class

Class 내부에 새로운 Class를 생성

  • 앞에 inner 키워드를 붙이면 됨