Kotlin(9)
-
Pigeon을 사용해서 여러개의 인터페이스를 생성할 때 발생할 수 있는 에러 정리
2024.06.21 - [Programming/Flutter] - Pigeon을 사용하여 Type-safety한 네이티브 코드 작성하기에서 Pigeon을 사용해 코드를 Type-safety한 네이티브 코드를 작성하는 방법에 대해 살펴봤다. 하지만 네이티브 코드가 많아져서 두 개의 플랫폼 코드를 작성한다고 가정하자. 이런 경우 Pigeon을 사용해서 두 개의 인터페이스를 생성하면, 위와같이 FlutterError 클래스를 재선언했다는 에러가 발생하게된다. 이런 경우에는 @ConfigurePigeon 어노테이션의 kotlinOptions에서, errorClassName을 별도로 지정해주면 간단하게 해결할 수 있다. 아래와 같이 KotlinOptions의 인자값에 errorClassName으로 문자열을 넘겨..
2024.06.24 -
Pigeon을 사용하여 Type-safety한 네이티브 코드 작성하기
가끔씩 Flutter를 사용해서 앱을 작성할 때, 성능이 필요한 부분은 네이티브 코드로 작성해야 할 일이 있습니다. 이 내용에 대해서는 Flutter 공식 문서의 Writing custom platform-specific code에서 찾아볼 수 있는데요. 예전에는 MethodChannel을 사용해서 네이티브서 호출할 메서드를 문자열 형태로 넘겨주고, 인자값이 필요할 때는 dynamic 타입으로 정의되어있는 arguments에 필요한 값을 넘겨줬습니다. 플랫폼에서 작성한 네이티브 코드 역시 문자열을 통해 실행할 함수를 결정하고, Any타입(안드로이드 기준)으로 전달된 값들을 형변환하여 작성해야했죠. 이 방법에는 몇가지 문제가 있습니다. 채널명을 정하고 MethodChannel을 설정해야하며, MethodC..
2024.06.21 -
Fatal Exception: java.util.ConcurrentModificationException에 대한 간단 정리
비정상 종료를 줄이기 위해서 앱에 파이어베이스를 추가하고나서, 간간히 java.util.ConcurrentModificationException 예외가 발생한 것을 볼 수 있었다. 이름에 Concurrent가 들어가있는만큼, 비동기 문제겠거니...하고 추측하고 있었는데 아무리봐도 해당 코드는 메인 스레드에서 리스트 내용을 업데이트하는 코드가 아닌가. 동시성 문제가 발생할만한 상황이 아닌데 어째서 이런 예외가 발생하는거지... 하는 의문에 빠져서 java.util.ConcurrentModificationException에 대해 찾아봤다. ConcurrentModificationException을 구글에 검색하면 수많은 블로그가 나온다. 다들 숱하게 경험한 문제란 얘기인 셈. 누군가 잘 정리해놓은 자료를 보..
2024.02.16 -
[Flutter] Flutter에서 SharedPreferences에 저장한 값을, Android 네이티브 영역에서 참조해보자.
여기서는 Flutter 패키지 중 SharedPreferences를 지원하는 shared_preferences 패키지를 사용합니다. 다른 패키지를 사용하는 경우, 이 글의 내용은 별 다른 쓸모가 없을 가능성이 높습니다. Flutter에서의 Shared Preferences 요구사항을 구현하다보면 값을 저장해야되는 경우가 생깁니다. 복잡한 데이터라면 데이터베이스를 사용하는 방법이 좋겠지만, 간단한 플래그나 설정값 등을 저장하기 위해서 데이터베이스를 사용하긴 아무래도 부담되기 마련입니다. 이럴 때 우리는 Shared Preferences를 사용하곤 합니다. Flutter에서도 이런 요구사항은 당연히 필요하기 마련인지, shared_preferences 패키지가 제공됩니다. 이번 글에서는 shared_pref..
2021.10.28 -
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