전체 글

Software, 기타 등등..
C#/Language

C# - Language - Null-conditional operators (?., ?[])

Introduction Null 조건부 연산자 (?., ?[]) 는 멤버 액세스 ., 인덱서 액세스 [] 시 피연산자가 null이 아닐 때만 연산을 수행하며 null인 경우에는 null을 반환한다. Example Null 조건부 연산자는 단락 연산자로 피연산자가 null인 경우 . 및 [] 연산이 실행되지 않고 null을 반환한다. string? foo = null; if (foo?.Length is null) Console.WriteLine("Null-conditional member access returns null"); if (foo?[1] is null) Console.WriteLine("Null-conditional indexer access returns null"); /* output: N..

C#/Language

C# - Language - Indexer operator ([])

Introduction []는 일반적으로 배열, 인덱서, 포인터 요소 액세스에 사용한다. 배열 액세스 []를 이용하여 배열에 액세스 하는 경우는 다음과 같다. 형식 선언 인스턴스화 요소 접근 int[] foo = [1, 2, 3]; Console.WriteLine(foo[1]); /* output: 2 */ 만일 배열의 인덱스가 범위를 벗어난 경우 IndexOutOfRangeException이 발생한다. int[] foo = [1, 2, 3]; try { var value = foo[5]; } catch (IndexOutOfRangeException e) { Console.WriteLine(e.Message); } /* output: Index was outside the bounds of the arr..

C#/Language

C# - Language - Member access expression (.)

Introduction . 기호는 네임스페이스 및 형식 멤버에 액세스할 때 사용한다. Using 지시문 using 지시문을 사용할 때 .을 사용하여 중첩된 네임스페이스 또는 형식에 접근할 수 있다. using System.ComponentModel; using static System.Console; 정규화된 형식 .을 사용하여 정규화된 이름을 만들고 네임스페이스 내의 형식에 액세스할 수 있다. using 지시문을 사용하면 정규화를 하지 않아도 된다. System.Collections.Generic.List ints = [1, 2, 3, 4, 5]; System.Console.WriteLine(string.Join(", ", ints)); /* output: 1, 2, 3, 4, 5 */ 멤버 접근 .을..

C#/Common

C# - TIBCO Rendezvous - Sender

Introduction TIBCO Rendezvous는 TIBCO社의 메시징 미들웨어이다. 유료 소프트웨어로, 구매하지 않고는 사용할 수 없다. 여러 프로그래밍 언어를 지원하여 다양한 구성으로 통신이 가능하다. 사용하면서 느낀 가장 큰 특징은 아래와 같다. 네트워크 정보를 알 필요 없이 Subject를 Listener에 등록하여 원하는 메시지를 받을 수 있다. => 네트워크 시스템 구성 요소의 추가, 제거가 자유롭다 생산자 측에서 메시지에 새로운 필드를 추가하더라도, 각 Listener들은 통신을 수정할 필요가 없다. => 하나의 구성 요소에서 디테일을 분리하여 운용할 수 있다. 아래는 Sender 통신 예제이다. Example using TIBCO.Rendezvous; namespace TIBRVSen..

C#/Common

C# - TIBCO Rendezvous - Listener

Introduction TIBCO Rendezvous는 TIBCO社의 메시징 미들웨어이다. 유료 소프트웨어로, 구매하지 않고는 사용할 수 없다. 여러 프로그래밍 언어를 지원하여 다양한 구성으로 통신이 가능하다. 사용하면서 느낀 가장 큰 특징은 아래와 같다. 네트워크 정보를 알 필요 없이 Subject를 Listener에 등록하여 원하는 메시지를 받을 수 있다. => 네트워크 시스템 구성 요소의 추가, 제거가 자유롭다 생산자 측에서 메시지에 새로운 필드를 추가하더라도, 각 Listener들은 통신을 수정할 필요가 없다. => 하나의 구성 요소에서 디테일을 분리하여 운용할 수 있다. 아래는 Listener 통신 예제이다. Example using TIBCO.Rendezvous; namespace TIBRVL..

C#/Language

C# - Language - Collection

Introduction .NET 런타임은 객체 그룹을 관리하는 다양한 컬렉션 형식을 제공한다. 일부 컬렉션 형식 (Array, System.Span, System.Memory) 은 C# 언어로 인식된다. 또한 IEnumerable와 같은 인터페이스는 컬렉션의 요소를 열거하기 위한 언어로 인식된다. C# 12부터, 컬렉션은 컬렉션 식을 사용하여 초기화할 수 있다. 컬렉션은 다음과 같은 특징으로 분류할 수 있다. 요소 액세스 : 컬렉션을 열거하고 각 요소에 액세스하는 방법이 다르다. 인덱스 : List와 같은 컬렉션은 각 요소의 위치인 인덱스를 통해 요소에 액세스한다. 키 : Dictionary와 같은 컬렉션은 키를 통해 요소에 액세스한다. 성능 프로필 : 각 컬렉션은 요소 추가, 찾기 또는 제거와 같은 작..

