본문 바로가기
728x90
반응형

C#72

C#] Indices(har operator ^), Range(range operator ..) sequence의 elements 중 하나 또는 범위에 어떻게 접근할 수 있는지 살펴보자. Indicessequence의 index를 나타낸다. C# 8.0부터 ^ operator로 index를 지정할 수 있다. constructor Index는 2개의 paramter로 구성되어 있다. public Index (int value, bool fromEnd = false);index는 0보다 크거나 같아야 하며, fromEnd는 optional이다.  Index는 아래와 같이 사용할 수 있다. public class IndexExamples{ public static string GetFirst(string[] names) { var index = new Index(0); .. 2024. 4. 26.
C#] Span<T>, ReadOnlySpan<T> 과 메모리 성능 성능은 software 개발자에게 항상 중요한 문제이다. .NET 팀에서 Span 구조체를 release했을때, 개발자들은 앱 성능을 강화할 수 있게 되었다. 어떻게 구현하고, 사용할 수 있는지 알아보자. C#에서 Span이란? Span은 ref struct object로 구현되며, 이것은 Span이 항상 stack memory에 할당된 다는 것을 나타낸다. Span은 pointer와 length를 갖는 stuct로 나타낼 수 있다. public readonly ref struct Span { private readonly ref T _pointer; private readonly int _length; } 힙에 있는 T type object의 reference와 length가 있다. Span은 항상 s.. 2024. 4. 5.
C#] Properties vs Fields 차이점 Field란? class나 struct 바로 아래에 선언된 변수이다. public, private, protected, internal, protected internal, private protected가 될 수 있다. private int _age; private 이기 때문에, class 내부에서만 접근할 수 있다. fields는 일반적으로 backing store, backing field 용도로 사용한다. field를 private로 선언하고 public property로 접근해서 사용한다. public int Age { get { return _age; } set { _age = value; } } Person class의 생성에 따른 실행을 살펴보자. public class Person { p.. 2024. 2. 15.
C#] Optional Parameters Optional Parameters이란? 함수 호출 시, parameter를 선택적으로 포함할 수 있다. 피자의 추가토핑 처럼, 원하면 추가하고 없어도 괜찮다. public void OrderPizza(string size, string extraTopping = "") { ... } 위 코드에서 extraTopping이 선택적 파라미터이다. OrderPizza 호출 시, extraTopping을 포함하거나 아니면 size만 전달해도 된다. Optional parameters는 코드에 확정성과 단순함을 가져온다. method overloads를 줄여준다. 하나의 함수가 여러 다른 일을 할 수 있다. 가독성을 늘린다. method versions 사이를 왔다갔다 할 필요가 없다. flixible API를 .. 2024. 2. 14.
C#] IDisposal Interface 구현 방법 IDisposal interface는 관리코드에 리소스 정리 툴을 제공한다. IDisposal을 구현하므로, object에 의해 할당된 관리하지 않는 리소스를 release할 수 있다. IDisposable interface의 사용목적 주로 리소스를 시기적절하게 release하는데 사용된다. .NET Garbage Collector는 사용하지 않는 변수를 예상치 못하게 releasing처리 하므로 메모리를 잘 관리한다. GC가 메모리 정리를 하기 전에 메모리가 부족할 수 있다. 따라서 수동으로 메모리 정리 처리를 해줘야 한다. 이러한 리소스는 주로 파일처리, DB, 네트워크 작업과 관련되어 있다. 리소스 부족으로 성능 이슈가 생기지 않도록, 리소스를 release시켜야 한다. IDisposable 기본 .. 2024. 2. 14.
C#] Managed vs Unmanaged Code 관리, 비관리 코드는 메모리 관리를 다루는 방식이 다른 2가지 종류이다. 차이점과 garbage collection에 대해 살펴보자. 관리코드란? 관리코드란 런타임 환경에서 자동으로 메모리 관리(garbage collection, GC)를 제공하는 코드이다. GC는 런타임 환경에서 자동으로 메모리 관리를 하는 프로세스이다. 메모리 할당과 해제에 대한 걱정없이 코드를 작성할 수 있도록 해준다. public class ManagedMemoryManager { private readonly List _numbers; public ManagedMemoryManager() { _numbers = new List(); } public void AllocateMemory() { for (var i = 0; i < 1.. 2024. 2. 14.
728x90
반응형