본문 바로가기

프로그래밍/C#101

C# 공변성(Covariance)이란 무엇인가? 공변성 공변성은 대리자에서 정의하고 있는 반환 형식보다 하위의 상속 형식(서브 형식, 더 많이 상속된 형식) 반환을 허용한다. Covariance 프로젝트에서 대리자의 공변성 예제를 살펴보자. public partial class Program { private delegate TextWriter CovarianceDelegate(); } 이 대리자는 TextWriter 형식을 반환한다. 다음으로 StreamWriterMethod()를 만들 텐데, 이 메서드는 StreamWriter 개체를 반환한다. public partial class Program { private static StreamWriter StreamWriterMethod() { DirectoryInfo[] arrDirs = new Dir.. 2024. 3. 26.
C# 제네릭 대리자(Generic Delegate) C# 제네릭 대리자(Generic Delegate)란? 대리자 형식은 제네릭(generic) 형식을 매개 변수로 이용할 수 있다. 제네릭을 지원하면, 대리자를 변수로 초기화할 때까지 대리자에 사용할 매개 변수나 반환 형식을 지정을 미룰 수 있다. 즉, 대리자 형식을 정의할 때는 대리자의 매개 변수와 반환 형식을 명시하지 않는다. 다음 코드를 이용해서 좀 더 자세히 알아보자. public partial class Program { private delegate T FormulaDelegate(T a, T b); } using System; public partial class Program { private delegate T FormulaDelegate(T a, T b); private static in.. 2024. 3. 26.
C# list 랜덤(random) 하게 섞기 C#에서 Linq로 랜덤 하게 섞기 list의 요소들을 랜덤 하게 섞고 싶을 때 Linq OrderBy()에서 random 객체의 Next()를 호출하면 간단하게 해당 요소들을 섞을 수 있다. using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { var list = new List() { 1, 2, 3, 4, 5 }; var random = new Random(); var randomized = list.OrderBy(x => random.Next()); foreach (var i in randomized) { Console.WriteLine(i); .. 2024. 3. 21.
C# 비트 연산자를 이용한 홀수짝수 판별, 절반으로 나누기 함수 구현 C# 비트 연산자(Bitwise Operator) 활용하기 using System; class Program { static void Main(string[] args) { var input = Console.ReadLine(); var num = Int32.Parse(input); Console.WriteLine($"{num} is {IsOdd(num)}"); Console.WriteLine($"{num} half = {Half(num)}"); } static string IsOdd(int n) { return (n & 1) == 0 ? "even" : "odd"; } static int Half(int n) { return n >> 1; } } 홀수 짝수 판별의 경우, 0001번째 자리와 비교해서 곱.. 2024. 3. 18.
C# char를 int로 바꾸는데 '0'을 빼는 이유 char를 int로 바꾸고 싶다 문자열 형식으로 된 숫자를 int 형식으로 변환하고 싶을 때, Int32.Parse()를 사용해도 되지만 해당 메서드를 사용하지 못한다면 어떻게 변환해야 하는가? string 형식의 문자열의 각 자릿수를 받아서 '0'을 빼주면 된다. '0'을 빼주는 이유는 char가 아스키코드(ASCII)로 되어있기 때문에 문자와 숫자 사이의 차이(offset)를 맞춰주기 위해서다. 아스키코드 '0'의 값 : 48 예시 : 아스키코드 '5'의 값 : 53 - 48 = 5 이런 식으로 아스키코드 '5'가 숫자 5로 변환이 가능하다. 예제 코드 using System; class Program { static void Main(string[] args) { var input = Console.. 2024. 2. 26.
C# StringBuilder에 대해서 String은 불변(Immutable)이다 String은 참조 타입이면서 불변이다. 데이터 변경때마다 힙에 새로운 메모리 공간이 할당되어야 한다. 그렇기 때문에 잦은 데이터 변경은 시스템에 부하를 가져온다. C# String은 참조 타입(Reference type)이면서 불변(Immutable)하다. string vs StringBuilder 예를 들어, int의 경우를 살펴보자. int는 값 타입(value type)이면서 가변(mutable)이다. 값 타입은 데이터 변경 시에 새로운 메모리 할당이 일어나지 않는다. 이미 생성된 메모리의 jettstream.tistory.com 참조 타입이면서 가변(Mutable)인 StringBuilder 그래서 잦은 문자열 변경이 예상된다면 StringBuilder.. 2024. 2. 21.