개발/Java&Kotlin

[Kotlin] 코틀린 기초 살펴보기

devhooney 2022. 11. 25. 16:30
728x90

코틀린 기초

 

나는 Java + Spring boot를 주로 사용하는 개발자 이지만,

Kotlin은 같은 JVM 환경에서 돌아가고,

Java를 공부한 사람이 접근하기 쉽다고 하여 한번 겉핥기 식으로 공부해보려한다.

 

 

기본적 특징

  • 기존 자바 언어와 완벽한 호환성을 제공
  • 안전성: NPE 방지, Immutable 자료구조 제공
  • 간결성: 코드는 작성되는 시간보다 읽히는 데 훨씬 많은 시간이 소모(간결한 코드는 가독성과 유지보수성을 향상시킴)
  • 코루틴 라이브러리를 통한 비동기 프로그래밍
  • OOP와 FP 구조를 함께 사용할 수 있음

 

 

 

728x90

 

 

코틀린 기본 문법

// java
int a = 10;

// Kotlin
val a: Int = 10
var a = 15

- 변수 선언 방식이 Go나 TS와 비슷하다.

- Go 처럼 ";"를 생략해도 된다.

- val : 변할 수 없는 상수 Java의 final, Go의 const

- var : 일반적인 변수에 해당.

 

 

함수

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

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

// 간단하게 변형
fun sum(a: Int, b: Int): Int = a + b

// 또는 아래와 같이 타입을 생략하여 바로 return도 가능
fun sum(a: Int, b: Int) = a + b

- 함수 선언도 Go나 Typescript와 비슷하다.

 

fun max(a: Int, b: Int) = if (a > b) a else b

- 이렇게 함수를 사용할 수도 있다.

 

var a: Int = 15
a = null // 문법상 오류 발생

var b: Int? = null
b = null  // 정상 수행

- 기본 변수는null을 가질 수없고 '?'가 있어야 null을 가질 수 있다.

- '!!'도 있는데, null이면 오류가 발생한다.

 

- 예시

// example 객체의 a를 return 하지만 example이 null이면 null을 리턴
fun example(example: Example?): Int? {
  // ...
  return example?.a
}

 

- 타입을 TS처럼 Any로 지정할 수 있다.

- Java의 Object

- is는 Java instanceof

// java
int getStringLength(Object obj) {
  if (obj instanceof String) {
    return obj.length;
  }

  return 0;
}

// kotlin
fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    // 'obj' is automatically cast to 'String' int this branch
    return obj.length
  }
  // 'obj' is still of type 'Any'
  // Type이 String이 아니라서 null을 return 하게 됩니다.
  return null
}

 

 

반복문

// java
ArrayList<String> arrayList = new ArrayList<>();
for (String s : arrayList) {
	System.out.println("TAG String : " + s);
}

// kotlin
val arrayList = ArrayList<String>()
for (s in arrayList) {
    println("TAG String : " + s)
}

// java
for (int i = 1; i <= 5; i++) {
  System.out.println(i);
}

// kotlin
for (i in 1..5) {
  println(i)
}

- Java와 매우 비슷하다.

 

 

When

fun main(args: Array<String>) {
    cases("Hello") // String
    cases(1) // Int
    cases(System.currentTimeMillis()) // Long
    cases(MyClass()) // Not a string
    cases("hello") // Unknown
}

fun cases(obj: Any) {
    when (obj) {
        1 -> println("One")
        "Hello" -> println("Greeting")
        is Long -> println("Long")
        !is String -> println("Not a string")
        else -> println("Unknown")
    }
}

- 자바의 switch랑 비슷한데, Go처럼 Break가 없어도 된다.

 

 

 

 

진짜 간단하게 알아봤는데,

업무나 프로젝트를 진행해봐야 진짜 편리함을 알 수 있을 것 같다.

사이드 프로젝트를 진행하게 되면 코틀린을 한 번 사용해보려 한다.

 

 

728x90