Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#

  1. C#에서 int와 Int32의 차이점은 무엇일까?

    C#에서 int와 Int32란?Int32는 .NET 프레임워크가 제공하는 구조체 타입이며, int는 C# 언어에서 이를 가리키는 별칭(alias)입니다. 즉, 두 이름은 동일한 타입을 표현하는 서로 다른 방식일 뿐입니다.Int32 x = 5;int x = 5;위 두 선언문 모두 32비트 정수를 저장하며, 컴파일되는 코드도 완전히 같기 때문에 실행 시점에는 어떠한 차이도 존재하지 않습니다.유일한 사소한 차이점Int32를 코드에서 그대로 사용하려면 System 네임스페이스를 참조해야 합니다. 반면 int 키워드는 별도의 네임스페이스 지

  2. C# 물음표 두 개(??) 연산자란? 널 병합 연산자 완벽 정리

    C#에서 ??는 널 병합 연산자(Null-Coalescing Operator)입니다. 이 연산자는 왼쪽 피연산자가 null이 아니면 그 값을 그대로 반환하고, null이라면 오른쪽 피연산자를 평가한 결과를 반환합니다. 특히 왼쪽 피연산자가 null이 아닌 경우에는 오른쪽 피연산자 자체를 평가하지 않기 때문에 불필요한 연산을 줄여줍니다.널 병합 연산자가 필요한 이유nullable 타입은 값이 정의되지 않은 상태(null)이거나 해당 타입의 유효한 값을 가질 수 있는 타입입니다. 왼쪽 피연산자가 nullable 타입일 때, ?? 연산자

  3. C#에서 문자열 앞에 붙는 @ 기호란 무엇일까요?

    C#에서 문자열 앞에 붙는 @ 기호는 해당 문자열을 축자 문자열 리터럴(verbatim string literal)로 표시하는 역할을 합니다.C#에서 축자 문자열은 특수 기호인 @를 사용해 생성합니다. 이때 @를 축자 식별자(verbatim identifier)라고 부릅니다. 문자열 앞에 @가 붙고 그 뒤에 큰따옴표가 오면, 컴파일러는 해당 문자열을 축자 문자열로 인식하고 이를 그대로 컴파일합니다.@ 기호의 가장 큰 장점은 문자열 생성자에게 이스케이프 문자와 줄 바꿈을 무시하도록 지시할 수 있다는 점입니다. 덕분에 파일 경로나 정규

  4. C# 액세스 한정자(Access Modifier)의 6가지 종류와 사용법 총정리

    액세스 한정자(Access Modifier)는 클래스 멤버나 클래스 자체에 접근할 수 있는 범위를 지정하는 데 사용되는 키워드입니다. C#에서는 총 여섯 가지의 액세스 한정자를 제공하며, 각각의 접근 가능 범위가 다릅니다.publicprivateprotectedinternalprotected internalprivate protected1. public 한정자public으로 선언된 멤버는 프로젝트 내 어디에서든 제한 없이 접근할 수 있습니다. 가장 개방적인 접근 수준입니다.예제using System; namespace MyAppli

  5. C# 메서드 매개변수 유형 총정리: 값·참조·출력 매개변수

    C#에서 메서드(Method)는 프로그램을 구성하는 코드 블록으로, 동일한 코드를 필요할 때마다 재사용할 수 있게 해줍니다. 이를 통해 불필요한 메모리 낭비를 줄이고 개발 시간을 절약할 수 있으며, 무엇보다 코드의 가독성이 크게 향상됩니다.메서드를 실행하다 보면 작업을 수행하고 완료하기 위해 외부로부터 값을 입력받아야 하는 경우가 있습니다. 이처럼 메서드에 전달되는 입력값을 매개변수(Parameter)라고 합니다.C#에서는 매개변수를 다음 세 가지 방식으로 전달할 수 있습니다.값 매개변수(Value Parameter)참조 매개변수(

  6. C#의 System.String vs System.Text.StringBuilder, 어떤 클래스가 더 나을까?

    핵심 차이점: 가변성(Mutability)두 클래스의 가장 큰 차이는 StringBuilder는 가변(mutable)이라는 점이고, String은 불변(immutable)이라는 점입니다.String — 불변(Immutable)String은 불변 객체입니다. 즉, 문자열 객체를 한 번 생성하면 그 값을 수정할 수 없으며, 문자열을 변경하는 모든 연산은 메모리에 새로운 string 객체를 생성하게 됩니다. 따라서 잦은 문자열 수정 작업에서는 불필요한 객체가 계속 만들어져 성능 저하와 메모리 낭비로 이어질 수 있습니다.StringBuil

  7. C# 인터페이스 멤버에 액세스 한정자를 지정할 수 없는 이유는 무엇일까?

    C# 인터페이스와 액세스 한정자의 관계인터페이스의 메서드는 외부 세계와 맺는 일종의 계약(contract)입니다. 즉, 해당 인터페이스를 구현하는 클래스가 반드시 특정 기능들을 수행하겠다고 약속하는 것이죠.그렇기 때문에 인터페이스 멤버는 항상 public으로 취급됩니다. 인터페이스의 존재 목적 자체가 다른 형식(타입)들이 클래스나 구조체에 접근할 수 있도록 통로를 열어주는 데 있기 때문입니다.다만 인터페이스 자체에는 protected, internal 같은 액세스 한정자를 붙일 수 있습니다. 이 경우 외부 세계 전체가 아닌 외부 세

  8. C#에서 함수로 여러 값 반환하기: ref, out, 배열, 튜플 활용법

    C#에서 메서드는 기본적으로 하나의 반환값만 가질 수 있지만, 몇 가지 기법을 활용하면 여러 값을 동시에 반환하는 것과 같은 효과를 얻을 수 있습니다. 대표적인 방법은 다음과 같습니다. 참조 매개변수(ref) 출력 매개변수(out) 배열 반환 튜플(Tuple) 반환 참조 매개변수(ref) 사용 ref 키워드를 사용하면 변수의 참조를 메서드에 전달할 수 있습니다. 메서드 내부에서 이 변수의 값을 변경하면 호출자 쪽 원본 변수에도 그대로 반영되기 때문에, 사실상 여러 값을 돌려받는 효과를 얻을 수 있습니다. 예제 class Prog

  9. C# 자동 구현 속성(Auto-Property)에 기본값을 지정하는 방법

    C# 5.0 이전 버전에서는 자동 구현 속성(Auto-Property)에 초기값을 할당하려면 생성자(constructor) 내부에서 처리해야 했습니다.생성자는 클래스가 인스턴스화되는 시점에 자동으로 호출되기 때문에, 이때 속성의 값이 설정됩니다.하지만 C# 6.0부터는 일반 변수에 값을 대입하듯이 자동 구현 속성에도 선언과 동시에 기본값을 직접 지정할 수 있는 새로운 문법이 도입되었습니다. 코드가 훨씬 간결해지고 가독성도 크게 향상되었습니다.예제 1: 생성자에서 값 설정하기 (C# 5.0 이전 방식)class Demo{ pu

  10. C#에서 튜플(Tuple)을 언제, 어떻게 사용해야 할까?

    C#에서 튜플(Tuple)은 하나의 메서드에서 여러 개의 값을 반환해야 할 때 ref나 out 매개변수를 사용하지 않고도 손쉽게 처리할 수 있도록 해주는 유용한 자료 구조입니다.또한 튜플을 활용하면 여러 값을 하나의 매개변수로 묶어서 메서드에 전달할 수 있으며, 튜플 안에 튜플을 중첩(nesting)하는 것도 가능합니다.튜플의 주요 사용 사례여러 값 반환: 별도의 클래스나 구조체를 정의하지 않고도 메서드에서 여러 값을 한 번에 반환할 수 있습니다.매개변수 전달: 관련된 여러 값을 하나의 매개변수로 묶어 메서드에 깔끔하게 전달할 수

  11. C# 정적 생성자(Static Constructor)란? 호출 시점과 핵심 특징 완벽 정리

    정적 생성자(static constructor)는 첫 번째 인스턴스가 생성되기 전 또는 정적 멤버가 처음 참조되기 전에 자동으로 호출됩니다.정적 생성자는 정적 데이터를 초기화하거나, 프로그램 전체에서 단 한 번만 수행하면 되는 특정 작업을 처리하는 데 사용됩니다.C#에서는 하나의 클래스에 대해 정적 생성자를 오직 하나만 선언할 수 있습니다.정적 생성자의 주요 특징접근 제한자(access modifier)를 사용할 수 없으며, 매개변수도 가질 수 없습니다.클래스(class)나 구조체(struct)에는 정적 생성자가 하나만 존재할 수

  12. C#에서 같은 클래스 내 다른 생성자를 호출하는 방법 (this와 base 키워드 활용)

    C#에서는 생성자 체이닝(Constructor Chaining)을 통해 하나의 생성자에서 같은 클래스의 다른 생성자나 부모 클래스의 생성자를 호출할 수 있습니다. 이 기능은 코드 중복을 줄이고 초기화 로직을 재사용할 수 있게 해줍니다.같은 클래스 내 생성자 호출 – this 키워드동일한 클래스 내에서 오버로딩된 다른 생성자를 호출하려면 this 키워드를 사용합니다. 생성자 선언부 뒤에 콜론(:)과 함께 this()를 붙이면 됩니다.예제 코드class Demo{ public Demo(){ System.Consol

  13. C# 정적 클래스에서 인스턴스가 하나만 생성되었음을 증명하는 방법

    C#에서 정적(static) 클래스는 프로그램 전체에서 단 하나의 복사본만 존재하며, 인스턴스를 생성할 수 없습니다. 이를 증명하는 가장 간단한 방법은 정적 변수를 활용해 값이 계속 유지·증가하는지 확인하는 것입니다.핵심 개념아래 예제에서는 정적 클래스 Demo를 만들고, 그 안에 정적 변수 count를 선언합니다.정적 변수는 마치 전역 변수(global variable)처럼 동작합니다. 클래스의 인스턴스가 여러 개 생성되더라도 정적 멤버는 모든 인스턴스가 공유하는 단일 복사본이기 때문에, 값이 초기화되지 않고 계속 누적됩니다. 이

  14. C# LINQ의 Select와 SelectMany 차이점 완벽 정리

    C# LINQ에서 Select와 SelectMany는 모두 프로젝션(Projection) 연산자 범주에 속하지만, 결과를 반환하는 방식에서 중요한 차이가 있습니다.Select 연산자란?Select는 소스 시퀀스(source sequence)의 각 요소를 하나의 결과 값으로 변환(투영)합니다. 즉, 입력 요소 하나당 출력 요소 하나가 대응되며, 컬렉션 안에 컬렉션이 있는 구조라면 그대로 중첩된 형태로 유지됩니다.SelectMany 연산자란?SelectMany는 시퀀스의 각 요소를 IEnumerable<T>로 투영한 뒤, 그

  15. C# 클래스에는 소멸자를 몇 개까지 선언할 수 있을까?

    C#에서 소멸자(Destructor)는 클래스의 특별한 메서드로, 클래스 내부에서 객체 또는 인스턴스를 소멸시키는 역할을 담당합니다.한 클래스 안에는 소멸자를 단 하나만 선언할 수 있습니다.C# 소멸자의 주요 특징소멸자는 어떠한 매개변수도 받지 않습니다.소멸자 이름은 물결표(~) 기호로 시작합니다.소멸자(~)는 구조체(Struct)에는 정의할 수 없습니다.소멸자는 직접 호출할 수 없으며, 자동으로 호출됩니다.소멸자는 객체의 기본 클래스에 대해 Finalize를 암묵적으로 호출합니다.소멸자 예제 코드class Demo{ &n

  16. C# 파생 클래스에서 기본 클래스 생성자를 명시적으로 호출하는 방법

    C#에서 base 키워드를 사용하면 자식(파생) 클래스의 생성자에서 부모(기본) 클래스의 생성자를 명시적으로 호출할 수 있습니다.참고로 같은 클래스 내에서 다른 생성자를 호출할 때는 this 키워드를 사용하며, 반대로 부모 클래스에 존재하는 생성자를 호출할 때는 base 키워드를 사용합니다.예제 코드아래 예제는 base 키워드를 사용하여 기본 클래스의 생성자를 호출하는 방법을 보여줍니다. 파생 클래스의 생성자 선언 뒤에 콜론(:)과 함께 base(...)를 붙이면, 파생 클래스 생성자가 실행되기 전에 지정한 인수와 함께 기본 클래스

  17. C#에서 Build, Rebuild, Clean 솔루션 명령의 차이점과 올바른 사용법

    Visual Studio에서 C# 프로젝트를 개발하다 보면 Build(빌드), Rebuild(다시 빌드), Clean(정리) 세 가지 메뉴를 자주 접하게 됩니다. 이름은 비슷해 보이지만 각각의 동작 방식과 용도는 분명히 다릅니다. 이 글에서는 세 가지 명령의 차이를 정리하고, 어떤 상황에서 무엇을 사용하는 것이 좋은지 알아보겠습니다. 1. Build Solution (솔루션 빌드) Build는 증분 빌드(incremental build) 방식으로 동작합니다. 즉, 마지막 빌드 이후에 변경된 코드 파일만 컴파일하고, 변경되지 않은

  18. C# LINQ의 Union, Intersect, Except 집합 연산자 완벽 가이드

    C#의 LINQ에서는 컬렉션을 집합처럼 다룰 수 있도록 Union(합집합), Intersect(교집합), Except(차집합) 세 가지 집합 연산자를 제공합니다. 이 연산자들을 활용하면 여러 컬렉션 간의 관계를 손쉽게 처리할 수 있습니다.Union — 합집합Union은 두 개 이상의 컬렉션을 하나로 합치되, 중복된 요소는 제거하고 고유한(unique) 요소만 포함하는 결과 컬렉션을 반환합니다.Intersect — 교집합Intersect는 두 입력 시퀀스에 모두 공통으로 존재하는 요소들만 반환합니다. 즉, 양쪽 컬렉션에 동시에 있는

  19. C# 명시적 인터페이스 구현이란? 개념과 사용 시점 완벽 정리

    명시적 인터페이스 구현(Explicit Interface Implementation)이란? C#에서 하나의 클래스가 두 개의 인터페이스를 구현하는데, 두 인터페이스에 동일한 시그니처(메서드 이름과 매개변수가 같은 멤버)가 포함되어 있다면 어떻게 될까요? 일반적인 방식으로 해당 멤버를 구현하면, 두 인터페이스가 모두 이 단일 구현을 공유하게 됩니다. 이때 명시적 인터페이스 구현을 사용하면 문제를 해결할 수 있습니다. 명시적으로 구현된 멤버는 오직 해당 인터페이스 타입을 통해서만 호출할 수 있으며, 특정 인터페이스 전용으로 동작합니다.

  20. C#에서 Finalize와 Dispose의 차이점 완벽 정리

    Finalize란 무엇인가?Finalize() 메서드는 가비지 컬렉터(Garbage Collector)가 수집 대상으로 판단한 객체를 실제로 회수하기 직전에 호출하는 종료자(Finalizer)입니다. 가비지 컬렉터는 더 이상 참조되지 않는 객체의 메모리 해제를 담당하며, 해당 객체에 대한 유효한 참조가 메모리에서 사라진 이후 적절한 시점에 이 메서드를 호출합니다.다만 .NET 프레임워크는 이 호출 시점을 보장하지 않습니다. 개발자가 GC.Collect() 등으로 가비지 컬렉션을 강제로 유도할 수는 있지만, 이는 프로그램 전체 성능에

Total 2668 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:121/134  20-컴퓨터/Page Goto:1 115 116 117 118 119 120 121 122 123 124 125 126 127