C#에서 생성자(Constructor)는 객체가 생성되는 순간 자동으로 호출되는 특수한 메서드입니다. 생성자는 클래스와 동일한 이름을 가지며, 반환 타입을 명시하지 않는다는 특징이 있습니다.생성자의 기본 구조다음은 Department 클래스의 생성자를 정의한 예입니다. 클래스 이름과 똑같은 이름의 메서드가 바로 생성자입니다.public class Department { public Department() { Console.WriteLine(기본 생성자 호출!); } }기본 생성자(Default Const
C#에서 생성자(Constructor)에도 매개변수를 추가할 수 있습니다. 이렇게 매개변수를 받는 생성자를 매개변수화된 생성자(Parameterized Constructor)라고 부릅니다.이 기법을 활용하면 객체가 생성되는 순간 원하는 초기값을 바로 할당할 수 있어, 별도의 설정 과정 없이 객체를 완전한 상태로 만들 수 있다는 장점이 있습니다.매개변수화된 생성자의 기본 구조먼저 간단한 클래스 정의부터 살펴보겠습니다.// 클래스 선언 class Demo다음은 rank라는 매개변수 하나를 받는 매개변수화된 생성자의 예입니다.public
정적 다형성(Static Polymorphism)에서는 함수 호출에 대한 응답이 컴파일 시점에 결정됩니다. 반면 동적 다형성(Dynamic Polymorphism)은 런타임 시점에 결정되는데, 이것이 바로 우리가 말하는 늦은 바인딩(Late Binding), 즉 지연 바인딩입니다.동적 다형성은 추상 클래스와 가상 함수(virtual function)를 통해 구현됩니다. 어떤 메서드가 호출될지 컴파일러가 미리 확정하지 않고 프로그램 실행 중에 실제 객체의 타입을 기준으로 결정하기 때문에, 코드가 더욱 유연하고 확장 가능해집니다.동적
C# 4.0 튜플(Tuple)이란?튜플(Tuple)은 서로 다른 데이터 타입의 요소들을 하나로 묶어 저장하는 순차적 자료 구조입니다. C# 4.0에서 처음 도입되었으며, 메서드에서 여러 값을 한 번에 반환하거나 서로 연관된 데이터를 임시로 그룹화해 전달할 때 매우 유용합니다.튜플의 가장 큰 장점은 각 요소의 타입을 일일이 새로운 클래스나 구조체로 정의하지 않고도 Tuple<T> 인스턴스를 바로 만들 수 있다는 점입니다.튜플의 주요 특징서로 다른 타입 조합: int, string 등 다양한 타입을 하나의 튜플에 담을 수 있
C# 멀티스레딩이란 무엇인가?멀티스레딩(Multithreading)은 하나의 프로세스 내에서 여러 작업을 동시에 실행할 수 있게 해주는 프로그래밍 기법입니다. C#에서는 System.Threading.Thread 클래스를 사용하여 스레드를 생성하고 제어할 수 있습니다. 이 클래스를 통해 멀티스레드 애플리케이션에서 개별 스레드를 만들고 접근하는 작업이 가능합니다.메인 스레드(Main Thread)와 자식 스레드프로세스에서 가장 먼저 실행되는 스레드를 메인 스레드라고 부릅니다. C# 프로그램이 실행되기 시작하면 메인 스레드가 자동으로
IStructuralEquatable 인터페이스는 두 개체가 구조적 동등성(Structural Equality)을 갖는지 비교할 수 있도록 지원하는 메서드를 정의합니다. 여기서 구조적 동등성이란, 참조가 아닌 값 자체가 동일할 때 두 개체를 동등하다고 판단하는 것을 의미합니다.IStructuralEquatable의 주요 메서드이 인터페이스는 다음 두 가지 메서드를 포함하고 있습니다.번호메서드 및 설명1Equals(Object, IEqualityComparer)현재 인스턴스와 지정된 개체가 구조적으로 동등한지 여부를 판단합니다.2Ge
C# DateTime 시간 함수란?C#의 DateTime 구조체는 날짜와 시간을 함께 다루는 강력한 도구입니다. 하루 중 지나간 시간(시, 분 등)을 계산하는 것처럼 날짜와 시간 모두에 대한 다양한 메서드와 속성을 제공합니다.이 글에서는 그중에서도 시간(time) 관련 함수에 초점을 맞춰 살펴보겠습니다.모든 함수의 전체 목록은 MSDN(Microsoft Developer Network) 공식 문서를 참고하시기 바랍니다.C# 주요 시간 관련 메서드번호메서드 & 속성1AddDays(Double)현재 인스턴스 값에 지정된 일수를
C#에서 숫자의 절댓값(absolute value)을 구하려면 Math.Abs 메서드를 사용하면 됩니다. Math.Abs는 System 네임스페이스에 포함된 정적 메서드로, int, long, double, float, decimal 등 다양한 숫자 형식을 지원하며, 음수를 양수로 변환해 반환합니다.Math.Abs 기본 사용법먼저 두 개의 정수 변수를 선언합니다.int val1 = 77; int val2 = -88;이제 새로운 변수 두 개를 선언하고, 위에서 선언한 값들의 절댓값을 Math.Abs 메서드로 구해 저장합니다.int a
C#에서 두 배열의 교집합(공통 요소)을 구하는 가장 간단한 방법은 LINQ의 Intersect 메서드를 사용하는 것입니다. 이 메서드는 System.Linq 네임스페이스에 정의된 확장 메서드로, 두 컬렉션에서 공통으로 포함된 요소들만 추출하여 반환합니다.Intersect 메서드란?Intersect는 집합 연산 중 하나로, 두 시퀀스를 비교해 양쪽 모두에 존재하는 요소만 골라냅니다. 반환되는 결과에는 다음과 같은 특징이 있습니다.두 배열에 공통으로 있는 요소만 반환됩니다.결과에는 중복 요소가 자동으로 제거됩니다.기본적으로 해당 타입
C# Regex 클래스란 무엇인가?Regex 클래스는 C#에서 정규 표현식(Regular Expression)을 나타내는 데 사용되는 클래스입니다. 정규 표현식이란 입력 텍스트와의 일치 여부를 검사할 수 있는 특정 패턴을 의미하며, 문자열 검색·치환·분할 작업에서 매우 강력한 도구로 활용됩니다.Regex 클래스는 System.Text.RegularExpressions 네임스페이스에 포함되어 있으며, 다양한 메서드를 통해 문자열 처리 작업을 손쉽게 수행할 수 있습니다.Regex 클래스의 주요 메서드Regex 클래스에서 자주 사용되는
C#에서 형식 변환(type conversion)과 형식 캐스팅(type casting)은 사실상 같은 개념을 가리킵니다. 두 용어 모두 하나의 데이터 타입을 다른 데이터 타입으로 바꾸는 과정을 의미하며, C#에서는 이러한 변환이 크게 두 가지 방식으로 나뉩니다.1. 암시적 형식 변환 (Implicit Type Conversion)암시적 변환은 C# 컴파일러가 타입 안전성(type-safe)을 보장하는 경우에 자동으로 수행하는 변환입니다. 데이터 손실의 위험이 없기 때문에 개발자가 별도의 코드를 작성할 필요가 없습니다.작은 크기의
직렬화(Serialization)는 객체(Object)를 바이트 스트림(Byte Stream) 형태로 변환하여, 스트림에 기록할 수 있는 상태로 만드는 과정입니다. 이렇게 변환된 데이터는 메모리, 파일, 데이터베이스 등에 저장할 수 있으며, 필요할 때 역직렬화(Deserialization)를 통해 원래의 객체로 복원할 수 있습니다.C# .NET에서 직렬화는 크게 다음 두 가지 방식으로 수행할 수 있습니다.1. 이진 직렬화 (Binary Serialization)객체의 모든 멤버를 직렬화하는 방식입니다. 읽기 전용(read-only)
C# ArrayList 클래스란 무엇인가?ArrayList 클래스는 각 요소를 개별적으로 인덱싱할 수 있는 객체의 순차적 컬렉션을 나타냅니다. 크기가 고정된 일반 배열과 달리 동적으로 요소를 추가하거나 제거할 수 있어, 실질적으로 배열의 유연한 대안으로 활용됩니다.ArrayList 클래스의 주요 메서드ArrayList 클래스에서 자주 사용되는 핵심 메서드를 아래 표로 정리했습니다.번호메서드 및 설명1public virtual int Add(object value);ArrayList의 맨 끝에 객체를 추가하고, 해당 객체가 위치한 인
C# 삼각 함수란? C#에서는 ACos, ASin, Sin, Cos, Tan 등 다양한 삼각 함수를 제공합니다. 이러한 함수들은 System 네임스페이스의 Math 클래스에 포함되어 있어 별도의 패키지 설치 없이 바로 사용할 수 있습니다. 삼각 함수는 게임 개발, 그래픽 처리, 물리 시뮬레이션 등 각도 관련 수학 계산이 필요한 다양한 분야에서 활용됩니다. Math 클래스의 주요 삼각 함수는 다음과 같습니다. Sin(x) – 사인(sine) 값 반환 Cos(x) – 코사인(cosine) 값 반환 Tan(x) – 탄젠트(tangent
C# FileNotFoundException이란?FileNotFoundException은 프로그램이 존재하지 않는 파일에 접근하려고 시도할 때 발생하는 예외입니다. 파일 입출력 작업을 수행하기 전에 해당 파일이 실제로 존재하는지 확인하지 않으면 이 예외가 런타임 중에 발생하여 프로그램이 비정상적으로 종료될 수 있습니다.FileNotFoundException이 발생하는 상황예를 들어, StreamReader에 실제로 존재하지 않는 new.txt라는 파일을 지정했다고 가정해 보겠습니다. StreamReader를 사용해 이 파일을 읽으려
System.OutOfMemoryException은 CLR(Common Language Runtime)이 프로그램에 필요한 충분한 메모리를 할당하지 못할 때 발생하는 예외입니다. 이 예외는 System.SystemException 클래스를 상속받습니다. 아래에서는 StringBuilder의 용량(Capacity) 제한으로 인해 이 예외가 발생하는 상황을 만들고, 이를 try-catch 블록으로 안전하게 처리하는 방법을 살펴보겠습니다. 1. 문자열 변수 설정 먼저 두 개의 문자열을 준비합니다. string StudentName = T
IndexOutOfRangeException은 배열의 경계를 벗어난 인덱스로 요소에 접근하려고 할 때 발생하는 예외입니다. C#에서 배열은 0부터 시작하며, 선언된 크기를 초과하는 인덱스에 접근하면 런타임 오류가 발생합니다. IndexOutOfRangeException이 발생하는 이유 예를 들어 다음과 같이 요소가 5개인 배열이 있다고 가정해 보겠습니다. int[] n = new int[5] {66, 33, 56, 23, 81}; 이 배열의 유효한 인덱스는 0부터 4까지입니다. 그런데 반복문에서 인덱스 5 이상의 값으로 접근하려고
C#의 배열은 생성 시 크기가 고정되기 때문에 요소를 직접 제거하는 메서드를 제공하지 않습니다. 따라서 배열에서 요소를 삭제하려면 삭제하고자 하는 위치부터 뒤에 있는 요소들을 한 칸씩 앞으로 이동(shift)시키는 방식을 사용해야 합니다.배열 요소 삭제의 기본 원리먼저 5개의 요소를 가진 배열이 있다고 가정해 보겠습니다.int[] arr = new int[5] {35, 50, 55, 77, 98};여기서 2번째 위치의 요소를 삭제하고 싶다면 변수 pos = 2로 설정한 뒤, 해당 위치 이후의 모든 요소를 앞으로 한 칸씩 이동시키면
C# for 루프에서 break 문 사용하기break 문은 루프를 즉시 종료시키는 역할을 합니다. for 루프 안에서 사용하면, 사용자로부터 값을 입력받다가 음수가 입력되는 순간 반복을 중단하고 결과를 출력한 뒤 루프를 빠져나갈 수 있습니다.아래 예제 코드를 살펴보겠습니다. 변수 val이 0보다 작으면 break가 실행되어 루프 전체가 종료됩니다.for(i = 1; i <= 10; ++i) { myVal = Console.Read(); val =
C# 메서드 오버로드의 두 가지 방식C#에서는 다음과 같은 방법으로 메서드를 오버로드(Overload)할 수 있습니다.매개변수의 데이터 타입이 서로 다른 경우매개변수의 개수가 서로 다른 경우메서드 오버로딩은 같은 이름의 메서드를 여러 개 정의하되, 컴파일러가 매개변수의 타입이나 개수를 기준으로 호출 대상을 구분하는 기능입니다. 단, 반환 타입만 다른 경우에는 오버로드로 인정되지 않습니다.1. 매개변수의 데이터 타입이 다른 경우아래 예제는 동일한 이름의 print 메서드를 사용하지만, 매개변수의 데이터 타입(int, double, s