전체 글 18

[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

[프로그래머스] L3 입국심사

문제 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 명만 심사를 할 수 있습니다. 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. 하지만 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가서 심사를 받을 수도 있습니다. 모든 사람이 심사를 받는데 걸리는 시간을 최소로 하고 싶습니다. 입국심사를 기다리는 사람 수 n, 각 심사관이 한 명을 심사하는데 걸리는 시간이 담긴 배열 times가 매개변수로 주어질 때, 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 return 하도록 solution 함수를 작성해주세요. 제한사항 입국심사를 기..

Builder Pattern - 빌더패턴

정의 해당 패턴은 생성자를 통해 직접 생성하지 않고, 빌더라는 내부 클래스를 통해 간접적으로 생성하는 패턴입니다. 그렇다면 왜 굳이 이렇게 해야하는가? 팩토리패턴과 무엇이 다른가 의문이 드는 부분이 있습니다. 빌더패턴은 객체를 생성할 때 생성자등에 다양한 파라미터가 들어가야하는 경우에 쓰여진다고 볼 수 있습니다. 코드 샌드위치 예제로 사용해보도록 하겠습니다. public class Sandwich { enum BreadType { Flat, Bun, Roll } public Sandwich(BreadType breadType) {...} public Sandwich(BreadType breadType, boolean meat) {...} public Sandwich(BreadType breadType, ..

Factory Method Pattern

정의 Factory method pattern은 interface나 abstract class로 정의된 오브젝트를 직접 생성하는 것이 아니라 이 생성을 subclass가 결정하여 하도록 하는 것입니다. 결론적으로 객체를 subclass가 만든다 입니다. 말로 설명하는 것 보단 코드를 보는게 더 이해가 쉽겠죠? 코드 도형을 생성하는 것을 예제로 코드를 구성해보려고 합니다. public interface Shape { void draw(); } interface로 Shape을 만들고 사용할 도형들을 아래와 같이 구현합니다. enum ShapeTypes { Ellipse, Rectangle, Polygon } public class Ellipse implements Shape { @Override public..

[프로그래머스] L2 위장

문제 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothes의..