Programming/Kotlin(5)
-
Kotlin에서 JSONObject .get*의 확장 함수를 만들어봤다. (reflection, generics, reified)
반복 구문의 발생 Java, Kotlin에서 JSONObject을 사용하여 JSON으로 작성된 데이터 구조를 파싱할 때, getInt, getString 등을 사용하는 경우가 많았다. 이 메서드는 문자열 키를 받아서 매칭되는 값을 반환하는데, 매칭되는 값이 없을 경우 Exception을 던지게 되어있다. Exception이 발생한 경우에는 null을 반환하도록 코드를 작성하면, 아래와 같다. try { JSONObject.getInt("key") } catch (JSONException e) { e.printStackTrace() null } try { JSONObject.getString("key") } catch (JSONException e) { e.printStackTrace() null }위에서..
2020.09.07 -
코틀린으로 배우는 함수형 프로그래밍 연습문제 #3 [푸는 중]
[연습문제 3-2] X의 n승을 구하는 함수를 재귀로 표현해보자. 함수의 선언 타입은 다음과 같다. fun power(x: Double, n:Int): Double fun power(x: Double, n:Int): Double { return when(n) { 1 -> x else -> power(x*x, n-1) } }[연습문제 3-3] 입력n의 팩터리얼인 n!을 구하는 함수를 재귀로 구현해보자. tailrec fun factorial(x: Int, result: Int = x): Int { return when(x) { 1 -> result else -> factorial(x-1, result*(x-1)) } }[연습문제 3-4] 10진수 숫자를 입력받아서 2진수 문자열로 변환하는 함수를 작성하라...
2020.01.19 -
Backing Field와 Backing Properties
필사를 하던 중에 잘 이해가 가지 않는 개념이 있어서 내용을 정리한다. 구글링을 해봤지만 잘 번역된 검색을 발견하지 못해서, 어설프나마 검색을 통해 이해한 내용을 취합하여 정리한 내용이다. Backing Field Kotlin의 Bakcing Field는 getter/setter에 기본적으로 생성되는 속성(property)이다. Kotlin에서는 Class내의 property에 값을 할당할때는 내부적으로 setter가, 값을 불러올때는 getter가 호출된다. 다음의 코드를 참조하도록 하자. class User{ var name: String get() = name set(value) {name = value} } 위의 코드에서 User.name에 “BlackBear”라는 값을 할당하게되면, User.n..
2019.02.12 -
Null Safety와 엘비스(Elvis) 오퍼레이터
Udacity에서 봤던 강의 중 Elvis Operator이 유용해보이는데, 적절한 사용방법을 찾아보려고 했다. 강의에서는 타입을 설명하는 과정에서 나온 내용이었는데, Kotlin Reference에는 Ohter의 Null Safety페이지에 위치해있다. 아래의 내용은 내가 이해하여 정리한 내용으로, 자세하고 정확한 내용은 Kotlin Reference > Ohter > Null Safety 페이지를 참조하도록 하자. Nullable 타입과 Non-Null 타입 Kotlin에는 Null을 가질 수 있는 타입과, Null을 가질 수 없는 타입이 존재한다. 예를 들어서 일반적인 경우 String은 null을 할당받을 수 없다. var a: String = "abc" a = null // compilation..
2019.02.05 -
When Expression
Udacity 강의를 보던 중, 내가 영어를 이렇게 못했나 싶을정도로 놓치는 내용이 많은 것 같아서, 내용과는 별개로 Kotlinlang.org의 내용을 정리하기로 했다. When Expression When은 C와같은 언어에서 Switch와 비슷한 동작을 수행한다. when (x) { 1 -> print("x == 1") //x가 1이면 x == 1을 출력한다. 2 -> print("x == 2") //x가 2이면 x == 2를 출력한다. 3, 4 -> print("x == 3 or x == 4") //x가 3 혹은 4이면, x == 3 or x == 4를 출력한다. in 5..10 -> print("x is in the range (5~10)") //x가 5~10 범위 내에 있을 때, x is in ..
2019.02.03