c#

    C# Equals, ==, ReferenceEquals 비교

    1-1) 같음 연산자 '==' 연산자 왼쪽 오른쪽에 오는 것들이 같은지를 판단하는 연산자다 값 타입의 경우 좌 우의 값이 같으면 True, 다르면 False 를 반환한다. 참조 타입은 좌 우 객체가 같은지를 비교한다. (객체 내부의 값이 같은지 비교 한다는 뜻, 참조(주소)는 상관없음) 1-2) Equals 도 똑같이 == 과 동일한 역할 public virtual bool Equals(object? obj) public virtual bool Equals(object? objA, object? objB) Equals 메서드는 기본적으로 객체가 같은지를 비교한다. 기본적으로는 == 과 동일한 작동한다. 값 타입은 값이 같은지 비교를 하고 참조 타입은 객체가 같은지를 비교한다. (객체 내부의 값이 같은지 ..

    C# 복사본 만들기

    일반적으로 원본 개체에 영향을 주지 않고 복사본을 수정하거나 이동하기 위해 수행된다. 1. Object.MemberwiseClone() 방법 그만큼 Object.MemberwiseClone() 메서드를 사용하여 현재 개체의 얕은 복사본을 만들 수 있다. 참조 딥 카피를 구현하려면 MemberwiseClone() 방법. using System; public class X { public string str; public object Clone() { return this.MemberwiseClone(); } } public class Example { public static void Main() { X obj = new X(); obj.str = "Hello!"; X copy = (X) obj.Clone..

    C# 문자열 자르기(Split), 추출(Substring)

    Split 메서드 문자열을 특정 문자 또는 문자열을 기준으로 분리한다. 분리된 문자열은 배열로 반환되며, 전화번호에서 '-'를 기준으로 문자열을 분리하거나 이메일에서 '@'를 기준으로 문자열을 분리하는 경우 사용할 수 있다. string phoneNumber = "010-1234-5678"; string[] phoneNumberSplit = phoneNumber.Split("-"); foreach(string splitNumber in phoneNumberSplit) { Console.WriteLine(splitNumber); } "-"을 기준으로 문자열을 분리하였으며, 분리된 문자열은 배열로 반환한다. 즉, 배열 phoneNumberSplit에는 [ "010", "1234", "5678" ]이 할당된다..

    C# 문자열 공백 기준으로 분할

    String.Split() 방법. 구분 기호를 지정하지 않으면 공백 문자로 문자열을 분할한다. using System; public class Example { public static void Main() { String s = "Split by\twhitespace"; string[] tokens = s.Split(); Console.WriteLine(String.Join(", ", tokens)); // 공백으로 분할 } } 여러 공간을 처리하려면 다음을 사용할 수 있다. String.Split(char[]) method 과부하 StringSplitOptions.RemoveEmptyEntries 아래 그림과 같이 옵션을 선택. using System; public class Example { pub..

    C# _ Discard (변수 무시)

    필요한 이유 별도의 변수를 선언 할 필요가 없다. 또한 discards를 사용하면 메모리 할당을 줄일 수 있다. 코드의 의도를 투명하게 만들고 가독성과 유지 관리성을 향상시키는데 도움된다. 예제 코드 switch를 사용한 패턴 매칭 class Program { static void ProvideString(string statement) => Console.WriteLine(statement switch { "x" => "hello, x world", null => "hello, null world", _ => "hello, world" }); static void Main(string[] args) { ProvideString("x"); ProvideString(null); ProvideString("..

    C# Thread 클래스 (스레드)

    스레드의 생성 C#에서 쓰레드를 만드는 기본적인 클래스로 System.Threading.Thread라는 클래스가 있다. 이 클래스의 생성자(Constructor)에 실행하고자 하는 메서드를 델리게이트로 지정한 후, Thread클래스 객체에서 Start() 메서드를 호출하면 새로운 쓰레드가 생성되어 실행되게 된다. 아래 예는 동일 클래스 안의 Run() 메서드를 실행하는 쓰레드를 하나 생성한 후 실행시키는 예제이다. 예제에서는 기본적으로 생성된 메인 쓰레드에서도 동일하게 Run()메서드를 호출하고 있으므로, Begin/End문장이 2번 출력되고 있는데, 이는 2개의 쓰레드가 동시에 한 메서드를 실행하고 있기 때문이다. namespace MultiThrdApp { using System; using Syst..

    C# Task 클래스

    Task 클래스와 이의 Generic형태인 Task클래스는 .NET 4.0에 도입된 새로운 클래스들로서 쓰레드풀로부터 쓰레드를 가져와 비동기 작업을 실행한다. Task 관련 클래스들과 Parallel 클래스들을 합쳐 Task Parallel Library(TPL)이라 부르는데, 이들은 기본적으로 다중 CPU 병렬 처리를 염두에 두고 만들었다. Task 클래스는 .NET 4.0 이전 버전의 ThreadPool.QueueUserWorkItem()와 같은 기능을 제공하지만, 보다 빠르고 유연한 기능을 갖추고 있다. Task클래스 사용을 위해 흔히 사용되는 방법은 Task.Factory.StartNew()를 사용하여 실행하고자 하는 메서드에 대한 델리케이트를 지정하는 것이다. 이 StartNew()는 쓰레드를 ..

    C# foreach 사용법과 다양한 예제

    1. foreach 의미 끝을 지정해주는 다른 반복문과 달리, 인자로 들어온 itrable-item의 내부 인덱스 끝까지 알아서 순환을 해주는 반복문이다. foreach (element in iterable-item) { // body } : 여기서 element는 데이터 타입과 변수명을 포함하고. 아래와 같이 사용된다. : foreach(string str in arr); : foreach(데이터타입 변수명 in 배열,컬렉션등) 2. foreach 예제1 - 1차원 배열에서의 foreach public static void Main(string[] args) { int[] arr = { 11, 12, 13, 14, 15, 16, 17 }; //foreach문 Console.WriteLine("## fo..

    C# 배열 복사

    1. Array.CopyTo(Array destArray, int index) // srcArray의 데이터를 인자로 전달한 destArray에 저장한다. // destArray의 마지막 인자의 인덱스 부터 저장된다. byte[] sourceArray = new byte[10]; // 복사를 할 배열 byte[] destinationArray = new byte[10]; // 복사를 당할 배열 // 복사 할 배열의 데이터를 삽입 for (int i = 0; i < 10; ++i) sourceArray[i] = (byte)i; // 복사하기전 복사를 당할 배열의 데이터를 출력 for (int i = 0; i < 10; ++i) Console.Write($"{destinationArray[i]} "); //..

    C# 배열 초기화, 다차원배열, 가변배열에 대해서

    1. C# 배열의 선언 초기화 사용 방법 (Array) -> 배열이란 ? : 배열이란 관련있는, 비슷한 데이터를 효과적으로 관리하기 위한 자료구조다. : 배열을 이용하면 연관되어있는 데이터들을 for문과 결합하여 손쉽게 순회 할 수 있다. C#에서의 배열 선언 방법 1. 기본 모양 - 자료형[] 변수이름 = new 자료형[N] { 초기화 하거나 안하거나}; 2. 배열의 요소 개수를 지정하고 선언과 동시에 초기화 하는 방법 - int[] arr1 = new int[5] { 11, 12, 13, 14, 15 }; 3. 배열의 요소 개수를 지정하지 않고 선언과 동시에 초기화 하는 방법 - int[] arr1 = new int[] { 11, 12, 13, 14, 15 }; 4. 배열의 요소 개수를 지정하고, 추..