개발 10

[dart] 밑줄(_) 변수를 생성자에서 파라미터로 받아서 초기화하는 법

Dart에는 public, protected & private같은 키워드가 존재하지 않는다. 대신 식별자가 밑줄로 시작하면 라이브러리 전용 식별자가 된다. 사실 이 부분에 대해서 쓸려고 한 것은 아니기 때문에 해당 부분은 https://dart.dev/language/libraries 에서 확인하면 될 것 같다. 문제는 해당 방법을 사용한 식별자를 생성자에서 파라미터로 받아서 초기화 하려고 할 때 마주할 수 있다. 우선 아래의 샘플코드를 보자. class Sample { final int _number; Sample(this._number); } 이렇게 사용할 경우 아무런 문제가 되지 않는다. 다만 class Sample { final int? _number; Sample({this._number}); ..

개발/dart&flutter 2024.03.08

git username & email 설정

git config --local user.name "userName" git config --local user.email "emailAddress" 깃 허브 계정을 여러개 쓰거나 여러개 프로젝트를 할 때 커밋에 표기되는 이름과 이메일표기가 원하는 것과 다르게 나올 떄가 있다. 예를 들면 재택근무를 할때 재택환경 pc에서 회사 계정으로 커밋을 남길때. 집에서 개인 프로젝트를 할 때 아무 생각없이 사용하게 되면 git global 설정의 값이 들어가 버리기 때문에 회사 커밋에 개인계정이 혹은 개인 프로젝트에 회서 계정이 들어가는 경우가 있다. 물론 큰 문제가 되지는 않지만 은근히 거슬리는 부분이다. git config의 경우 global과 local로 나뉘어져 있고 기본적으로 아무런 설정을 하지 않았다면..

[dart/flutter]flutter failed to load dynamic library 'sqlite3.dll': error code 126

윈도우즈 환경에서 drift library를 통해 sqlite3를 사용하여 테스트를 진행하려고 하는 도중 해당 에러를 마주했다. flutter failed to load dynamic library 'sqlite3.dll': error code 126 약간 당황했다. 분명 pub에서 sqlite3_flutter_libs뿐만아니라 sqlite3까지 추가를 했는데, 왜 못찾는것일까 심지어 mac os x에서는 돌아가는 걸 1차적으로 확인했었던 부분이였다. 좀 더 확인해보니 https://pub.dev/packages/sqflite_common_ffi#windows 문서에 해답이 있었다. 윈도우즈의 경우 sqlite.dll 파일을 다운받아서 폴더 루트에 넣어줘야 한다고 한다. 위의 링크를 통해 들어가면 위와 ..

개발/dart&flutter 2024.02.17

C# JsonConverter 사용

newtonsoft.json을 사용하다보면 class를 직렬화, 역직렬화할때 형태를 변형하거나 추가 작업을 실행해줘야 하는 경우가 있다. 이를 모든 코드에서 진행해야할 경우 유지보수시 실수가 나기 딱 좋은 부분이다. 이런 부분에 대해서는 JsonConveter를 사용하여 처리하는 것이 좋다. 예제를 만들기 위해 불필요한 변형을 해보자 class내의 int형 멤버 변수가 존재하는데 이를 string으로 변형하여 json을 만들어보자 [JsonConverter(typeof(JSonTestConverter))] public class JsonTest { public int a; public override string ToString() { return $"a = {a}"; } } public class JS..

개발/C#&unity 2024.02.17

Newtonsoft.Json 사용시 생성자에서 리스트를 초기화할때 중복으로 들어가는 문제

개인적으로 Newtonsoft.Json은 C#을 사용할 때 거의 항상 사용하게되는 라이브러리다. 이번에 class의 생성자에서 list를 생성하고 초기값을 집어넣는 코드를 넣었는데, json을 Deserialize 할 때, 생성자에서 넣어둔 값이 중복으로 들어가는 문제가 발생했다. 정확히는 생성자에서 넣어둔 초기값이 먼저 들어가고 json Deserialize한 값들이 추가로 들어가는 것을 확인했다. 처음에는 이를 처리하기 위해 아래처럼 우회했다. public class TestClass { public TestClass(bool isInit = false) { // 블라블라 } } 위와 같이 생성자의 파라미터에 초기값을 선언해주고 사용하게 될경우 Deserialize할 때 생성자가 호출되지 않는것을 확..

개발/C#&unity 2024.02.17

[UWP] 이미 떠있는 ContentDialog 체크 방법

UWP에서 사용할 수 있는 팝업형식의 컨트롤은 두가지 정도입니다. Flyout과 ContentDialog. 물론 이 포스팅에서 두 컨트롤러에 대해 다룰 것은 아닙니다. 두 컨트롤에 대한 보다 자세한 내용은 사실 마이크로소프트 페이지에 존재합니다. https://docs.microsoft.com/ko-kr/windows/uwp/controls-and-patterns/dialogs UWP앱에서는 ContentDialog를 동시에 하나만 띄울 수 있습니다. 따라서 다른 ContentDIalog가 떠있는 상황에서 다시 ContentDialog를 띄우게 되면 exception이 발생하게되지요. 그래서 문득 궁굼해졌습니다. 이미 떠 있는 ContentDialog를 체크하는 방법은 없을까? 언제나와 같이 열심히 구글..

repl.it 온라인으로 코딩 컴파일 실행!! 공유까지 할 수 있는 사이트

오늘은 repl.it 이라는 사이트를 소개해볼까 합니다. repl.it은 온라인에서 코딩하고, 커파일하여 실행까지 해볼 수 있는 사이트입니다. 이렇게 코딩한 페이지를 다른사람에게 공유해 줄 수 도 있는 사이트 입니다. 간단한 코디의 경우 로그인 없이 비회원도 사용할 수 있기 때문에 간단히 사용하기에 부담이 없습니다. 말보다는 먼저 아래의 스샷을 확인해 볼까요? HelloWorld 를 쓸데없이 길게 써봤습니다.왼쪽 에디터에 코딩을 하고 실행을 하면 컴파일 후 실행하게 됩니다. 그리고 그 결과 값은 오른쪽에 나타나게 됩니다. 에디터에서는 위에서 볼 수 있 듯이 간단한 하이라이트가 지원되며, 간소한 자동완성 또한 지원합니다. 코딩에 필요한 최소한의 기능들은 지원한다고 볼 수 있습니다. ( vim 모드도 지원함..

개발/Tools 2017.08.29

[Android] NDK에서 java method를 호출할 때 type에 대한 정리

이 부분도 한동안 안쓰면 자주 잊어버리는 부분이라 정리해 둡니다. Signature Java Type Z boolean B byte C char S short I int J long F float D double L fully-qualified-class fully-qualified-class ex) Ljava/lang/String String [ type type[] ( arg-types ) ret-type method type sample codejava method static long normalMethod(String str, int[] intArray, boolean b); NDK (jni) JNIEXPORT void JNICALLJava_com_test_nativeMethod(JNIEnv *..

[Android] NDK(jni) 에서 Asset에 접근하는 방법

NDK를 쓰다보면 Asset에 접근해야 하는 경우가 심심치 않게 발생하는데, 일시적으로 만들어놓고 돌려쓰는 부분이다보니.. 잘 잊어먹게 되는 부분입니다.간단하게 정리를 해보도록 하겠습니다. Javapublic class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); readAssetsNative(getAssets()); } public native void readAssetsNative(AssetManager assetManager); static { System.loadLibrary("testNDK"); } } NDK#in..