본문 바로가기
반응형

Programming/C# & .NET25

[.NET] appsettings.json 추가하기 appsettings.json 추가하기 IDE : Visual Stuio 2022.NET Version : .NET 8Project : Console Projectgithub : anonyDevMan/Kor-IT-ConsoleProject: Kor-IT Console Project (github.com)  1. "Microsoft.Extensions.Configuration.Json" Nuget Install  2. appsettings.json 추가 3. "출력 디렉토리 복사" 속성 변경appsettings.json 파일의 "출력 디렉토리 복사" 속성 값을 "항상 복사"로 변경한다. 해당 속성값을 변경하지 않으면 Debug 또는 Release 폴더에 복사가 되지 않아 오류가 발생한다.  4. Code .. 2024. 5. 30.
[C#] Distinct(), DistinctBy() 중복제거 Distinct() 정의 namespace : Systme.Linq assembly : Systme.Linq.dll 시퀀스의 고유 요소를 반환한다. Overloads Distinct(IEnumerable, IEqualityComparer) 지정된 IEqualityComparer로 값을 비교(필터)하여 시퀀스에서 고유 요소를 반환된다. Distinct(IEnumerable) 기본 '같음' 비교자로 값을 비교하여 시퀀스에서 고유 요소를 반환한다. ❗비교값 반환 시 첫 번째 값이 반환된다. ⭐지연실행 Distinct(IEnumerable, IEqualityComparer) 지정된 IEqualityComparer로 값을 비교(필터)하여 시퀀스에서 교유 요소를 반환한다. public static System.Co.. 2024. 1. 10.
[C#] Linq - Aggregate 메서드 Aggregate namespace : Systme.Linq Assembly : System.Linq.dll Aggregate는 정확히는 Enumerable.Aggregate 이다. 반복적으로 일어나는 행위에 대해서 처리되는 메서드 이다. Overloads Method Description Aggregate(Ienumerable, Func) 시퀀스에 누적 함수를 적용한다. Aggregate(IEnuerable, TAccumulate, Func) 시퀀스에 누적시 삼수를 적용한다. 지정된 시드 값은 초기 누적기 값으롤 사용된다. Aggregate(IEnumerable, TAccumulate, Func, Func) 시퀀스에 누적기 함수를 적용한다. 지정된 시드 값은 초기 누적기 값으로 사용된다. 지정된 함수는.. 2023. 6. 27.
[C#] LINQ 란? - 소개 (Language-Integrated Query) LINQ 소개 LINQ(Language Integrated Query) 는 '링크' 또는 '링큐' 로 읽으며 네이티브 질의 기능을 닷넷 언어에 추가하는 마이크로소프트 닷넷 프레임워크 구성 요소이며 2007년 닷넷 프레임워크 3.5 (C# 3.0)에 중요 부분으로 처음 출시 되었다. LINQ는 SQL 문과 비슷하게 질의식의 추가를 통해 언어를 확장하며 배열, 열거식, 클래스, XML Document, 관계형 데이터 베이스, ADO.NET 등 서드파티 소스로부터 데이터를 편리하게 추출하고 가공하기 위해 사용할 수 있다. LINQ의 포팅판으로는 PHP(PHPHLinq), 자바스크립트(linq.js), 타입스크립트(linq.ts), 액션스크립트(ActionLinq)용으로 존재 하지만 이 중 어느 것도 닷넷 파생.. 2023. 2. 18.
[C#] XmlElement 여러개 설정 해당 글은 XmlElement 여러 개 설정하는 상황과 방법에 대해 알 수 있다. 최근 비슷한 Xml 형식에 List 받는 부분만 달라지는 경우가 발생하여 해당 상황을 어떻게 하면 좀 더 편리하게 관리할 수 있을지 고민하다가 활용한 방법이다. XmlElement는 Xml의 요소를 나타낸다. XmlElement의 속성들 중 ElementName, Type을 이용하여 다양한 객체를 하나의 속성으로 받아 사용하기 위해 해당 설정을 하여 해결이 가능했다. 해당 방법은 아래 사용방법과 예시를 통해 좀 더 자세히 설명하겠다. 사용방법 Data1 2 potato 23400 thin Large pepperoni 11400 thin small Data2 2 pasta1 11000 2 pasta2 23400 1 Data1.. 2023. 1. 11.
[C#] XMl 직렬화, 역직렬화 Method 공유 XML 직렬화, 역직렬화하는 Method를 만들어 공유하고자 해당 글을 작성한다. 기본적으로 직렬화, 역직렬화 개념을 안다는 가정으로 진행하며 해당 함수를 가지고 다양하게 커스텀해서 사용하길 바란다. Xml Class public class Xml { public Xml() { } public T Deserialize(string data) { XmlSerializer xs = new XmlSerializer(typeof(T)); using (StringReader sr = new StringReader(data)) { return (T)xs.Deserialize(sr); } } public string Serialize(Object obj) { XmlSerializer xs = new XmlSerial.. 2023. 1. 6.
[C#] XML 직렬화, 역직렬화 (Serialize, Deserialize) 해당 글에서는 XML 직렬화, 역직렬화하는 방법을 알 수 있다. 간단하게 직렬화와 역직렬화를 설명하겠다. 직렬화는 객체를 바이너리 형식으로 변환하는거며 역직렬화는 바이너리를 객체로 변환하는 거다. 직렬화와 역직렬화는 결국 반대의 일을 해주는 것이다. 데이터를 주고받는 형식으로 JSON 외 XML이 주로 사용되고 있으니 알아두면 유용하게 사용할 수 있다. XmlSerializer 네임스페이스 : System.Xml.Serialization 어셈블리 : System.Xml.XmlSerializer.dll XMl 형식으로 객체를 직렬화하고, 역직렬화 하는데 사용하는 클래스이다. XmlSerializer 클래스 (System.Xml.Serialization) XML 문서로 개체를 직렬화하고 XML 문서에서 개체.. 2023. 1. 6.
[C#] switch 식 소개 switch 식은 C# 버전 8.0에서 나온 기능이다. 보통 switch case 문 조건으로 처리를 하는데 switch 식을 이용함으로써 좀 더 간결하고 명시적으로 사용 가능해졌다. 개인적으로 switch 식을 알고 있기 전과 이후로 많은 코딩 변화가 일어났다. 사용방법 switch case 문 public string GetColorName(int colorNum) { string colorName = string.Empty; switch(colorNum) { case 0: colorName = "red"; break; case 1: colorName = "blue"; break; case 2: colorName = "green"; break; case 3: colorName = "yellow".. 2022. 12. 2.
[C#] 확장메서드 (Extension Method) 소개 확장 메서드(Extension Method)는 C# 3.0부터 지원하는 static 메서드이다. 확장 메서드는 클래스, 구조체, 인터페이스 등에 적용될 수 있다. 확장 메서드를 사용하면 클래스를 직접 변경하지 않고도 클래스 외부에서 정의함으로써 기능을 확장한 효과를 얻는다. 확장 메서드는 static class 안에 static method로 정의한다. 첫 번째 매개변수는 확장 메서드가 사용될 타입을 지정하며 매개변수 앞에 this 키워드를 사용한다. 그다음 매개변수들을 정의하여 메서드 사용 시 받는 매개변수를 정의한다. 예제 Country enum 정의 public enum Country { KOR, USA, GBR, UKR, NOR, RUS } Extensions 클래스에 Name 확장 메서드 .. 2022. 10. 28.
[C#] List 정렬 총정리(기본정렬, 여러개 정렬) List를 정렬하는 방법을 총정리한다. 해당 정리로 다양한 정렬을 할 수 있고 예시를 통해 쉽고 빠르게 이해하도록 하자. 정렬은 기본적으로 Enumerable 클래스의 메서드를 사용한다. Linq 패턴을 따른다. 해당 정리는 .NET6 기준으로 정리했다. class User { public int idx { get; set; } public string name { get; set; } public int age { get; set; } } User 클래스를 가지고 List 를 생성하여 진행할 것이다. public static void Main(string[] args) { List users = new List() { new User() { idx = 1, name = "김씨", age = 30 }, .. 2022. 10. 18.
[C#] JsonConvert null 해결방법 JSON 데이터를 직렬화/역직렬화할때 null로 인한 오류가 발생하는 경우가 있다. 이런 경우 해결법이 몇 가지 있는데 간단하게 확인해보자. { "id":0, "name":null, "nickName":null, "createTime":null, "claimTime":null } 위와 같은 데이터를 받는다고 가정하자. 'id' 필드를 제외한 나머지 값들은 모두 null 인 상태이다. class User { public int id { get; set; } public string name { get; set; } public string nickName { get; set; } public DateTime createTime { get; set; } public DateTime claimTime { ge.. 2022. 10. 13.
[C#] Json 직렬화/역직렬화 속성 제외하는 방법 Class 속성 중 Json 직렬화/역직렬화시 속성 제외하는 방법을 알 수 있다. 기본적으로 직렬화/역직렬화 하면 모든 public 속성을 직렬화/역직렬화 한다. 그중 일부 속성을 사용하지 않도록 하는 방법이 있다. Newtonsoft.Json의 속성을 사용하거나 System.Text.Json을 사용하는 방법이 있다. 공통적으로는 [JsonIgnore]를 사용한다. 방법 1. Newtonsoft.Json 이미지 기준 직렬화 제외할 속성에 [JsonIgnore] 사용하면 제외된다. 해당 이미지의 코드를 아래 같이 표기해두겠다. Newtonsoft.Json 공홈 public class Account { public string FullName { get; set; } public string EmailAdd.. 2022. 9. 14.
[C#] lock 문 사용법 소개 lock 문은 지정된 개체에 대한 상호 배제 잠금을 획득하여 명령문 블록을 실행한 다음, 잠금을 해제한다. 잠금이 유지되는 동안 잠금을 보유하는 스레드(Thread)는 잠금을 다시 획득하고 해제할 수 있다. 쉽게 말해 다른 하나의 스레드가 잠금을 획득하면 다른 스레드는 기다리고 있다 잠금이 해제될 때까지 기다리고 잠금이 풀렸을 경우 또 다른 하나의 스레드가 잠금을 얻는 거다. lock 문이 필요한 경우는 멀티스레드(Multi-Thread)인 경우 동일한 필드에 액세스 하여 잘못된 결과를 도출을 막기 위하여 사용된다. 이런 경우를 Thread-Unsafe 하다고 한다. 사용법 사용법은 아주 간단하다. lock 호출하여 브레이스로 감싸면 된다. lock(x) { // code.. } 여기서 x는 참조 .. 2022. 8. 3.
[C#] 멀티스레드 (Multi-Thread) 멀티스레드(Multi-Thread) or 다중 스레드는 한 번에 여러 개의 스레드를 사용하는 방식이며 CPU의 성능을 활용하는 프로그래밍 기법이다. 한 번에 여러 개의 작업 or 명령을 실행할 수 있다. 기본적으로 프로세스(process) 실행시 메인 스레드(Thread)가 실행되는데 바로 이것을 메인 스레드(Main Thread)라고 한다. 멀티스레드가 사용되는 경우는 통신, 파일 로딩, DB 등 한번에 여러 개의 작업이 필요시 사용된다. 기본적인 스레드(Thread) 사용 방법은 이전 포스팅을 해놨기 때문에 사용법을 모르는 분들은 이전 포스팅을 보고 오길 바라며 해당 링크를 남겨두겠다. [2022.07.28 - [Programming/C#] - [C#] 스레드(Thread)] 메서드 3개를 서로 다른.. 2022. 8. 2.
[C#] 스레드(Thread) 스레드(Thread) 란? 스레드(Thread)는 하나의 프로세스 내에서 독립적으로 실행되는 실행 단위이다. 멀티 스레드(Multi Thread)는 뜻 그대로 여러 개의 스레드를 실행한다는 뜻이다. 여러 개의 스레드를 사용함으로써 병렬 처리가 가능해져 더욱 빠른 기대효과를 볼 수 있다. 멀티 스레드(Multi Thread) 는 한 번에 여러 스레드(Thread)를 실행하는 것이다. CPU 성능을 활용하여 한번에 많은 처리를 할 수 있다. 생성 및 호출방법 네임스페이스 : System.Threading 어셈블리 : System.Threading.Thread.dll 오버로드 생성자 설명 Thread(ParameterizedThreadStart) 스레드가 시작될 때 개체가 스레드로 전달될 수 있도록 하는 대리.. 2022. 7. 28.
[C#] Sequence contains no elements 오류 해결 Sequence contains no elements Sequence contains no elements C# LINQ 사용시 'Sequence contains no elements' 라는 오류가 발생하면 일반적으로 First() or Single() 명령을 사용해서 발생한다. First() or Single() 을 호출시 결과값이 없다면 'Sequence contains no elements' 오류가 발생한다. 그 이유는 아래의 이미지를 보면 알 수 있다. 해당 오류를 해결하는 방법은 아주 간단하다. FirstOrDefault() 로 변경하면 해결 가능하다. 2022. 7. 5.
[C#] JSON 을 Class 로 자동 생성 (JSON to Class Generator) 만약, 당신이 JSON을 구조를 Class로 정의하기 위해 Property 속성을 50개 넘게 정의해야 한다면 어떻겠는가? Class를 만들다 시간을 다 보내게 되고 업무의 시간이 늘어나 불편함이 늘어날 것이다. 이를 해결하기 위해 JSON string을 Class 구조로 자동 생성하는 방법을 알 수 있다. 방법 1. Visual Studio 만약, 사용자가 Visual Studio를 사용한다면 간단하게 해결 가능하다. 글쓴이는 현재 Microsoft Visual Studio 2022 버전을 사용하고 있어 해당 버전으로 알려주겠다. 버전에 따라 크게 다른 부분은 없겠지만 구버전인 경우 해당 기능이 없을 수도 있으니 참고 바란다. 위치 : 편집 > 선택하여 붙여 넣기 JSON을 클래스토 붙여 넣기 XML을.. 2022. 7. 1.
[C#] JSON, JArray 직렬화, 역직렬화 간단 방법 (Newtonsoft.Json) 소개 및 의미 API 통신을 하다 보면 대부분 JSON 형식으로 많이 주고받는다. JSON을 C#에서 직렬화, 역직렬화 하여 사용하는 경우가 많은데 글쓴이는 'Newtonsoft.Json'을 이용해서 잘 사용하고 있다. 해당 글을 통해 쉽게 직렬화, 역직렬화 하는 방법을 알았으면 바란다. 직렬화? 역직렬화? 직렬화는 객체를 전송 가능한 형태로 만든다는 의미이다. 여기서는 JSON 을 직렬화한다는 표현은 JSON 형태로 만든다는 의미이다. 반대의 의미인 역직렬화는 직렬화된 형태를 다시 객체의 형태로 만드는 것이다. 직렬화는 Serializtion 이라 부르고 역직렬화는 Deserialization이라고 부른다. 직렬화, 역직렬화 해당글에서의 기본 베이스는 'Newtonsoft.Json'을 기본으로 하기 때.. 2022. 6. 30.
[C#] 두 날짜 차이 계산 방법 두 날짜 차이 계산 방법 두 날짜(DateTime) 의 차이를 계사하는 여러가지 방법을 알아보자. DateTime date1 = new DateTime(2022, 1, 1, 20, 00, 00); DateTime date2 = new DateTime(2022, 02, 01, 23, 00, 00); ' - ' 연산자를 통한 두 날짜 차이 계산 간단하게 '-' 연산자를 통하여 두 날짜 차이를 알 수 있다. Console.WriteLine((date2 - date1)); Console.WriteLine((date2 - date1).Days); 출력 31.03:00:00 31 가장 간단하게 할 수 있는 방법이다. 동일한 DateTime 형식으로 진행하면 된다. DateTime.Subtract 두 날짜 차이 계산.. 2022. 6. 23.
[C#] DirectoryInfo 클래스 (디렉터리 복사, 이동, 이름 바꾸기, 만들기 및 삭제) DiretoryInfo 클래스는 디렉터리에 관련된 클래스이다. 지정된 디렉터리에 대해서 접근하여 목록을 얻거나 생선, 이동 등 관련된 기능을 담고있다. 네임스페이스 : System.IO FrameWork : .Net Core 5 IDE : Visual Studio 2019 OS : Windows 10 파일 목록리스트 얻는 방법 DirectoryInfo 클래스를 이용하여 지정된 경로에 대한 파일 목록 얻는 방법을 알 수 있다. DirectoryInfo directoryInfo = new DirectoryInfo(”지정경로”) 를 통해 디렉토리 정보를 가져올 수 있다. using System.IO.DirectoryInfo DirectoryInfo directoryInfo = new DirectoryInfo(.. 2022. 6. 7.
[C#] The format of value 'application/json;charset=UTF-8' is invalid 최근 HttpClinet 로 수정중 해당 오류가 발생하게 되어 겪은 내용을 공유하고자 한다. 해당 문제는 생각보다? 쉬운 문제였다. HttpClient의 'Contet-Type' 설정에서 'charset=UTF-8' 을 지원하지 않는다는 것이다. Before > application/json;charset=UTF-8 After > application/json 개인적인 생각으로 Bug 일 것같은 생각이 들지만 현재 상황에서는 위에 처럼 수정해서 사용해야 할 것 같다. 대략적으로 HttpClient 짠 코드를 같이 첨부해두겠다. HttpRequestMessage 를 가지고 진행했으며 성공한 코드를 올려두었기때문에 만약, 참고해서 안된다면 댓글로 남겨주시면 도움을 드리겠습니다. HttpClient httpC.. 2022. 5. 31.
반응형