C#에서 문자 상수(문자 리터럴, Character Literal)는 작은따옴표( )로 감싸서 표현합니다. 예를 들어 x처럼 하나의 문자를 나타내며, char 타입의 변수에 저장할 수 있습니다.문자 리터럴은 다음 세 가지 형태 중 하나로 작성할 수 있습니다.일반 문자: x, A, 가처럼 그대로 표기된 문자이스케이프 시퀀스(Escape Sequence): \t(탭), \n(줄바꿈)처럼 백슬래시(\)와 함께 특수 기능을 나타내는 문자유니코드 문자(Universal Character): \u02C0처럼 유니코드 코드 포인트를 16진수로
C# SortedList 클래스란?SortedList(정렬 리스트)는 C#에서 제공하는 컬렉션 클래스로, 배열(Array)과 해시 테이블(Hashtable)의 특성을 결합한 구조입니다. 저장된 항목은 키(Key) 또는 인덱스(Index)를 통해 접근할 수 있으며, 인덱스로 접근할 때는 ArrayList처럼, 키로 접근할 때는 Hashtable처럼 동작합니다.특히 SortedList의 가장 큰 특징은 컬렉션에 저장된 항목들이 항상 키 값을 기준으로 자동 정렬된다는 점입니다. 따라서 데이터를 순서대로 관리해야 하는 상황에서 매우 유용하
C# 스택(Stack) 클래스란?스택(Stack)은 후입선출(LIFO, Last-In First-Out) 방식으로 데이터에 접근해야 하는 경우에 사용하는 컬렉션 클래스입니다. 이름 그대로 가장 마지막에 넣은 요소가 가장 먼저 꺼내지는 구조로, 접시를 차곡차곡 쌓아 올린 모습을 떠올리면 이해하기 쉽습니다.스택에 새로운 요소를 추가하는 작업을 푸시(Push), 스택에서 요소를 제거하는 작업을 팝(Pop)이라고 부릅니다.주요 멤버 정리Push(): 스택의 맨 위에 요소를 추가합니다.Pop(): 맨 위의 요소를 제거하면서 반환합니다.Pee
System.Reflection 네임스페이스란?System.Reflection 네임스페이스는 실행 중인 애플리케이션에 대한 정보를 조회하고, 타입(Type), 값(Value), 객체(Object)를 동적으로 추가하거나 조작할 수 있는 다양한 클래스를 제공합니다. 이를 통해 개발자는 컴파일 시점이 아닌 런타임에 어셈블리, 모듈, 타입 등의 메타데이터에 접근할 수 있습니다.Module 클래스의 역할Module 클래스는 새로운 인스턴스를 초기화하는 생성자를 가지고 있습니다. 여기서 모듈(Module)이란 하나 이상의 클래스와 인터페이스를
C#에서의 파일 처리 개요파일(File)이란 특정 이름과 디렉터리 경로를 가진 채로 디스크에 저장된 데이터의 집합을 의미합니다. 파일을 읽기 또는 쓰기 용도로 열면 그 순간부터 파일은 스트림(Stream)이 됩니다. C#에서는 스트림을 통해 파일에 데이터를 읽고 쓰는 모든 작업을 수행할 수 있습니다.FileStream 객체 생성하기C#에서 새 파일을 생성하거나 기존 파일을 열려면 FileStream 객체를 만들어야 합니다. FileStream 객체를 생성하는 기본 문법은 다음과 같습니다.FileStream <객체명> =
개요C#에서는 Substring() 메서드를 활용하면 하나의 문자열에서 만들 수 있는 모든 부분 문자열을 손쉽게 추출할 수 있습니다.예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.pqr부분 문자열 추출 원리부분 문자열은 길이 1부터 문자열 전체 길이까지 단계적으로 잘라낼 수 있습니다. 바깥쪽 반복문은 추출할 부분 문자열의 길이(i)를 결정하고, 안쪽 반복문은 시작 위치(start)를 한 칸씩 이동시키며 해당 길이의 모든 부분 문자열을 얻어냅니다.for (int start = 0; start <= str.Length
C#에서 List<T>는 크기가 자동으로 조절되는 동적 컬렉션으로, 데이터를 유연하게 관리할 수 있게 해줍니다. 이 글에서는 리스트를 선언하고 항목을 추가하는 기본적인 방법을 예제 코드와 함께 살펴보겠습니다.1. 리스트 선언하기먼저 문자열을 저장할 리스트를 선언합니다. 다음과 같이 List<string> 타입의 변수를 생성하면 됩니다.var teams = new List<string>();2. Add() 메서드로 항목 추가하기C#에서 리스트에 새로운 항목을 추가하려면 Add() 메서드를 사용합니다.
C#에서 리스트(List)에 정수 값을 추가하려면 Add() 메서드를 사용하면 됩니다. Add() 메서드는 List<T> 클래스에 기본으로 제공되며, 호출할 때마다 지정한 요소를 리스트의 맨 끝에 순서대로 추가합니다.1. 정수형 리스트 선언하기먼저 C#에서 정수 값을 담을 리스트를 선언합니다. 리스트는 제네릭 컬렉션이므로 System.Collections.Generic 네임스페이스를 사용해야 합니다.List<int> list1 = new List<int>();2. Add() 메서드로 정수 값 추가하기
C#에서 이미 선언된 가변 배열(jagged array)에 새로운 값을 추가하는 것은 매우 간단합니다. 별도의 특별한 메서드 없이, 원하는 위치의 인덱스에 접근하여 값을 할당하기만 하면 됩니다.특정 위치에 값 추가하기예를 들어, 다음과 같은 위치에 새로운 요소를 추가하고 싶다고 가정해 보겠습니다.a[3][1]이 경우 아래와 같이 해당 위치에 직접 값을 대입하면 됩니다.a[3][1] = 500;위 코드는 가변 배열에서 네 번째 배열(인덱스 3)의 두 번째 요소(인덱스 1)에 접근하여 새로운 값 500을 할당하는 방식입니다. C#의 배
C#에서 List<string>에 문자열 값을 추가하려면 Add() 메서드를 사용하면 됩니다. Add() 메서드는 리스트의 맨 끝에 새로운 요소를 하나씩 순차적으로 추가하는 역할을 합니다. 이 글에서는 문자열 리스트를 선언하고 값을 추가하는 기본 과정을 단계별로 살펴보겠습니다.1단계: 문자열 리스트 선언하기먼저 C#에서 문자열을 담을 리스트를 선언해야 합니다. List<string> 제네릭 타입을 사용하면 문자열만 저장할 수 있는 리스트를 만들 수 있습니다.List<string> myList = ne
C#에서 readonly 키워드로 선언된 필드는 객체가 생성되는 시점에 단 한 번만 값을 설정할 수 있습니다. 이후에는 프로그램 실행 중에 값을 변경할 수 없으며, 변경을 시도하면 컴파일 오류가 발생합니다.readonly 필드 기본 예제다음 예제는 salary 필드를 읽기 전용으로 선언하고 생성자에서 초기화하는 모습을 보여줍니다.class Employee { readonly int salary; Employee(int salary) {  
C#에서 하나의 리스트(List)에 다른 리스트의 모든 요소를 한 번에 합치고 싶다면 AddRange() 메서드를 사용하면 됩니다. 이 메서드는 컬렉션을 인자로 받아 해당 컬렉션의 모든 요소를 기존 리스트 끝에 순서대로 추가합니다.먼저 첫 번째 리스트를 만들어 보겠습니다.List<string> list1 = new List<string>(); list1.Add(One); list1.Add(Two);다음으로 두 번째 리스트를 생성합니다.List<string> list2 = new List<str
C#에서는 StreamWriter와 StreamReader를 사용하면 문자열 배열을 텍스트 파일에 손쉽게 저장하고 다시 불러올 수 있습니다. 이 글에서는 스트림 배열을 활용해 파일에 데이터를 기록하고 읽어오는 전체 과정을 예제와 함께 단계별로 살펴보겠습니다. 1. 문자열 배열 준비하기 먼저 파일에 저장할 값들을 담은 문자열 배열을 선언합니다. string[] names = new string[] {Jack, Tom}; 2. StreamWriter로 파일에 쓰기 StreamWriter 객체를 생성한 뒤, foreach 문으로 배열
제네릭(Generics)은 어떤 데이터 타입으로도 동작할 수 있는 클래스나 메서드를 작성할 수 있게 해주는 C#의 강력한 기능입니다. 제네릭을 사용하면 클래스나 메서드를 정의할 때 구체적인 데이터 타입 대신 타입 매개변수(type parameter)를 지정합니다. 그러면 컴파일러가 해당 클래스의 생성자나 메서드 호출을 만나는 시점에, 실제 사용되는 특정 데이터 타입에 맞는 코드를 자동으로 생성해 줍니다. 제네릭이 주는 이점 제네릭은 다음과 같은 방식으로 프로그램의 품질을 한층 끌어올려 줍니다. 코드 재사용성, 타입 안전성, 성능
C# 리스트 복사의 기본 개념C#에서 List<T>를 복사하거나 복제하려면 CopyTo() 메서드를 활용할 수 있습니다. 이 메서드는 리스트의 모든 요소를 기존의 1차원 배열로 복사해 줍니다.먼저 복사할 원본 리스트를 생성합니다.List<string> list1 = new List<string>();list1.Add(One);list1.Add(Two);list1.Add(Three);list1.Add(Four);다음으로, 요소를 담을 문자열 배열을 선언한 뒤 CopyTo() 메서드를 호출하여 리스트 내
C# 박싱(Boxing)의 기본 개념박싱(Boxing)은 C#에서 값 형식(value type)을 객체 형식(object type)으로 변환하는 과정을 말합니다. 값 형식 변수에 저장된 데이터를 힙(heap) 메모리에 존재하는 객체로 감싸는 작업이며, 암시적(implicit) 변환이기 때문에 별도의 형변환 코드 없이 자동으로 수행됩니다.다음은 박싱의 가장 간단한 예입니다.int x = 50; object ob = x; // 박싱 발생박싱이 동작하는 방식박싱이 일어나면 스택(stack)에 저장되어 있던 값이 복사되어 힙(heap) 메
C# 프로그래밍 언어란?C#(C 샤프)은 마이크로소프트(Microsoft)가 개발한 현대적이고 범용적인 객체지향 프로그래밍 언어입니다. C, C++, Java의 장점을 계승하면서도 더욱 안전하고 생산적인 개발 환경을 제공하도록 설계되었으며, 현재 데스크톱 애플리케이션부터 웹 서비스, 게임 개발까지 폭넓은 분야에서 활용되고 있습니다.CLI(Common Language Infrastructure)를 위한 언어C#은 CLI(공통 언어 인프라)를 기반으로 설계되었습니다. CLI는 실행 가능한 코드와 런타임 환경으로 구성되어 있으며, 서로
형 변환(Type Conversion)이란 한 데이터 타입을 다른 데이터 타입으로 변환하는 과정을 말합니다. C#에서는 암시적 변환과 명시적 변환이 있으며, 그중 명시적 변환(Explicit Conversion)은 사용자가 직접 변환을 지정하는 방식으로, 미리 정의된 함수와 함께 캐스트 연산자(cast operator)를 반드시 사용해야 합니다. 캐스트 연산자의 기본 개념 캐스트 연산자는 변환하고자 하는 대상 타입을 괄호 ( ) 안에 명시하여 사용합니다. 예를 들어 double 타입의 값을 int 타입으로 변환할 때는 다음과 같이
C#에서는 클래스 멤버(변수, 메서드 등)에 대한 접근 범위를 제어하기 위해 다양한 접근 한정자(Access Modifier)를 제공합니다. 그중 internal과 private은 가장 자주 사용되면서도 초보자에게 혼란을 주는 키워드입니다. 이 글에서는 두 한정자의 차이점을 예제 코드와 함께 명확하게 살펴보겠습니다. internal 접근 한정자란? internal 접근 한정자는 멤버 변수와 멤버 함수를 현재 어셈블리(Assembly) 내부의 다른 함수와 객체에 공개할 수 있도록 허용합니다. 즉, 같은 프로젝트(어셈블리) 안에 정의된
C#에서는 데이터 타입을 다른 타입으로 바꾸는 형식 변환(Type Conversion)이 자주 사용됩니다. 형식 변환은 크게 두 가지 방식으로 나뉩니다.컴파일러가 자동으로 수행하는 암시적 형식 변환(Implicit Type Conversion)개발자가 직접 지정하는 명시적 형식 변환(Explicit Type Conversion)두 방식의 차이점을 예제 코드와 함께 자세히 살펴보겠습니다.1. 암시적 형식 변환 (Implicit Type Conversion)암시적 형식 변환은 C# 컴파일러가 타입 안전성(type-safe)을 보장하는