C# 9.0 기능 설명 1. Top-Level Program (최상위 프로그램) 파이썬과 같은 간단한 프로그램이 점유율이 높아지면서 생겨난듯 ,,? 있어서 나쁠 것은 없지만 그렇게까지 필요한 기능인지는 모르겠다. 간단하게 설명하자면 기존에 존재하던 Main() 함수가 없이도 프로그램 진입점이 자동으로 설정된다! using System; int a = 100; Console.WriteLine(a); 이런 식이다. Main()이 없는데도 프로그램이 실행된다! 그러면 기존에 Main() 함수와 동시에 존재한다면 ? 어떠한 일이 발생하는지 궁금할 것이다. 우선적으로 최상위 코드부터 프로그램이 시작되게 된다. C# 컴파일러는 최상위 프로그램 때문에 Main 메서드를 무시한다는 경고 메시지를 내면서 최상위 코드를 ..
1.Record Type(레코드 타입) 1-1. 타입 설명 레코드 타입은 간단하게 말하면 모든 멤버가 불변의 값을 갖는 클래스라고 생각하면 편하다. (reference Type이기 때문에 구조체보다는 클래스에 가까운 것 같다. Immutable value(불변 값) 형식이다. public record Monster { public string Name { get; } public int Hp { get; } public Person(string name, int hp) => (Name, Hp) = (name, hp); } class Program { static void Main(string[] args) { Monster p = new Monster("Slime_1", 10); } } 위의 예제를 보면..
C# 8.0 Switch expression 유용하기도 하고, 길어서 따로 분리했다. Switch 식을 보다 편리하게 사용 가능하다. 람다식을 사용한다. 바로 예제부터 보자 using System; public enum DayOfWeek { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } class Program { static void Main() { int numberOfLetters = day switch { DayOfWeek.Monday => 6, DayOfWeek.Tuesday => 7, DayOfWeek.Wednesday => 9, DayOfWeek.Thursday => 8, DayOfWeek.Friday => 6, DayOf..
c# 8.0 정리 1.디폴트 인터페이스 멤버 구현 (Default Inteface Members) 지금까지 (C# 8.0 이전) C#에서 인터페이스를 한번 배포한 후, 그 인터페이스를 수정하면 기존에 구현된 모든 타입들을 수정하지 않는 한 타입 오류를 발생시켰다. 더구나 그 인터페이스를 외부에서 사용한다면, 수정은 거의 불가능하였다. C# 8.0에서는 인터페이스에 새로운 멤버를 추가하고, 새로운 멤버의 Body 구현 부분을 추가할 수 있게 되었다. 이렇게 새로 추가된 인터페이스 멤버는 디폴트로 사용되기 때문에, 기존 구현된 타입들이 새 멤버를 추가적으로 구현되지 않을 경우, 이 디폴트 구현을 사용하게 된다. 출처 - https://www.csharpstudy.com/Latest/CS8-def-itf-me..
과제용으로 파이썬을 몇번 이용해봤는데 변수의 타입을 지정해도 자꾸 지멋대로 변해서 불편한 점이 한두가지가 아니었다. 나는 웬만하면 명시적으로 변수를 선언해주는 편인데 var키워드의 장점이 대체 뭐가 있는지, 성능면에서는 어느것이 뛰어날지 궁금해서 찾아보았다. Effective C# 에 있는 글을 찾아보았다. - var로 선언하면 동적 타이핑이 수행되는 것이 아니라 할당된 오른쪽 값을 확인하여 컴파일러에 의해 왼쪽 변수의 타입을 결정하게 된다. 컴파일러에게 변수의 타입을 명시적으로 알려주지 않아도 개발자를 대신하여 올바른 타입을 추론해주는 것이다. - var를 사용함으로써 코드를 간결하고 가독성이 좋아질 수 있다. 대신 변수명을 통해 그 역할이 정확히 유추될 수 있도록 구현하는게 좋다. 코드를 명시적으로 ..
1.ref local, return, struct 1-1.ref local 이제 ref 키워드를 이용해서 참조형식으로 값 형식을 선언할 수 있게 됐다. 변수를 복사하는 대신 메모리 주소값을 반환하니 성능적으로 향상이 있을 듯 하다. void Main() { int x = 10; ref int refLocal = ref x; Method(ref refLocal); } 1-2.ref return 이제 ref 키워드를 이용해서 참조형식으로 값 형식을 반환할 수 있게 됐다. 아래 예제를 보자 ref int Find(int[] array, int value) { for (int i = 0; i < array.Length; i++) { if (array[i] == value) { return ref array[i]..