C#에서 16진수(X) 형식 지정자는 숫자 값을 16진수 문자열로 변환할 때 사용합니다. ToString() 메서드와 함께 활용되며, 정수 계열 숫자를 손쉽게 16진수 표기로 바꿀 수 있습니다.대문자 X와 소문자 x의 차이형식 지정자의 대소문자에 따라 출력 결과도 달라집니다. 16진수에서 9보다 큰 값은 알파벳 문자(A~F)로 표현되는데, 이때 지정자의 대소문자가 그대로 적용됩니다.X → A~F가 대문자로 출력됩니다. (예: 149A8C80)x → a~f가 소문자로 출력됩니다. (예: 307e)자릿수 지정하기형식 지정자 뒤에 숫자를
C#에서 무작위 문자열을 생성하는 것은 임시 비밀번호, 테스트 데이터, 고유 식별자 등을 만들 때 자주 사용되는 기법입니다. 이번 글에서는 StringBuilder와 Random 클래스를 활용하여 원하는 길이의 랜덤 문자열을 만드는 방법을 단계별로 살펴보겠습니다.1단계: StringBuilder 객체 준비먼저 문자열을 효율적으로 조립하기 위해 StringBuilder 객체를 선언합니다. 반복문 안에서 문자를 계속 추가해야 하므로, 일반 string 연결보다 성능 면에서 유리한 StringBuilder가 적합합니다.StringBuil
C# 7부터는 ValueTuple을 사용해 요소마다 이름을 붙인 튜플을 손쉽게 만들 수 있습니다. 이름이 있는 튜플은 인덱스 대신 의미 있는 필드명으로 값에 접근할 수 있어 코드의 가독성이 크게 향상됩니다.System.ValueTuple 패키지 설치ValueTuple 기능을 사용하려면 먼저 System.ValueTuple 패키지를 프로젝트에 추가해야 합니다. (.NET Framework 4.7 이상 또는 .NET Core 2.0 이상에서는 기본으로 제공됩니다.)설치 방법은 다음과 같습니다.Visual Studio에서 해당 프로젝트를
C#의 Hashtable 클래스는 키(key)와 값(value) 쌍으로 구성된 컬렉션을 나타내며, 키의 해시 코드(hash code)를 기반으로 요소들을 관리합니다. 컬렉션 내부의 요소에 접근할 때는 키를 사용합니다. Dictionary 역시 키와 값으로 이루어진 컬렉션이지만, Dictionary<TKey, TValue> 형태로 제네릭(Generic) 기반이라는 점이 핵심적인 차이입니다. Dictionary는 System.Collections.Generic 네임스페이스에 포함되어 있습니다. Hashtable과 Dictio
C#의 #region 지시문은 Visual Studio 코드 편집기의 개요(Outlining) 기능을 사용할 때 확장하거나 축소할 수 있는 코드 블록을 지정하는 전처리기 지시문입니다. 긴 소스 파일에서 관련된 코드들을 논리적으로 그룹화하여 가독성을 크게 향상시킬 수 있습니다.#region으로 영역을 시작했다면 반드시 #endregion으로 닫아주어야 합니다. 그렇지 않으면 컴파일 오류가 발생합니다.#region 기본 문법다음은 #region을 사용하여 코드 영역을 정의하는 기본적인 방법입니다.#region NewClass defin
C# 문자열 연결 연산자란?C#에서 두 개 이상의 문자열(string) 객체를 하나로 합치려면 + 연산자를 사용하면 됩니다. + 연산자는 문자열을 간단하고 직관적으로 연결할 수 있게 해주는 가장 기본적인 방법입니다.첫 번째 문자열 객체 생성먼저 문자 배열을 사용하여 첫 번째 문자열 객체를 만들어 보겠습니다.char[] c1 = { H, e, n, r, y };string str1 = new string(c1);두 번째 문자열 객체 생성같은 방식으로 두 번째 문자열 객체도 생성합니다.char[] c2 = { J, a, c, k };s
C#에서 정렬되지 않은 숫자 목록이 주어졌을 때, 최솟값과 최댓값 사이에 존재하지 않는 숫자(누락된 숫자)를 찾아야 하는 경우가 자주 있습니다. 이 글에서는 LINQ의 Enumerable.Range와 Except 메서드를 활용하여 간단하고 효율적으로 누락된 숫자를 찾는 방법을 알아보겠습니다.1단계: 숫자 목록 생성하기먼저 확인할 숫자들이 담긴 리스트를 만듭니다.List<int> myList = new List<int>(){1, 2, 3, 5, 8, 9};2단계: 최솟값과 최댓값 구하기LINQ의 OrderBy를
C# 프로그래밍에서 두 개의 리스트(List)에 공통으로 포함된 요소, 즉 교집합을 구해야 하는 경우가 자주 있습니다. 이럴 때 LINQ에서 제공하는 Intersect() 메서드를 사용하면 아주 간단하게 처리할 수 있습니다.1. 두 개의 리스트 준비하기먼저 비교할 두 개의 정수형 리스트를 생성합니다.List<int> val1 = new List<int> { 25, 30, 40, 60, 80, 95, 110 }; List<int> val2 = new List<int> { 27, 35, 40,
C#에서 Convert.ToInt16 메서드를 사용하면 지정된 값을 16비트 부호 있는 정수(short)로 손쉽게 변환할 수 있습니다.먼저 초기값이 설정된 double 변수를 하나 준비합니다.double doubleNum = 3.456;이제 이 값을 Int16, 즉 short 형식으로 변환해 보겠습니다.short shortNum;shortNum = Convert.ToInt16(doubleNum);Convert.ToInt16 메서드는 소수점 이하 값을 반올림 처리하며, 결과값은 16비트 부호 있는 정수가 표현할 수 있는 범위(-32,
C#에서 Convert.ToUInt16 메서드를 사용하면 지정된 값을 16비트 부호 없는 정수(ushort)로 손쉽게 변환할 수 있습니다. 이 메서드는 문자열뿐만 아니라 다양한 숫자 형식의 값을 받아 0부터 65,535 사이의 부호 없는 정수로 반환합니다.변환할 문자열 준비하기먼저 숫자 형태의 문자열을 하나 준비합니다.string str = 1129;이제 Convert.ToUInt16 메서드를 사용해 이 문자열을 16비트 부호 없는 정수로 변환해 보겠습니다.ushort res; res = Convert.ToUInt16(str);전체
C#의 Enumerable.Repeat 메서드는 System.Linq 네임스페이스에 포함되어 있으며, 지정한 요소를 원하는 횟수만큼 반복하여 하나의 시퀀스(컬렉션)로 생성해 주는 기능을 제공합니다.기본 사용법Enumerable.Repeat 메서드는 두 개의 매개변수를 받습니다.첫 번째 매개변수: 반복할 요소(값)두 번째 매개변수: 반복할 횟수예를 들어, 숫자 10을 다섯 번 반복하는 시퀀스를 만들고 싶다면 다음과 같이 작성합니다.Enumerable.Repeat(10, 5);전체 예제 코드아래는 Enumerable.Repeat 메서드
C#의 Aggregate() 메서드는 시퀀스(컬렉션) 전체에 걸쳐 누산기(accumulator) 함수를 적용하는 LINQ 연산자입니다. 요소들을 하나씩 순회하면서 이전 결과값과 현재 요소를 결합해 최종적으로 단일 결과를 도출할 때 유용하게 사용됩니다.예제 배열 준비하기먼저 다음과 같은 문자열 배열이 있다고 가정해 보겠습니다.string[] arr = { DemoOne, DemoTwo, DemoThree, DemoFour };Aggregate() 메서드 사용 방법이제 Aggregate() 메서드를 호출해 보겠습니다. 이 예제에서는 비
C#에서 Int64(64비트 부호 있는 정수)를 이진(binary) 문자열로 변환하려면 Convert.ToString() 메서드를 사용하면 됩니다. 이 메서드의 두 번째 매개변수에 진법을 지정하며, 이진수로 변환할 경우 2를 전달합니다.Int64는 64비트 크기의 부호 있는 정수를 나타내며, long 타입으로 선언됩니다.Int64 변수 설정하기먼저 이진 문자열로 변환할 long 타입 변수를 하나 선언합니다.long val = 753458;이진 문자열로 변환하기이제 Convert.ToString() 메서드를 호출하고, 두 번째 매개변
C#의 All() 메서드는 컬렉션에 포함된 모든 값이 지정된 조건을 만족하는지 검사한 뒤, 그 결과를 불리언(Boolean) 값으로 반환합니다. 단 하나의 요소라도 설정된 조건을 충족하지 못하면 All() 메서드는 False를 반환합니다.기본 사용법먼저 예시로 사용할 정수 배열을 살펴보겠습니다.int[] arr = {10, 15, 20};이제 All() 메서드를 활용해 위 배열의 모든 요소가 5보다 큰지 확인해 보겠습니다.arr.AsQueryable().All(val => val > 5);배열의 요소 10, 15, 20은
문자열을 처리하다 보면 중복된 문자를 제거해야 하는 경우가 자주 발생합니다. C#에서는 HashSet을 활용하면 아주 간단하게 해결할 수 있습니다.HashSet을 이용한 중복 제거 원리HashSet은 중복 값을 허용하지 않는 컬렉션입니다. 따라서 문자열을 HashSet<char> 타입으로 변환하면 동일한 문자는 하나만 저장되고, 나머지 중복 문자는 자동으로 걸러집니다.먼저 다음과 같은 문자열이 있다고 가정해 보겠습니다.string str = "ppqqrr";이제 HashSet을 사용하여 문자열을 char
C#의 LINQ에서 Distinct() 메서드를 사용하면 컬렉션에 포함된 중복 요소를 손쉽게 제거하고 고유한(distinct) 값만 추출할 수 있습니다.중복 요소가 있는 리스트 준비먼저 중복된 값이 포함된 정수형 리스트를 하나 만들어 보겠습니다. 아래 리스트에는 5와 30이 각각 두 번씩 들어 있습니다.List<int> points = new List<int> { 5, 10, 5, 20, 30, 30, 40, 50, 60, 70 };Distinct() 메서드로 중복 제거하기리스트를 AsQueryable()로 변
C#의 LINQ에서 제공하는 LongCount() 메서드를 사용하면 컬렉션에 포함된 요소의 개수를 long 타입으로 손쉽게 구할 수 있습니다. 일반적인 Count() 메서드는 int 타입을 반환하지만, 요소 수가 매우 많은 대용량 데이터를 다룰 때는 LongCount()가 유용합니다.예제 데이터 준비먼저 다음과 같은 문자열 배열이 있다고 가정해 보겠습니다.string[] emp = { Jack, Mark };LongCount() 메서드 적용하기배열을 AsQueryable()로 변환한 뒤 LongCount() 메서드를 호출하면 됩니다
C#에서 실수 리터럴을 float 타입 변수에 저장하려면 숫자 뒤에 소문자 f 접미사(suffix)를 붙여야 합니다. 이 접미사는 컴파일러에게 해당 리터럴이 double이 아닌 float 타입임을 알려주는 역할을 합니다.왜 f 접미사가 필요한가?C#에서 소수점이 있는 숫자 리터럴은 기본적으로 double 타입으로 해석됩니다. 그런데 double에서 float로의 암시적 변환은 정밀도 손실이 발생할 수 있기 때문에 컴파일러가 이를 허용하지 않습니다.따라서 다음과 같은 코드는 컴파일 오류를 발생시킵니다.float val = 30.22;
JoinJoin() 메서드는 호출한 스레드를 차단(block)하여 대상 스레드가 종료될 때까지 대기하도록 합니다. 대기 중에도 표준 COM 및 SendMessage 펌핑은 계속 수행되므로 메시지 처리에는 지장이 없습니다. 또한 이 메서드는 밀리초 단위의 시간 제한을 지정할 수 있는 등 여러 가지 오버로드 형태를 제공합니다.SleepSleep() 메서드는 현재 스레드를 지정된 시간(밀리초) 동안 일시 중지시킵니다. 스레드의 실행 흐름을 잠시 멈추거나 작업 사이에 간격을 두고 싶을 때 유용하게 사용됩니다.AbortAbort() 메서드는
C#에서 튜플(Tuple)은 여러 개의 값을 하나의 단위로 묶어 다룰 수 있게 해주는 유용한 자료 구조입니다. 이번 글에서는 튜플 안에 또 다른 튜플을 포함시키는 중첩 튜플(Nested Tuple)을 선언하고, 그 내부 요소에 접근하는 방법을 예제 코드와 함께 살펴보겠습니다.중첩 튜플 선언하기먼저 Tuple.Create 메서드를 사용하여 중첩 튜플을 선언해 보겠습니다. 아래 예제에서는 7번째 위치에 새로운 튜플 (720, 750, 780)을 포함시켰습니다.var tuple = Tuple.Create(100, 200, 300, 400