싱글톤(Singleton)이란 개체를 처음 사용하는 타이밍에 생성하고 이후로 생성된 개체를 재활용하는 패턴을 말합니다.여기서 중요한 건 ' 처음 사용하는 타이밍에 초기화'입니다. 대부분의 언어가 '싱글톤'하면 구현 원리는 비슷합니다.1) 비어있는 정적 인스턴스를 선언해 두고2) 사용하는 타이밍에 인스턴스를 생성하고 나서3) 다음 사용부터는 생성된 인스턴스를 리턴합니다. 이 포스팅은 이 싱글톤 구현을 C#에 맞게 구현한 포스팅입니다. 1. 일반적인 구현 일반적인 싱글톤 구현을 C#으로 구현하면 아래와 같습니다.(소스 코드 : dang-gun/DotNetSamples/SingletonTest/Singletons/Gamma95.cs )/// /// 《디자인 패턴》[Gamma95]에서 제시된 싱글톤을 C#에 ..
예전버전용 'OpenCvSharp' 캡쳐는 포스팅한적이 있습니다. (참고 : [C#.NET, OpenCVSharp] 웹캠(Web Cam) 이미지 사용하기 ) 'OpenCvSharp4'용 포스팅을 다시 합니다. 0. 필수 구성요소 설치 누겟에서 다음 패키지를 설치합니다. - OpenCvSharp4 - OpenCvSharp4.Extensions 사용하려는 운영체제나 플랫폼에 따라 ' OpenCvSharp4.runtime.[대상] ' 패키지를 설치합니다. 예> 윈도우 : OpenCvSharp4.runtime.win UWP : OpenCvSharp4.runtime.uwp 우분투 : OpenCvSharp4.runtime.ubuntu.18.04-x64 사용하려는 프래임웤에 따라 추가로 확장이 필요 할 수 있습니다...
로거의 특성상 자신에게 편한 설정이 끝나면 어떤 프로젝트든 거의 손대지 않고 그대로 갔다 쓰기 마련입니다. 매번 이런 코드를 복사 & 붙여 넣기 한다는 건 너무 번거로운 일이므로 유틸리티 클래스를 만들어서 관리하면 편합니다. 이 포스팅에서는 'NReco.Logging.File'를 이용하여 파일 출력을 하고 있습니다. 연관글 영역 1. 개요 이 유틸은 범용이라기보다는 프로젝트 전용 유틸입니다. 단지 특수한 경우가 아니라면 설정의 거의 동일할 것이라는 가정이라 이 클래스만 복사하여 프로젝트에 세팅하면 됩니다. (복사용 원본 : github - dang-gun/DotNetSamples/LoggingNReco_DotNetLogging/DotNetLogging_Copy.cs ) 기본 로거를 위한 유틸을 만들려면 ..
윈폼(WinForm)은 종속성 구현이 안 돼 있으므로 굳이 일부로 구현해 가며 로거를 쓰는 것은 너무 번거롭습니다. 그래서 이 포스팅은 종속성 없이 사용하는 방법을 다룹니다. 자세한 설정방법은 이전 포스팅을 확인해 주세요 연관글 영역 0. 라이브러리 설치 이 플랫폼에는 기본 로거가 설치되어있지 않으므로 누겟에서 찾아서 설치해 줍니다. Microsoft.Extensions.Hosting 1. 로거팩토리(LoggerFactory) 생성 간단하게 로거팩토리(LoggerFactory)를 생성하여 사용하는 것이 좋습니다. 전역에서 접근할 수 있도록 스태틱(static)으로 선언한 로거팩토리(LoggerFactory)변수를 만들어 줍니다. /// /// 로거 팩토리 /// public static ILoggerFa..
클래스 라이브러리를 만들어 'Microsoft.AspNetCore.Mvc'에 있는 'ControllerBase'를 사용하려면 누겟(NuGet)에서 'Microsoft.AspNetCore.Mvc'를 받으면 됩니다. 그래서 누겟을 봤더니..... 1. 'Microsoft.AspNetCore.Mvc'는 빠졌다! 하도 옛날에 만들어 놓고 복붙만 해서 쓰던 프로젝트라 '사용되지 않음'상태가 되어 있었는지 이제 알았네요. 2. 'Microsoft.AspNetCore.Mvc'는 어디 갔는가? 정확하게는 누겟에서만 빠지는 거고 SDK에는 들어 있기 때문에 쓰는 데 지장은 없습니다. 2-1. 프로젝트의 기준 SDK를 변경하여 해결하는 방법 프로젝트가 자체를 ASP.NET Core로 바꿔도 되는 경우라면 프로젝트 파일(*..
전 포스팅에서 .NET기본 로거를 사용하는 방법을 알아봤습니다. 로거를 파일로 출력하려면 외부 라이브러리를 사용해야 합니다. 이 포스팅에서는 'NReco.Logging.File'를 이용하여 로그를 파일로 출력합니다. 연관글 영역 1. 라이브러리 설치 .NET에서 로그를 파일로 내보내는 기능은 외부 라이브러리를 쓰라고 되어 있습니다. (더 이상 기본기능으로 제공하지 않음) 이 포스팅에서는 'NReco.Logging.File'를 사용합니다. 2. 파일 출력 설정 파일 출력을 위해 파일명을 지정하고 로거빌더(LoggingBuilder)에서 출력 형식을 지정해 줍니다. 2-1. 'StartUp.cs'를 사용하지 않는 경우 서비스에서 'AddLogging'을 이용하여 외부 빌더를 설정해 줍니다. builder.S..
.NET에서 'out'이나 'ref' 한정자를 쓰는데 다음과 같은 에러가 났습니다. A property or indexer may not be passed as an out or ref parameter 참조를 반환하지 않는 속성 또는 인덱서는 out 또는 ref 값으로 사용할 수 없음 1. 원인 MS가 제공하는 오류코드만 보고도 확인할 수 있는 오류입니다. 참고 : MS Learn - 컴파일러 오류 CS0206 겟터/셋터(getter/setter) 접근자를 이용하여 속성을 만들고 이것을 'out'이나 'ref' 한정자로 전달하려고 하면 발생하는 오류입니다. 아직도 종종 하는 실수인데..... .NET은 겟터/셋터(getter/setter) 접근자를 편하게 처리하기 위해 변수명을 그대로 사용할 수 있게 ..
모델에 FK(foreign key)를 연결하려고 상호 참조를 했더니 다음과 같은 에러가 납니다. Exception: Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property '[모델명]' with type '[네임스페이스]'. Path '[에러나 개체]'. at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer, Object value, JsonProperty property, JsonContract contract, JsonContainerContract container..
'JsonIgnore'속성은 JSON으로 출력할 때 무시하게 해주는 속성입니다. 해당 속성으로 지정되어 있으면 JSON으로 출력할 때 해당 필드가 없어야 합니다. 그런데 이 속성이 제대로 적용이 될 때가 있고 안될 때가 있는 겁니다...????? 1. 원인을 찾아서~ 원인은 의외로 간단한데...... 'JsonIgnore'은 두 군데에 선언이 되어 있습니다. System.Text.Json.Serialization Newtonsoft.Json 만약 자신이 'System.Text.Json.Serialization'를 사용 중인데 'Newtonsoft.Json.JsonIgnore'를 사용한다거나 반대로 ''Newtonsoft.Json'을 사용 중인데 'System.Text.Json.Serialization'를..
.NET 4.x에서 'SocketAsyncEventArgs'를 쓰다가 그대로 .NET 5로 업그레이드하면 'Completed'이벤트가 오지 않는 현상이 있습니다.(참고 : github - DGSocketAssist/DGSocketAssist1/) 아래 스크린 샷은 .NET 4에서 만든 'SocketAsyncEventArgs'를 .NET 5에서 사용한 경우입니다.'SaeaSend_Completed'이벤트가 오지 않은 걸 확인할 수 있습니다. 아래 스크린 샷은 .NET 4에서 정상 작동한 경우입니다. 이것은 .NET 5부터 'ReceiveAsync', 'SendAsync'가 동기로 동작하기 때문입니다.이 포스팅은 'ReceiveAsync'을 기준으로 설명합니다.('SendAsync'도 똑같기 때문) 연관글..