Language/C# 20

[C#] == , Equals, ReferenceEquals

Big Integer를 구현하면서 ==를 오버로드 하다보면 노란색 경고로 !=, Equals 등을 구현하지 않았다고 뜬다.==와 Equals는 동일한 작동일 것 같은데 왜 이것도 오버라이드 하라고 빼액 거리는지 둘이 어떤 차이가 있는지 궁금해졌다.근데 또 ==을 오버라이드하다보면, ReferecneEquals로 null체크를 한다. 이건 또 뭘까?== 연산자값 타입 :두 값이 비슷한지 비교참조 타임 : 두 객체가 동일한 메모리 위치를 참조하는지 비교Equals매서드로, 클래스에만 존재객체의 동일성을 판단하는데 사용기본적으로 두 객체가 같은 인스턴스를 가리키는지 확인ReferenceEqualsObject 클래스의 static method로, 두 객체가 동일한 참조를 가리키는지 확인값형식은 값을 박싱하여 비..

Language/C# 2024.11.14

[C#] Span

BigInteger 구현을 하면서 최적화 하기 위한 방법을 찾던중 Span라는 문법을 발견. Span란?Span는 C# 7.2에서 도입된 구조체로, 연속된 메모리 영역을 안전하고 효율적으로 처리할 수 있도록 도와줌. Span는 기본적으로 배열, 문자열, 혹은 포인터와 같은 연속된 메모리 공간에 대한 뷰를 제공함. 이를 통해 메모리를 복사하지 않고도 데이터를 조작할 수 있어 성능을 크게 개선할 수 있음.기본적인 특징은 다음과 같음:메모리 안전성: Span는 배열을 다룰 때 흔히 발생할 수 있는 인덱스 범위 초과 문제에 대해 안전한 처리를 제공.힙 할당 회피: Span는 스택에 할당되어 GC(가비지 컬렉션)의 부담을 줄이므로, 특히 성능이 중요한 코드에서 유용.범용성: Span는 배열뿐만 아니라 메모리의 ..

Language/C# 2024.11.12

[C#] Skip

C#에서 배열의 Skip() 메서드 사용법: 배열 요소를 쉽게 건너뛰기C#에서 배열이나 리스트와 같은 컬렉션을 다루다 보면, 특정 요소를 건너뛰고 작업하고 싶을 때가 있습니다. 예를 들어, 첫 번째 요소를 제외하고 나머지 모든 요소를 처리하고 싶다면 어떻게 할까요? 이때 유용하게 사용할 수 있는 것이 바로 Skip() 메서드입니다. 이번 포스팅에서는 Skip() 메서드가 무엇인지, 그리고 실무에서 어떻게 사용할 수 있는지 간단하게 설명드리겠습니다.Skip() 메서드란?Skip() 메서드는 LINQ (Language Integrated Query)에서 제공하는 확장 메서드로, 컬렉션의 앞부분 요소를 건너뛰고 나머지 요소를 반환합니다. 이 메서드는 컬렉션의 일부를 무시하고 나머지 요소로 새로운 컬렉션을 만들..

Language/C# 2024.11.06

[C#] Serialization & Deserializaton

[C#] Serialization & Deserializaton직렬화(Serialization)와 역직렬화(Deserialization)는 데이터의 저장 및 전송을 용이하게 하기 위해 데이터를 변환하는 것1. 직렬화 (Serialization)직렬화는 객체 / 데이터를 바이트등의 형태로 변환하여 저장/전송 할 수 있도록 하는 과정대표적 직렬화 방식JsonXmlBinary사용 예시파일 저장네트워크로 객체 전송2. 역직렬화 (Deserialization)직렬화된 데이터를 다시 객체로 복원하는 과정저장된 바이트나 문자열을 다시 객체로 불러오는 것C# Json직렬화 예시기본 코드string filepath = "filepath.json";string json = JsonSerializer.Serialize(ob..

Language/C# 2024.10.14

[C#] String Builder

String의 문제점String은 불변 특성을 가져 문자열을 수정하거나 연결할 때마다 새로운 인스턴스가 생성되어 메모리 할당과 해제가 반복적으로 발생하게 됨. -> 성능저하StringBuilder란?string의 새로운 인스턴스 생성문제를 해결하기 위해 만들어짐문자열을 동적으로 수정할 수 있는 가변 객체로, 문자열이 자주 변경되는 상황에서 성능을 향상 시키기위해 사용됨.

Language/C# 2024.10.14

[C#] 클래스 상속, 추상클래스, 인터페이스

1. 클래스 상속 (Class Inheritance)What is Inheritance?기존 클래스 (부모 혹은 슈퍼)의 속성과 메서드를 새로운 클래스(자식 혹은 서브)가 물려받는 것특징코드 재사용 : 부모 클래스의 속성과 메서드를 자식클래스에서 재사용확장성 : 기능을 확장하거나 override 할 수 있음C#에서는 단일 상속만 지원사용 시점공통 기능을 여러 클래스에서 재사용해야할 때기능을 확장하고 싶을 때2. 추상 클래스 (Abstract Class)[추상클래스]({{ site.baseurl }}/cs/2024/09/11/abstractclass) What is Abstract Class?하나 이상의 추상 메서드를 포함할 수 있는 클래스실체 클래스의 공통적인 부분을 추출해 어느정도 규격을 잡아 놓은 추..

Language/C# 2024.10.14

[C#] Delegate, Event, Action 그리고 Func

1. DelegateWhat is Delegate?Delegate는 C#에서 메서드 참조를 가능하게 하는 형식.메서드의 서명(매개변수와 반환 타입)을 기반으로 메서드를 가리킬 수 있으며, 마치 함수 포인터처럼 동작.예시public delegate void MyDelegate(string message); // 리턴 타입이 void인 Delegate 정의public void PrintMessage(string message){ Console.WriteLine(message);}MyDelegate del = PrintMessage; // 메서드 참조del("Hello, Delegate!"); // Delegate를 통한 메서드 호출2. EventWhat is Event?특수한 형태의 d..

Language/C# 2024.10.14

[C#] Console

C# Console 기능 정리1. Console.SetCursorPosition(int x, int y)역할: 콘솔 창 내에서 커서를 특정 위치(x, y)로 이동활용 예시: console을 클리어하지 않고 특정 위치로 옮겨 문자를 그리거나 지울 수 있음.Console.SetCursorPosition(10, 5); // 콘솔 창의 (10, 5) 위치로 커서 이동Console.Write("O"); // 스네이크 머리 또는 몸체 출력2. Console.SetWindowSize(int width, int height)역할: 콘솔 창의 너비와 높이를 설정활용 예시: 게임을 위한 고정된 화면 크기를 설정하여 게임 공간을 관리Console.SetWindowSize(80, 40); // 콘솔 창의 너비를 80, 높이를..

Language/C# 2024.10.14