Kotlin-In-Action | #2. 기초

보람·2022년 4월 21일
0

Kotlin-In-Action

목록 보기
3/12

함수 정의

fun main(args: Array<String>) {
    println("Hello, world!")
}
  • fun 키워드 사용(즐거운 코틀린🌝)
  • val과 var는 각각 읽기 전용 변수와 변경 가능한 변수를 선언할 때 사용
  • 파라미터 뒤에 타입 명시
  • System.out.println() -> println() 사용
  • 줄 끝에 세민콜론(;)을 붙이지 않아도 됨

문자열 템플릿

    val name = "보람"
    println("Hello, ${name}안녕!")
    >>  Hello, 보람안녕!
  • 문자열을 "+"로 연결하지 않아도 되므로 코드가 간결해진다. 변수 이름 앞에 $를 붙이거나, 식을 ${식}처럼 ${}로 둘러싸면 변수나 식의 값을 문자열 안에 넣을 수 있다. (${}사용을 더 권장한다.)
  • 한글문자열에 경우 $만 사용하면 "보람안녕"이라는 변수로 인식해서 ${name}을 꼭 써야한다.

간결한 객체 클래스

class Rectangle(val height: Int, val width: Int)
  • val은 게터만 존재한다.
  • var는 게터,세터 모두 존재한다.
  • 게터,세터를 작성하지 않고 val or var로 클래스 선언시 파라미터를 지정하면 생성된다.
  • 물론 get함수를 따로 커스텀 가능하다.(get(){return 리턴값})

if는 식이며 값이다.

fun max(a: Int, b: Int): Int { // Int라는 리턴 타입을 갖는다.
    return if (a > b) a else b
}
  • if or else로 도출된 값이 리턴값이 된다.
  • 아래와 같이 간략하게 작성가능하다.

식이 본문인 함수

위 함수를 아래와 같이 줄일 수 있다.

fun max(a: Int, b: Int) = if (a > b) a else b
  • 정적타입지정 언어이기 때문에 :Int를 제거 가능하다.
  • "=식"과 같은 식이 본문인 함수가 코틀린에서는 자주 사용된다.

자바의 switch와 비슷하나 더 강력한 코틀린의 when

enum class Scone {
    CHOCOLATE, GREENTEA, BUTTER
}

fun getSconeName(scone:Scone) =
    when(scone) {
        Scone.CHOCOLATE -> "초콜릿스콘" 
        Scone.GREENTEA -> "녹차스콘"
        Scone.BUTTER -> "플레인스콘"
    }
    
println(getSconeName(Scone.GREENTEA))

>> 녹차스콘
  • 값 -> "반환값"
  • IS 타입 -> "반환값"
  • when 식이없는 형식 가능 : when{케이스->"반환값" else->"반환값"}

IS : 스마트캐스트(타입검사+타입캐스트)

value is T(타입)
  • 코틀린에서는 is를 사용하여 타입검사를 한다.
  • 코드에서 명시적캐스팅을 하지 않아도 is를 사용하면서 컴파일러가 캐스팅 처리를 해준다.

반복문

  • do~while, while은 자바와 동일
  • for문은 더 간결해졌다.
    • for(i in 1 .. 100 step 2)
      • 1~100까지 2씩 증가된다.
      • .. : until(증가)
      • downTo : 감소
      • step : until에 경우 +size, downTo인 경우 -size
      • 범위안 포함여부 : in or !in

자바와 비슷하지만 더 간결한 예외처리

//throws 절이 없다(자바와의 가장 큰 차이)
fun readNumber(reader: BufferedReader): Int? {
    try {
        val line = reader.readLine()
        return Integer.parseInt(line)
    }
    //예외타입을 :옆에 쓴다
    catch (e: NumberFormatException) {
        return null
    }
    finally { //finally는 자바와 똑같이 동작
        reader.close()
    }
}
  • 함수가 던질 수 있는 예외를 선언하지 않아도 된다.
  • 예외 인스턴스 생성시 new를 붙이지 않아도 됨(throw 예외인스턴스())
profile
백엔드 개발자

0개의 댓글