[Kotlin]

[Kotlin] 기본 문법 정리

미냠 2023. 10. 15. 20:57
반응형

최근 스터디를 시작하면서 Kotlin 이라는 언어가 눈에 띄었다

Kotlin은 오픈 소스 프로그래밍 언어로 Java와 매우 유사하지만 간결하게 사용 가능하다

또한 자바와 호환성, 실용성, 간결성의 장점이 있다

특징으로는

정적 타입 지정 언어로서 모든 프로그램의 구성요소를 컴파일 시점에 알 수 있다.

즉, 개발자가 타입을 선언하지 않아도 되는 타입 추론을 지원해줌으로서

컴파일러가 프로그램의 정확성을 검증하여 프로그램의 오류로 인한 중단 가능성이 줄어든다

두번째는 null 안정성이있다

kotlin은 null 값이 가능한 타입을 지원하기 때문에 java에서 가장 자주 발생하는 null point exception이 줄어든다

이것은 널 포인터에서 자유롭다고 표현한다고 한다

마지막으론 함수형 프로그래밍을 지원한다

이는 가독성을 높이고 유지보수가 용이하다

또한 불변 데이터 구조를 사용하여 다중 스레드를 사용해도 안정적이다

암튼 Kotlin이 요즘 뜨는 언어라고 해서 공부를 시작해보려고 한다

간단한 기본 문법을 정리해봤다

일단 기본적으로 변수 선언으로 두가지가 있다

var : 읽고 쓰기가 가능한 변수 / val : 읽기만 가능한 변수

만약 val을 변경하면 val cannot be reassigned 오류가 발생한다

그래서 val을 사용하는 경우, 데이터형 선언 후 값을 추가하면 가능하다


val a : Int

a = 1

printIn(a)

-> 1


또한 타입 추론을 지원하기 때문에 데이터형 선언이 없어도 데이터형을 알 수 있다


val a = 1

printIn(a::class)

-> Int


? 를 추가하면 해당 변수에 null 값을 허용한다는 뜻이다

예를 들어 str를 아래와 같이 선언하는 경우 오류가 발생한다


val str : String = null

-> null can not be value of a non-null type String


여기에 ?를 추가하면 str에 문자형과 null 값을 모두 허용한다라는 뜻이 된다.


val str : String? = null

 

또한 해당 변수의 길이를 출력하는 경우

의 오류가 발생하는데 여기서 ?. 또는 !!. 를 사용하라는 오류를 볼 수 있다


printIn(str.length)

-> Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?


?. 은 str이 null이 아니라면 뒤에 있는 명령어를 실행한다 라는 뜻으로

str이 null이 아니기 때문에 뒤에 있는 명령어 length 출력하게 된다


val str : String? = "ABC"

printIn(str?.length)

-> 3

val str : String? = null

printIn(str?.length)

-> null


!!. 은 str이 null이 들어갈 수 있는 변수이지만 null이 아님을 보장한다는 뜻으로

str은 null값이 아니기 때문에 length가 실행된다


val str : String? = "ABC"

printIn(str!!.length)

-> 3

 

val str : String? = null

printIn(str!!.length)

-> null point exception 발생


?: 는 Elvis 연산자로 str이 null 이면 뒤에 명령어를 실행한다는 뜻이다.

str이 null이 아니기 때문에 아무것도 출력되지 않게 된다


val str : String? = "ABC"

str ?: printIn("str is null")

->

 

val str : String? = null

str ?: printIn("str is null")

-> str is null


기본적으로 알고 있는 if문에서 Kotlin의 if문의 차이점이 있다

예를 들어


val a: Int = 100

val b: Int = 200

val c: Int

if (a > b) {c = a} else {c = b} printIn(c)

 

의 코드의 경우 c 값을 if 문 앞에 추가할 수 있다


c = if (a > b) {a} else {b} printIn(c)


또한 $를 이용하여 변수 값을 출력할 수 있다


val a: Int? = null

if (a == null) {printIn("null check true")} else {printIn("a = $a")}


이면 null check true 가 출력된다

하지만 val a: Int? = 100 으로 지정하고 출력하면

a = 100으로 출력이 된다

arrayOf를 사용하면 해당 변수가 배열안에 포함되었는 지를 확인 할 수 있다


val a: Int = 100

if (a in arrayOf(100,200,300)) {printIn("contain")} else {printIn("not contained")}


if문 외에 when문을 사용하면 if문을 반복하지 않고 간편하게 사용 가능 하다


val a: Int = 100

when(a) {

100 -> printIn("1")

200 -> printIn("2")

300 -> printIn("3")

400 -> printIn("4")

else -> printIn("5")

}


또한 최소 최대 범위값을 추가할 수 있다


val a: Int = 199

when(a) {

100..199 -> printIn("1")

200..200 -> printIn("2")

else -> printIn("3")

}

> 1이 출력 된다


데이터를 선언할 때는 3가지 종류가 있다

class / data class / enum class

class는 기본적으로 알고 있는 class와 동일하다고 보면 된다

data class는 데이터를 다루는데 최적화된 클래스로

getter, setter,toString,hashcode 등... 다양한 메소드를 자동으로 생성해준다

enum class는 기본적으로 코드 형식의 데이터를 관리하는데 사용된다


fun main() {

// item 클래스의 인스턴스 생성

val item: Item = Item("BOOK", 10000)

printIn("Item name is ${item.name}, price is ${item.price}")

}

// item이라는 클래스와 name, price의 생성자를 생성

class Item(val name:String, val price:Int)

// item2라는 data class 생성

data class Item2(val name:String, val price:Int)

// 코드 형식의 데이터형 class 생성

enum class Color {RED, GREEN, BLUE}


이렇게 Kotlin 기본 문법을 정리해봤다

이제 프로젝트로 생성해서 만들어봐야지..

반응형