CSharp 37 LINQ (Language Integrated Query) LINQ(Language Integrated Query)는 C#과 .NET에서 데이터 소스를 쿼리할 수 있게 해주는 통합된 쿼리 문법입니다. SQL과 유사한 문법을 사용해 데이터베이스뿐만 아니라 컬렉션, XML, 데이터셋 등 다양한 데이터 소스를 일관된 방식으로 쿼리할 수 있습니다. LINQ는 기본적으로 IEnumerable<T> 또는 ... 2024.09.03 풀스택 개발, CSharp yield 키워드 yield라는 단어를 찾아보면 “산출/생산하다”, “양도하다” 등의 뜻을 가지고 있습니다. ‘yield’: 네이버 영어사전 프로그래밍에서 yield 키워드가 사용되는 방식은 이 단어의 “생산하다” 또는 “산출하다”는 의미와 가장 관련이 깊습니다. 이 키워드를 사용할 때, 메서드는 값을 “산출”하거나 “생산”하여 호출자에게 반환합니다. C... 2024.08.25 풀스택 개발, CSharp C# Task와 Task<T> C#의 Task는 비동기 프로그래밍의 기본 단위로, 작업 단위를 표현하고 관리하는데 사용됩니다. Task와 Task<T> Task: 반환 값이 없는 비동기 작업을 나타냅니다. Task<T>: 반환 값이 있는 비동기 작업을 나타냅니다. 여기서 T는 반환 값의 타입을 나타냅니다. Task의 생성과 사용 1. Task... 2024.07.24 풀스택 개발, CSharp async와 await async와 await 키워드는 비동기 프로그래밍을 쉽게 할 수 있게 도와주는 도구입니다. 이 두 키워드는 .NET Framework 4.5에서 도입되었으며, 주로 I/O 바운드 작업 (예: 파일 읽기/쓰기, 네트워크 요청)이나 긴 시간이 걸리는 작업 등을 수행할 때 유용합니다. 동기화(Synchronization)의 의미 동기화는 멀티스레딩 환... 2024.07.23 풀스택 개발, CSharp 확장 메서드 (Extension Method) 확장 메서드는 이미 정의된 클래스에 새로운 메서드를 추가할 수 있게 해주는 기능입니다. 이 기능은 기존 클래스의 내부 코드를 수정하지 않고 마치 새로운 인스턴스 메서드를 정의하는 것처럼 추가할 수 있습니다. 일반적으로 기존 클래스의 메서드를 확장하는 방법으로는 상속이 있는데, sealed로 봉인된 클래스는 상속 받을 수 없고, 새로운 기능으로 확장... 2024.06.25 풀스택 개발, CSharp Attribute(어트리뷰트)와 AttributeTargets 어트리뷰트(Attribute)는 코드 요소에 대한 메타데이터를 추가하는 방법입니다. 어트리뷰트는 클래스, 메서드, 프로퍼티, 필드, 이벤트 등 다양한 코드 요소에 적용될 수 있으며, 주로 런타임 시 또는 컴파일 타임에 특정 동작을 변경하거나 추가 정보를 제공하기 위해 사용됩니다. 이 추가 정보는 런타임에 리플렉션을 통해 접근할 수 있습니다. 어트... 2024.06.24 풀스택 개발, CSharp 리플렉션 (Reflection) 리플렉션(Reflection)이라는 용어는 “반사”, “(거울에 반사되어 비친) 상”, “반영”, “묘사(설명)” 등의 뜻이 있습니다. 프로그래밍에서 리플렉션은 프로그램이 런타임에 자신을 반사 혹은 묘사하여 자신의 구조와 동작에 대한 정보를 얻고, 이를 바탕으로 동적으로 동작을 변경할 수 있는 기능을 의미합니다. 즉, 리플렉션(Reflection)... 2024.06.24 풀스택 개발, CSharp C#의 Predicate Predicate 델리게이트는 Func<>나 Action<>과 같은 미리 정의된 델리게이트 형식입니다. Predicate<T> 델리게이트는 특정 조건에 맞는지를 검사하는 메서드를 캡슐화하는 데 사용되는 델리게이트로, 하나의 매개변수를 갖고 리턴 값이 bool인 델리게이트입니다. public delegate bool ... 2024.06.23 풀스택 개발, CSharp C#의 람다(Lambda)와 캡처(Capture), 클로저(closure) 람다(lambda)는 일반적으로 익명 함수(anonymous function) 혹은 이름이 없는 작은 함수로, 다른 함수 내에서 인라인으로 정의되거나, 간단한 표현식을 실행하기 위해 사용됩니다. 일반적인 람다 함수의 특징 익명성: 람다 함수는 굳이 이름을 붙이지 않고, 즉석에서 정의하고 사용할 수 있습니다. 간결함: 람다 함수는 간단한 표... 2024.06.23 풀스택 개발, CSharp [delegate] 03. 익명 델리게이트와 Func, Action 익명 델리게이트(Anonymous Delegate) 델리게이트에 메서드 참조를 저장하기 위해 함수의 식별자(이름)을 제공하지만, 가끔씩은 특정 함수 내에서만 사용되어 함수를 따로 만들어 둘 필요가 없을 때도 있습니다. (이름이 필요 없는 일회용 함수를 사용하고 싶을 때) 이럴 때, 이름이 명시되지 않은 델리게이트인 익명 델리게이트를 사용할 수 있습... 2024.06.22 풀스택 개발, CSharp [delegate] 02. event와 EventArgs (EventHandler) event는 delegate의 사용 패턴을 좀 더 일반화 해서 제공하는 예약어입니다. 예를 들어, 콜백 패턴 혹은 이벤트 패턴이나 옵저버 패턴 등을 구현할 때, 구현하기 쉽도록 다양한 기능을 제공합니다. 제약 조건과 제공 기능 event는 다음과 같은 제약 조건과 기능을 제공합니다. 캡슐화 이벤트를 통해 구독자와 발생자... 2024.06.21 풀스택 개발, CSharp [delegate] 01.델리게이트의 정의와 정체, 체이닝, 사용 목적 델리게이트(Delegate)는 C#에서 중요한 개념 중 하나로, 메서드 참조를 저장하고 호출할 수 있는 형식을 제공하는 기능입니다. C++의 함수 포인터와 비슷한 개념인데, 좀 더 많은 기능을 제공합니다. 델리게이트를 사용하면 메서드를 매개변수로 전달하거나, 런타임에 호출할 메서드를 동적으로 결정할 수 있습니다. 델리게이트 사용 델리게이트는 d... 2024.06.20 풀스택 개발, CSharp 인터페이스(Interface)와 추상 클래스(Abstract Class) 인터페이스(Interface) 인터페이스는 객체 지향 프로그래밍에서 중요한 개념으로, 메서드 시그니처만을 정의하고, 구현은 제공하지 않는 일종의 청사진입니다. 인터페이스는 주로 다형성을 구현하고, 클래스 간의 결합도를 낮추는데 목적이 있습니다. 그로 인해 서로 다른 클래스들이 동일한 인터페이스를 구현함으로써 상호 작용 할 수 있게 합니다. 즉, ... 2024.06.19 풀스택 개발, CSharp C#의 String과 StringBuilder C#에서 string과 StringBuilder는 문자열을 처리하기 위한 두 가지 주요 클래스입니다. string 클래스는 불변(immutable) 객체이고, StringBuilder 클래스는 가변(mutable) 객체입니다. string 클래스 string 객체는 한 번 만들면 변경할 수 없습니다. 이것을 불변(immutable) 객체라고 합니... 2024.06.18 풀스택 개발, CSharp C# 제네릭 컬렉션과 비제네릭 컬렉션 정리 제네릭 컬렉션 컬렉션 이름 설명 버전 List<T> 요소를 순서대로 저장하는 동적 배열 .NET 2.0 LinkedList<T> 각 요소가 컬렉션 내의 다음 요소와 이전 요소를 가리... 2024.06.17 풀스택 개발, CSharp C# Generics(제네릭)과 제약 조건 C# 제네릭(Generic)은 타입 안전성과 코드 재사용성을 극대화하기 위해 도입된 기능입니다. 제네릭을 알아보기 전, 기존 C# 1.0에서는 기본 형식(Primitive types)으로 컬렉션 객체를 사용했습니다. 예를 들어, ArrayList의 경우에는 모든 타입의 컬렉션을 받을 수 있도록 object타입을 사용합니다. 따라서, 모든 기본 타... 2024.06.16 풀스택 개발, CSharp C#의 virtual과 override, 그리고 sealed C#의 virtual과 override 키워드는 상속과 다형성(polymorphism)을 구현하는데 핵심적인 역할을 합니다. 이 두 키워드를 사용하면 기본 클래스의 메서드를 파생 클래스에서 재정의할 수 있으며, 이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다. 다형성(Polymorphism) 다형성은 같은 인터페이스를 통해 서로 다른 데이... 2024.06.10 풀스택 개발, CSharp Nullable과 null 병합 연산자, null 조건 연산자 null이란, “값이 없는” 혹은 “어떤 객체도 참조하지 않은” 참조형 변수를 말합니다. C#에서 null을 가질 수 있는 타입은 참조 타입입니다. 값 타입은 null일 수 없습니다. 다시 말해, C#에서 null은 “어떤 객체도 참조하지 않은 참조형 변수의 디폴트 값”이라고 할 수 있습니다. 값 형식에서의 디폴트 값(초기화 하지 않을 때 가지는... 2024.06.08 풀스택 개발, CSharp as, is - 타입 변환과 타입 확인 키워드 C#에서 as와 is 연산자는 객체의 타입을 안전하게 처리하기 위해 중요한 역할을 합니다. 이러한 연산자들은 형 변환과 타입 확인 과정을 간소화하여 코드의 안정성과 가독성을 향상시키는 데 도움을 줍니다. is 키워드 is 키워드는 객체가 특정 타입인지 확인하는 데 사용됩니다. 이 연산자는 객체의 타입이 지정된 타입과 호환되는지 검사하고, 그 결... 2024.06.06 풀스택 개발, CSharp C#의 Static과 this 키워드 C#에서 static 키워드는 특정 클래스, 메서드, 필드, 속성, 생성자, 또는 다른 멤버가 클래스 수준에서 정의되도록 하기 위해 사용됩니다. 즉, static 멤버가 클래스의 특정 인스턴스에 속하지 않으며, 클래스 자체에 속하게 하여 인스턴스 없이 사용 가능하도록 합니다. Static Class (정적 클래스) Static Class는 클래스... 2024.06.04 풀스택 개발, CSharp C#의 접근 제한자와 어셈블리(Assembly) 접근 지정자 설명 public 모든 코드에서 접근 가능 protected 동일 클래스 및 파생 클래스에서 접근 가능 private 동일 클래스 내에서만 접근 가능 ... 2024.06.03 풀스택 개발, CSharp 클래스(Class), 프로퍼티와 백킹 필드(backing field), base와 this 클래스(class)는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나로, 데이터와 해당 데이터를 처리하는 메서드(기능)를 하나로 묶는 방법입니다. 클래스는 데이터(필드)와 해당 데이터에 작용하는 메서드(함수)의 집합을 정의합니다. C#은 객체 지향 프로그래밍 패러다임을 강력하게 따르는 프로그래... 2024.06.02 풀스택 개발, CSharp object 타입과 var 키워드와의 비교 C#은 강력한 정적 타입 언어로, 변수의 타입을 엄격하게 정의합니다. 그러나 코드의 유연성과 간결성을 높이기 위해 object와 var 키워드를 제공합니다. 이 두 키워드는 얼핏 보면 다양한 타입을 추상적으로 사용한다는 점에서 비슷해 보일 수 있으나, 실제로는 서로 다른 목적과 사용 방법을 가지고 있습니다. object 키워드 object는 C#... 2024.06.01 풀스택 개발, CSharp C#의 박싱과 언박싱(Boxing and Unboxing) Boxing과 Unboxing이란? Boxing과 Unboxing은 C#에서 값 타입(Value Type)과 참조 타입(Reference Type) 간의 변환에 대한 개념입니다. 이 변환은 유연성과 타입 안정성을 제공하면서도 성능에 영향을 미칠 수 있습니다 간략하게, 박싱(Boxing) 이란, 값 타입(Value Type)을 참조 타입(Refer... 2024.05.30 풀스택 개발, CSharp C#의 값 타입과 참조 타입 값 타입 (Value Types) 값 타입은 데이터를 직접 저장합니다. 일반적으로 이는 스택(Stack) 메모리 영역에 저장되며, 주로 크기가 작고 수명이 짧은 데이터에 적합합니다. 다만, 값 타입이 참조 타입의 필드로 사용될 때는 해당 객체와 함께 힙 메모리에 저장될 수도 있습니다. 기본 데이터 타입: int, float, double, ... 2024.05.29 풀스택 개발, CSharp C#에서의 Call By Value와 Call By Reference C# 프로그래밍 언어에서는 메서드 호출 시 인자를 전달하는 두 가지 주요 방식인 Call By Value와 Call By Reference가 있습니다. 이 두 가지 방식은 메서드를 호출할 때, 값을 복사해서 전달하느냐, 원본 데이터를 넘기느냐로 나뉠 수 있습니다. Call By Value Call By Value 방식은 인자가 메서드에 값으로 전... 2024.05.28 풀스택 개발, CSharp C#의 형식 지정자 C#의 형식 지정자는 문자열 형식 지정 시 형식화된 출력 결과를 만들기 위해 사용됩니다. 형식 지정자는 주로 string.Format 메서드, 보간 문자열 (interpolated strings), Console.WriteLine, ToString 메서드 등에서 사용됩니다. 기본 형식 지정자 숫자 형식 지정자 형식 지... 2024.05.26 풀스택 개발, CSharp C#에서의 구조체(struct) 구조체(Struct)란, 연관된 여러 데이터를 하나의 단위로 묶어 처리하기 위해 사용되는 구조화 된 데이터입니다. C#에서의 구조체는 값 타입(value type)이며, 기본적으로 데이터 그룹을 관리하기 위해 사용됩니다. 구조체 정의 및 선언 구조체는 struct 키워드를 사용하여 정의합니다. 이때, 각 멤버의 기본 접근 지정자는 interna... 2024.05.25 풀스택 개발, CSharp C#에서 숫자와 문자열 변환 문자열을 숫자로 변환 Parse()와 TryParse() 사용 문자열을 숫자 타입으로 변환하는 방법 중 하나는 해당 자료형에 존재하는 변환 메서드(Parse(), TryParse())를 사용하는 방법입니다. Parse() 다음 예는 정수형 문자를 Parse()를 사용해서 int로 바꾸는 예제입니다. 만약, 변환이 실패하면 예외를 던집니다. ... 2024.05.24 풀스택 개발, CSharp var - 정적 타이핑 타입 추론 키워드 var란 C#의 var 키워드는 정적 타이핑(Static Typing) 타입 추론(Type Inference) 키워드입니다. 정적 타이핑이란, 컴파일 시점에 변수의 타입이 정해지는 방식을 의미합니다. C#은 정적 타이핑 언어로, 모든 변수는 컴파일 시점에 명확한 타입을 가집니다. var 키워드는 컴파일러가 변수의 타입을 초기화 식을 통해 ... 2024.05.22 풀스택 개발, CSharp 선택적 매개변수(Optional Parameter) C#에서 선택적 매개변수(optional parameter)는 메서드, 생성자, 인덱서, 대리자 등에서 특정 매개변수에 기본값을 제공하여 호출자가 해당 매개변수를 생략할 수 있게 하는 기능입니다. 이 기능은 코드의 유연성을 증가시키고, 메서드 오버로드를 줄여 코드의 간결성과 가독성을 향상시킵니다. 선언 방법 기본값 지정 선택적 매개변수를 사용하... 2024.05.21 풀스택 개발, CSharp C#의 out 키워드 간단 정리 C#의 out 키워드는 메서드에서 사용되는 매개변수 키워드 중 하나로, 메서드가 호출될 때 해당 매개변수가 초기화되지 않아도 되고, 메서드 내부에서 해당 매개변수에 값을 할당한 후 호출한 곳에서 그 값을 사용할 수 있게 합니다. 주로 메서드가 여러 값을 반환해야 하는 경우 사용됩니다. 특징 초기화 필요 없음 out 매개변... 2024.05.20 풀스택 개발, CSharp C#의 ref 키워드 간단 정리 C#의 ref 키워드는 메서드에 매개변수를 참조(Reference)로 전달 할 때 사용됩니다. 이는 값이 아닌 변수의 참조를 전달하여 메서드 내에서 해당 변수의 값을 직접 변경할 수 있게 합니다. ref 키워드를 사용하면 메서드가 호출되는 동안 원본 변수의 값이 변경될 수 있습니다. 이는 일반적인 값 전달(Value) 방식과 구별됩니다. ref ... 2024.05.20 풀스택 개발, CSharp 열거형 (Enum) - 의미있는 상수 C#의 열거형(enum)은 관련된 이름 있는 상수들을 하나의 묶음으로 관리하기 위해 사용되는 특별한 값 형식입니다. 열거형을 사용하면 코드의 가독성을 높이고, 특정 값들이 가지는 의미를 명확하게 전달할 수 있습니다. 열거형의 정의 및 특징 열거형 정의: 열거형은 여러 상수 값을 묶어 하나의 타입으로 정의하는 것을 의미합니다. 열거형의 각 상... 2024.05.18 풀스택 개발, CSharp C#의 연산자와 연산자 우선순위 C#에는 다양한 연산자가 존재합니다. 그 중 대표적으로는, 산술 연산자, 비교 연산자, 논리 연산자, 비트 연산자, 대입 연산자 등이 있습니다. 산술 연산자 (Arithmetic Operators) 연산자 설명 + 덧셈 - ... 2024.05.17 풀스택 개발, CSharp C#의 자료형과 'decimal' 자료형과 크기 먼저, C++을 공부하고 오신 분이라면 자료형의 크기가 운영체제별로 달라질 수 있는지 궁금해하실 수 있습니다. C#에서는 기본 자료형 크기가 운영체제에 상관없이 일관되게 정해져 있습니다. 이는 C#이 .NET 기반에서 JIT 컴파일 혹은 런타임 환경에서 동작하며, 이로 인해 자료형 크기가 표준화되어 있기 때문입니다. C#의 JIT... 2024.05.15 풀스택 개발, CSharp C#의 JIT 컴파일이란? C#이나 JAVA와 같은 언어들은 JIT(Just-In-Time) 컴파일을 사용합니다. .NET에서의 C#은 전통적인 컴파일 언어와 인터프리터 언어의 특성을 혼합한 하이브리드 언어로 이해할 수 있습니다. 컴파일 언어적 특성 IL 컴파일: C# 코드는 먼저 C# 컴파일러에 의해 중간 언어(Intermediate Languag... 2023.08.11 풀스택 개발, CSharp