반응형 프로그래밍484 C# 표현식 본체 멤버(Expression-bodied member) 표현식 본체 멤버(Expression-bodied member)C#의 속성이나 메서드는 보통 여러 문장(statement)들로 구성된 블록을 실행하게 된다. 하지만 속성이나 메서드의 Body 블록이 간단한 경우, 문 블럭(Statement Block)을 사용하는 대신 간단한 함수식(Expression)을 사용할 수 있는데, 이를 표현식 본체 멤버(Expression-bodied member)라고 부른다. 이는 기존의 람다식과 유사한 것으로 속성이나 메서드 Body를 간략한 람다식처럼 표현한 것이다. 기본 형태[반환타입] [멤버이름] => [표현식];메서드 속성(읽기 전용) 생성자 소멸자 인덱서 연산자 오버로딩위에 항목들을 람다식(Lambda Expression)의 형태(=>)를 사용하여 정의를 단순화 할.. 2023. 6. 28. C# where 제네릭 형식 제약(generic type constraint) where 제약 조건 C# 제네릭 사용 시에 where 키워드를 사용하여 형식을 제약하는 것이 가능하다. where T : struct 형식 인수는 null을 허용하지 않는 값 형식이어야 한다. 모든 값 형식에 액세스 할 수 있는 매개 변수가 없는 생성자가 있으므로, struct 제약 조건은 new() 제약 조건을 나타내고 new() 제약 조건과 결합할 수 없다. strcut 제약조건을 unmanaged 제약 조건과 결합할 수 없다. where T : class 형식 인수는 참조 형식이어야 한다. 이 제약 조건은 모든 클래스, 인터페이스, 대리자 또는 배열 형식에도 적용된다. where T : class? 형식 인수는 null을 허용하거나 null을 허용하지 않는 참조 형식이어야 한다. 이 제약 조건은 .. 2023. 6. 28. Queue vs ConcurrentQueue로 쓰레드 환경에서 테스트 Queue로 실행한 경우 thread-safe가 보장되지 않은 Queue로 큐를 선언 using System; using System.Collections.Generic; using System.Threading.Tasks; class CQ_EnqueueDequeuePeek { static void Main() { Queue cq = new Queue(); for (int i = 0; i { int localSum = 0; int localValue; while (cq.TryDequeue(out localValue)) { localSum += localValue; } outerS.. 2023. 6. 27. 유저 모드와 커널 모드 유저 모드(사용자 모드)와 커널 모드 보통 운영체제는 유저 모드와 커널 모드 두 가지 프로세서 접근 모드를 지원한다. 애플리케이션은 유저 모드에서 실행되고 핵심 운영 체제 구성 요소는 커널 모드에서 실행된다. 많은 드라이버가 커널 모드로 실행되지만 일부 드라이버는 유저 모드에서 실행될 수 있다. 사용자가 직접적으로 하드웨어 장치를 제어한다면 큰 문제가 발생할 수 있기 때문에 사용자 애플리케이션은 System Call을 통해 하드웨어 요청이나 중요한 시스템 요청을 진행한다. 요청을 하면 유저 애플리케이션은 유저 모드에서 커널모드로 잠시 전환되었다가 커널모드에서 작업을 실행한 뒤 응답을 유저 애플리케이션으로 반환한다. 유저 모드 프라이빗 가상 주소 공간과 프라이빗 핸들 테이블을 애플리케이션에 제공 가상 주소.. 2023. 6. 27. C# Linq - Enumerable.Aggregate() Aggregate() 합계, 총액이라는 의미로 생각하면 이해하기가 편하다. 누적 연산을 할 때 쓰면 유용하다. 정리하자면, 리스트의 요소들을 하나의 값으로 변환한다. 함수형 프로그래밍에는 Fold(), Reduce()와 같은 함수들이 비슷한 기능을 한다. 문자열 모아서 출력하기 각각의 요소들을 이어 붙여서 하나의 문자열로 출력이 가능하다. public class Program { static void Main(string[] args) { string[] list = {"kim", "lee", "park", "choi", "dol"}; var data = list.Aggregate((str1, str2) => str1 + ", " + str2); Console.WriteLine(data); } } 숫자 .. 2023. 6. 26. Effective C# Item 22 : 공변성과 반공변성을 지원하라 공변성(Convariance)과 반공변성(Contravariance)을 지원하라 타입의 가변성(Variance), 즉 공변(Covariance)과 반공변(Contravariance)은 특정 타입의 객체를 다른 타입의 객체로 변환할 수 있는 성격을 일컫는다. 이러한 변환을 지원하려면 제네릭 인터페이스나 델리게이트의 정의 부분에 제네릭 공변/반공변을 지원한다는 의미의 데코레이터(decorator)를 추가해야 한다. 공변/반공변을 지원하면 우리가 개발하는 API를 더 다양하고 안전하게 사용할 수 있다. 가변성의 반대는 불변성(Invariance)이라고 한다. 타입의 공변성은 많은 개발자가 접하는 문제지만 이를 정확히 이해하는 사람은 많지 않다. 공변과 반공변이란 타입 매개변수로 주어지는 타입들이 상호 호환 가.. 2023. 6. 22. 이전 1 ··· 64 65 66 67 68 69 70 ··· 81 다음