c#
[.NET] 닷넷 Type 사용하기 - 5. index와 range 그리고 Span
6. index와 range 그리고 Span .NET Core 2.1부터 .NET에 대한 마이크로소프트 주요 목표 중 하나는 성능과 리소스 활용의 향상이며 Span는 그 목표의 일환 중 하나입니다. Array 구현할 때 기존에 존재하는 Array객체에서 일부분만을 필요로 하는 경우 기존 객체를 그대로 복사해 새로운 Array를 생성하고 필요한 처리를 수행하는 경우가 있습니다. 그러나 이러한 방법은 메모리에 같은 객체를 반복해 생성하게 된다는 측면에서 그다지 효휼적인 방법이라고는 할 수 없습니다. 위와 같이 전체가 아닌 일부분의 요소만을 필요로 한다면 span을 사용함으로써 성능과 효율성을 기대할 수 있습니다. 다만 Span은 Collection이 아닌 Array를 대상으로만 사용할 수 있습니다. Span..
[.NET] 닷넷 Type 사용하기 - 4. Collection 사용
5. Collection 사용 Collection은 일반적으로 다수의 값을 저장하기 위한 용도로 사용되며 .NET에서는 Collection과 관련한 여러 Type을 정의하고 있습니다. Namespace Type 설명 System.Collections IEnumerable IEnumerable Collection에 의해 사용되는 인터페이스와 기반 System.Collections.Generic List Dictionary Queue Stack generic type 매개변수를 통해 Collection에서 다룰 형식을 지정 System.Collections.Concurrent BlockingCollection ConcurrentDictionary ConcurrentQueue 멀티스레드에서 사용 System...
[.NET] 닷넷 Type 사용하기 - 3. 정규식(regular expressions)
4. 정규식(regular expressions) 사용 정규식은 특정값의 형식, 예를 들어 사용자가 입력한 값이 원하는 형식과 일치하는지를 확인할 수 있는 강력한 수단이며 대부분이 프로그래밍 언어에서 정규식을 기본적으로 지원하고 있습니다. using System; using System.Text.RegularExpressions; namespace myapp { class Program { static void Main(string[] args) { Console.Write("귀하의 나이를 입력하십시오. : "); string? input = Console.ReadLine(); Regex regx = new(@"\d"); if (regx.IsMatch(input ?? string.Empty)) Conso..
[.NET] 닷넷 Type 사용하기 - 2. 날짜와 시간
3. 날짜와 시간 다루기 C#에서 날짜와 시간을 다루는데 중요한 Type으로 다음 2가지가 존재합니다. DateTime 특정 날짜와 시간을 표현합니다. TimeSpan 특정 기간을 표현합니다. 위 2개의 Type은 같이 사용되는 경우가 많은데 예를 들어 다른 것으로부터 DateTime값을 빼는 경우 그 결과로 TimeSpan을 가져오거나 TimeSpan값을 DateTime에 더하는 경우 그 결과로 DateTime값을 가져오는 경우 등이 있습니다. ● 날짜와 시간의 지정 날짜와 시간 값을 생성하는 가장 일반적인 방법은 일과 시간처럼 각각 개별적인 값으로 생성하는 것입니다. 날짜나 시간을 단순 문자열로 표현하면 그것 만으로 파싱이 가능하기는 하지만 문화권에 따라 자칫 잘못 해석될 수 있으므로 문자열로의 표현..
[.NET] 닷넷 Type 사용하기 - 1. 숫자, 문자열
.NET에는 숫자나 문자열, 배열등을 위한 다양한 Type이 정의되어 있으며 클래스나 구조체와 같은 사용자 정의 Type을 제외하고 대부분 프로그램에서 사용 가능한 수많은 Type을 포함하고 있습니다. 1. 숫자형 숫자는 가장 일반적으로 사용되는 데이터 타입중 하나로 아래와 같은 Type들이 존재합니다. Namespace Type 목적 System SByte, Int16, Int32, Int64 0을 포함한 양수, 음수등 일반적인 정수전체를 다룹니다. System Byte, UInt16, UInt32, UInt64 0을 포함한 양수 전체를 다룹니다. System Half, Single, Double 부동 소수점과 같은 실수를 다룹니다. System Decimal 고정 소수점과 같은 실수를 다룹니다. Sy..
[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사이에서 어떻게 변화시킬 것인지를 아는 것은 매우 중요합니다. 아래는 문자열을 인코딩하는데 사용되는 다른 일반적인 방법을 나열한..
[C#] File 다루기 - 2. 스트림(Stream) 다루기
2. 스트림(Stream) 다루기 stream은 byte의 배열입니다. 비록 File은 array처럼 다뤄지기는 하지만 File내부의 byte배열 위치를 통해 임의 접근이 가능하며 이는 순차적인 순서로 처리될 수 있는 byte로서 File을 처리할 수 있는 유용한 방법이 될 수 있습니다. stream은 또한 터미널이나 램덤엑세스를 제공하지 않고 위치를 찾을 수 없는(이동할 수 없는) 소켓과 포트 같은 네트워크 리소스의 입력과 출력에도 사용됩니다. 이때에도 stream자체가 어디에서 왔는지와는 상관없이 임의의 byte를 처리할 수 있는 Code를 작성할 수 있습니다. stream을 대상으로 한 읽기/쓰기를 수행하는 Code자체도 간단하며 byte가 실제 저장되는 곳도 제어할 수 있습니다. (1) Strea..