C#/Language

C# - Language - Array

Introduction 배열은 type[]을 이용하여 선언하며, 형식이 동일한 변수를 여러 개 저장할 수 있다. type[] name; 배열 요소는 배열이 만들어질 때 초기화될 수 있으며, 초기화되지 않은 요소는 기본값으로 설정된다. 참조 형식 : null 값 형식 : 0 C# 12부터, 배열은 컬렉션 식을 사용하여 초기화할 수 있다. 배열은 다음과 같은 특징을 가진다. 배열은 단일 차원, 다차원 또는 가변일 수 있다. 차원은 선언할 때, 길이는 인스턴스가 생성될 때 설정된다. 배열의 인덱싱은 0부터 시작한다. 배열 형식은 IList, IEnumerable을 구현한다. 단일 차원 배열 다음 예는 1차원 배열을 초기화하고 사용하는 것을 보여준다. char[] chars = new char[5] { &#39..

C#/Language

C# - Language - Collection expression

Introduction C# 12부터, 컬렉션 및 배열은 컬렉션 식 ([]) 을 이용하여 초기화가 가능하다. 본문에서는 List를 활용하여 예시를 작성한다. 다음 예시와 같이, 컬렉션 식을 사용하여 코드를 간략하게 구성할 수 있다. // C# 11 List foo = new() { 1, 2, 3 }; // C# 12 List bar = [1, 2, 3]; Example 컬렉션 식은 다양한 형태로 사용 가능하다. internal class Program { // 필드 private List _field = [1, 2, 3]; // 프로퍼티 private List _property => [1, 2, 3]; static void Main(string[] args) { // 변수 List variable = [..

C#/Language

C# - Language - Switch expression

Introduction switch 식은 패턴 매칭을 기반으로 식을 계산한다. switch 문은 switch 문을 참조한다. switch 식은 다음과 같이 구성한다. x switch { Condition1 => Value1, Condition2 => Value2 }; x : 입력 값 스위치 암 (arm) : ,로 구분 된 각각의 식 ConditionX : 조건 (패턴 또는 케이스 가드) ValueX : 반환 식 switch 식의 결과는 조건이 true로 반환되는 첫번째 arm 반환 식의 값이다. 상위 arm으로 인해 하위 arm의 값 출력이 불가한 경우 컴파일러에서 오류가 발생한다. switch 식에 사용 가능한 패턴은 패턴 일치 - 패턴의 is 및 switch 식, 연산자 and, or 및 not을 참..

C#/Language

C# - Language - Null-forgiving operator (!)

Introduction Null-forgiving 연산자 (!) 는 단항 후위 연산자로, nullable 컨텍스트에서 null 경고를 억제한다. ! 연산자는 런타임에 영향을 주지 않고, 컴파일러의 분석에만 영향을 준다. 런타임에 x! 식은 x로 해석된다. Example 다음 nullable 컨텍스트의 Bar는 CS8618을 생성한다. #nullable enable public class Foo { public string Bar; // CS8618 public string? Baz; // 경고 없음 } 다음 nullable 컨텍스트의 Bar는 CS8618을 생성하지 않고, 생성자에서 null을 전달할 시 CS8625를 생성한다. #nullable enable public class Foo(string v..

C#/Language

C# - Language - Subtraction operators (-, -=)

Introduction -, -= 연산자는 정수, 부동 소수점, 대리자 형식을 지원한다. 여기서는 -, -= 연산자에 대해 간단히 알아본다. 산술 연산자 -에 대한 자세한 내용은 +, - operator (Arithmetic operator)를 참조한다. 대리자 제거 동일한 대리자 형식에 대해 - 연산자는 제거를 지원하며, 다음 규칙에 따라 인스턴스를 반환한다. 오른쪽 피연산자가 왼쪽 피연산자의 호출 목록에 포함되어 있는 경우, 왼쪽 피연산자의 오른쪽에서부터 제거 후 반환 Action a = delegate { Console.Write(nameof(a)); }; Action b = delegate { Console.Write(nameof(b)); }; var foo = a + b + a + b; var ..

C#/Language

C# - Language - Addition operators (+, +=)

Introduction +, += 연산자는 정수, 부동 소수점, 문자열, 대리자 형식을 지원한다. 여기서는 +, += 연산자에 대해 간단히 알아본다. 산술 연산자 +에 대한 자세한 내용은 +, - operator (Arithmetic operator)를 참조한다. 문자열 연결 피연산자 중 하나 또는 둘 다가 문자열 형식인 경우 + 연산자는 피연산자를 연결한다. Console.WriteLine("Hello " + "World!"); Console.WriteLine("Score : " + 5); Console.WriteLine("Null's string representation is string.Empty - " + null); /* output: Hello World! Score : 5 Null&..

Peponi_
Peponi