세상은 모험을 두려워 하지않은 자의 것이다~~!

Java 개발자가 Kotlin 을 공부하면서.. 끄적인 노트입니다.

예외처리

    /*   
        기본적인 예외처리는 Java와 거의 동일함
        다만 Java는 Checked exception 은 반드시 try-catch or throws 처리를 강제 했었으나 코틀린은 unchecked exception 으로 처리된다고 함.
     */
    try {
        println("String to Int (NumberFormatException) : ${"ABC".toInt()}")
    } catch (e: NumberFormatException) {
        println("NumberFormatException error : ${e.message}")
    }

    // 또 다른점은 try-catch 로 리턴값을 전달 받을 수 있음 (if문을 삼항연산자 처럼 사용한 방법), Number format exception 이 발생하면 default 0으로 number를 초기화 한다.
    var number:Int = try {
        "AAA".toInt()
    } catch (e:java.lang.NumberFormatException) {
        0
    }

    // try-with-resource, 코틀린은 use block 을 사용한다. use block 을 사용하면 해당 블럭이 종료되면 AutoCloseable의 close를 호출한다.

    var fileName:String = "~/test.text"
    var contents:String = "Hello Kotlin.."

    File(fileName).outputStream().use {
        it.write(contents.toByteArray())
    }

    try {
        File(fileName).inputStream().use {
            println(String(it.readBytes()))
        }
    } catch (e:FileNotFoundException) {
        println("File not found...")
    }

 

함수

  // Void 함수, Unit을 반환한다. (생략해도 됨)
  fun voidFunction(arg: String): Unit {
      println("Unit을 반환하면 Java의 Void 를 사용 하는 것과 같음")
  }

  // 반환 값이 있는 함수
  fun functionName(arg1: String, arg2: Int): String {
      sum(5)
      return "arg1과 arg2 더하기 ${arg1} : ${arg2}"
  }

  // Default Argument, default 값을 선언하면 호출할때 두번째 인자를 전달하지 않아도 1을 가본값으로 사용한다.
  fun sum(a: Int, b: Int = 1): Int {
      return a + b
  }

  fun test() {
      println("값이 머가 나올까요? ${sum(5)}") //  값이 머가 나올까요? 6
  }

  // 간단한 함수 선언
  fun multiple(a: Int, b: Int) = a * b

  fun test1() {
      println("간단함수 테스트 : ${multiple(3, 4)}") // 간단함수 테스트 : 12
  }


  // 가변 인자 (Java 의 ...)
  fun sum(vararg values: Int): Int {
      return values.sum()
  }

  fun test2() {
      println("가변인자 테스트 : ${sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)}") //가변인자 테스트 : 55
  }

  // 내부 함수, 함수 안에 함수를 정의할수 있음
  fun outer(a: String): String {
      fun inner1(b: String): String {
          fun inner2(c: String): String {
              return "(${c} Inner1)"
          }
          return "{${inner2(b)} Inner2}"
      }
      return "[${inner1(a)} outer]"
  }

  fun test3(){
      println("내부함수 테스트 : ${outer("JSMARCH")}") // [{(JSMARCH Inner1) Inner2} outer]
  }