.NET/C#
[C#] 멀티태스킹(Multitasking) - 3. 공유 자원 접근
4. 공유 자원 접근 같은 시간에 여러 스레드를 실행시키는 경우 2개나 혹은 그 이상의 스레드가 같은 변수나 기타 다른 리소스에 접근을 시도하는 경우가 생길 수 있습니다. 이는 Application의 안정성에 문제를 일으킬 수 있으므로 스레드 안전한(thread-safe) 코드를 만들도록 해야 합니다. 우선 공유된 자원에 대한 접근을 동기화하는 데 사용될 수 있는 아래 2가지 타입을 알아볼 필요가 있습니다. Monitor : 여러 스레드가 같은 프로세스 안에서 공유된 자원에 접근할 수 있는지를 확인하는 데 사용되는 개체입니다. Interlocked : CPU 수준에서 단순한 수치를 조작하기 위한 개체입니다. (1) 다중 스레드로부터의 자원 접근 해당 사례를 구현하기 위해 우선 아래와 같이 공유할 변수를 ..
[C#] 멀티태스킹(Multitasking) - 2. 비동기(Asynchronously)
3. 비동기(Asynchronously) 실행 우선 어떻게 같은 시간에 동시적으로 여러 작업이 실행될 수 있는지를 알아보기 테스트 가능한 아래 3개의 메서드를 생성합니다. static void ThreadInfo() { Thread t = Thread.CurrentThread; Console.WriteLine($"스레드 Id: {t.ManagedThreadId}, 우선순위: {t.Priority}, 백그라운드: {t.IsBackground}, 태스크명: {t.Name ?? string.Empty}"); } static void MethodA() { Console.WriteLine("A실행시작"); OutputThreadInfo(); Thread.Sleep(5000); Console.WriteLine("A..
[C#] 멀티태스킹(Multitasking) - 1. 프로세스(process), 스레드(thread), 태스트(task) 그리고 성능모니터링
멀티태스킹은 같은 시간에 더 많은 성능 향상과 확장성 그리고 Application을 통한 사용자 생산성을 향상할 수 있는 방안을 제공해 줄 수 있습니다. 1. 프로세스(process), 스레드(thread) 그리고 태스트(task) 프로세스는 하나의 프로그램이 될 수 있습니다. 반드시 하나의 프로그램이 하나의 프로세스가 된다는 것은 아니지만(필요하다면 하나의 프로그램에서 여러 프로세스를 생성할 수 있으므로) 통상 OS 단에서는 메모리에 할당되어 현재 실행 중인 프로그램을 하나의 프로세스로 관리하고 있습니다. 스레드는 프로그램 안에서 코드를 실행하는 주체를 의미합니다. 기본적으로 하나의 프로세스는 하나의 스레드를 가지는데 이 말은 한 번에 하나씩의 코드만 실행할 수 있다는 얘기가 되므로 같은 시간에 여러 ..
[C#] LINQ(Language INtegrated Query) - 3. comprehension syntax과 thread를 통한 응답성 향상, XML 다루기
3. LINQ query comprehension syntax C# 3.0 때 마이크로소프트는 SQL과 같은 쿼리 구문을 LINQ 쿼리문으로 작성하는 방법을 토대로 개발자들이 더 익숙하게 LINQ구문을 작성하도록 하는 몇 가지 키워드를 소개했습니다. 예를 들어 다음과 같이 특정 Item을 필터링하는 메서드를 사용한 경우 using (Northwind db = new()) { var result = db.Products.Where(x => x.ProductId == 3).SingleOrDefault(); Console.WriteLine(result.ProductName); } query comprehension 구문을 통해 위와 같은 동작을 수행할 수 있습니다. using (Northwind db = ne..
[C#] LINQ(Language INtegrated Query) - 2. EF Core와 집계처리
2. EF Core와 LINQ '1. LINQ 표현식'에서는 LINQ를 통해 배열을 필터링하거나 정렬하는 예를 살펴보았습니다. 그리고 예제에서 사용된 소스는 List혹은 배열로서 단순한 형태의 데이터를 기반으로 하였습니다. 지금부터는 이 데이터 소스를 바꿔서 실제 DB의 Entity를 기반으로 다시 살펴보고자 합니다. (1) 모델 설정 이를 위해 EF Core model을 정의해야 하는데 여기서는 MS SQL Server와 Northwind DB를 통해 Model을 생성할 것입니다. 자세한 내용은 아래 글을 참고하시기 바랍니다. [C#] Entity Framework Core - 1. 시작/설정하기 [C#] Entity Framework Core - 1. 시작/설정하기 Entity Framework Co..
[C#] LINQ(Language INtegrated Query) - 1. 기본 표현식
LINQ(Language INtegrated Query)는 일련의 배열을 정렬하거나 필터링하는 확장 언어입니다. 1. LINQ 표현식 LINQ는 다음과 같은 부분으로 구성됩니다. Extension methods : Where나 OrderBy, Select와 같은 메서드를 포함하는데 LINQ에 대한 기능적인 부분을 제공합니다. LINQ providers : 메모리에서 객체를 다루기 위한 LINQ to Objects, 외부 데이터베이스에 데이터를 저장을 처리하기 위한 LINQ to Entities, XML을 다루기 위한 LINQ to XML 등을 의미하며 이들 공급자(providers)는 LINQ 표현식을 각 데이터에 맞는 특정한 방법으로 질의할 수 있도록 합니다. Lambda expressions : 메서..
[C#] File 다루기 - 4. 객체의 직렬화(Serialization)
4. 객체의 직렬화(Serialization) 직렬화는 객체를 특정한 형식에 맞춰 byte배열로 변환하여 처리하는 것을 말합니다. 역직렬화는 반대의 처리 개념이며 이는 객체의 현재 상태를 그대로 저장해 필요할 때 다시 객체를 그대로 재현할 수 있도록 합니다. 마치 게임에서 현재 상태를 저장해 뒀다가 다음날 마지막에 했던 플레이 상태를 그대로 되돌려 계속해서 게임을 진행하는 것과 같습니다. 직렬화된 객체는 파일이나 Database로 그 자체를 데이터화하여 저장할 수 있기 때문입니다. 객체를 직렬 화하는 데 사용되는 몇 가지 형식이 존재하지만 오늘날 가장 많이 사용하는 방식은 XML과 JSON 이 2가지입니다. JSON은 Web이나 Mobile과 같이 제한된 환경하에서 가장 최적의 선택이 될 수 있으며 XM..
[C#] File 다루기 - 3. 인코딩(Encoding)과 디코딩(Decoding)
3. Text의 인코딩(Encoding)과 디코딩(Decoding) 컴퓨터에 저장된 문자열(Text)는 0과 1로 표시하는 bit단위로 저장되며 8bit와 같은 단위를 통해 대부분 문자 자체를 나타내거나 특정한 포맷을 표시하기도 합니다. 예를 들어 ASCII는 128개의 코드를 가지는데 .NET은 내부적으로 문자열을 인코딩하는데 Unicode라는 표준을 사용합니다. ASCII에 비해 Unicode는 훨씬 더 많은 코드를 가지고 있습니다. 때로는 문자열이 Unicode를 사용하지 않거나 Unicode를 변환시키기 위해 다른 곳으로 옮겨져야할 경우가 있는데 이 때문에 Encoding사이에서 어떻게 변화시킬 것인지를 아는 것은 매우 중요합니다. 아래는 문자열을 인코딩하는데 사용되는 다른 일반적인 방법을 나열한..