본문 바로가기
반응형

분류 전체보기625

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.
폰노이만 구조 폰노이만 구조 우리가 주목할 사건은 폰노이만 구조의 등장이다. 사실 에니악(ENIAC)은 현대 컴퓨터와 같이 다양한 프로그램을 수행할 수 있는 '범용 컴퓨터(general purpose computer)'는 아니었다. 다른 종류의 작업을 하기 위해서는 논리 회로의 구성을 바꿔야 했다. 소자를 연결하고 있던 전선을 다시 배열해 연결하는 과정이 필요했다. 이것은 시간과 인력이 매우 필요한 작업이므로 사람들은 컴퓨터의 구성(하드웨어)은 그냥 두고 소프트웨어만 바꾸어 다른 작업을 할 수 있는 범용 컴퓨터를 만들고 싶어 했다. 범용 컴퓨터 역사에서 빼놓을 수 없는 사람이 존 폰노이만(John von Neumann)이다. 그는 IAS 머신이라는 초기 범용 컴퓨터 개발에 참여했는데, 이 프로젝트에서 본인이 제안한 '.. 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.