Kotlin을 시작해보자. (예외처리, 함수)
Kotlin2020. 8. 29. 02:03
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]
}