LINQ(Language Integrated Query)
C# 및 .NET 언어들에서 제공하는 데이터 질의(Query)를 수행하는 기능이다. 이는 SQL과 유사한 구문을 사용하여 데이터를 검색, 필터링, 정렬, 그룹화하는 등의 작업을 할 수 있다. LINQ는 코드의 가독성을 높이고 유지보수를 용이하게 만들며, 데이터베이스, 컬렉션, XML 등과 같은 다양한 데이터 소스에서 작업할 수 있다.
LINQ를 사용하면 데이터를 다루는 코드를 직접 작성하여 반복적인 작업을 수행하는 대신, LINQ 쿼리를 사용하여 간결하고 강력한 방식으로 데이터를 조작할 수 있다.
다음은 LINQ 쿼리 예제로 컬렉션에서 숫자 5보다 큰 값을 찾아내는 역할을 한다.
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = from number in numbers
where number > 5
select number;
Nullable
Nullable은 값 형식(variable type)에 null 값을 할당할 수 있게 해주는 형식이다.
기본적으로 C#에서 값 형식은 null을 허용하지 않지만 Nullable을 사용하면 값 형식 변수에 null을 할당할 수 있다.
Nullable은 물음표(?)를 사용하여 정의된다.
예를 들어 int?, double?, DateTime? 과 같이 값 형식 뒤에 물음표를 붙여서 Nullable 형식을 나타낸다.
Nullable 변수에서 사용될 수 있는 속성
- HasValue: 변수가 null인지 여부를 확인 값이 있으면 true를 반환하고 그렇지 않으면 false를 반환
- Value: 변수에 실제 값이 있는 경우 그 값을 반환 변수가 null인 경우에는 예외를 발생
- GetValueOrDefault(): 변수가 null인 경우 기본 값을 반환 변수에 값이 있는 경우 그 값을 반환하고 null인 경우 지정된 기본값을 반환
- GetValueOrDefault(T defaultValue): 변수가 null인 경우 지정된 기본값을 반환 변수에 값이 있는 경우 그 값을 반환하고 null인 경우 지정된 기본값을 반환
- ValueOrDefault: C# 8.0에서 도입된 새로운 속성으로 Value 속성의 간소화된 버전 변수가 null이면 기본값을 반환하고 그렇지 않으면 실제 값을 반환
// Nullable 형식 변수 선언
int? nullableInt = null;
double? nullableDouble = 3.14;
bool? nullableBool = true;
// 값 할당 및 접근
nullableInt = 10;
int intValue = nullableInt.Value;
// null 값 검사
if (nullableDouble.HasValue)
{
Console.WriteLine("nullableDouble 값: " + nullableDouble.Value);
}
else
{
Console.WriteLine("nullableDouble은 null입니다.");
}
// null 병합 연산자 사용
// nullableInt ?? 0과 같이 사용되며, nullableInt가 null이면 0을 반환합니다.
int nonNullableInt = nullableInt ?? 0;
Console.WriteLine("nonNullableInt 값: " + nonNullableInt);
문자열 빌더 (StringBuilder)
StringBuilder는 C#에서 문자열을 효율적으로 조작하고 처리하기 위한 클래스이다.
StringBuilder는 가변(mutable)하며 문자열을 변경할 때마다 새로운 문자열을 생성하지 않고 기존 문자열을 직접 조작한다.
따라서 문자열을 빈번하게 변경해야 할 경우에는 StringBuilder를 사용하는 것이 성능적으로 유리하다.
StringBuilder 클래스는 다음과 같은 주요 멤버들을 포함하고 있다
- Append(): 문자열을 끝에 추가합니다.
- Insert(): 지정된 위치에 문자열을 삽입합니다.
- Remove(): 지정된 범위의 문자열을 제거합니다.
- Replace(): 지정된 문자열을 다른 문자열로 대체합니다.
- Clear(): StringBuilder의 내용을 모두 지웁니다.
- Length: StringBuilder에 현재 저장된 문자열의 길이를 가져오거나 설정합니다.
- Capacity: StringBuilder의 내부 버퍼 크기를 가져오거나 설정합니다.
using System;
using System.Text;
class Program
{
static void Main(string[] args)
{
// StringBuilder 인스턴스 생성
StringBuilder sb = new StringBuilder();
// Append 메서드를 사용하여 문자열을 끝에 추가합니다.
sb.Append("Hello");
// AppendLine 메서드를 사용하여 새로운 줄과 함께 문자열을 추가합니다.
sb.AppendLine(" World");
// Insert 메서드를 사용하여 지정된 위치에 문자열을 삽입합니다.
sb.Insert(6, "C# ");
// Replace 메서드를 사용하여 지정된 문자열을 다른 문자열로 대체합니다.
sb.Replace("World", "Universe");
// Remove 메서드를 사용하여 지정된 범위의 문자열을 제거합니다.
sb.Remove(0, 5); // 인덱스 0부터 5개의 문자 제거
// StringBuilder의 내용을 출력합니다.
Console.WriteLine("StringBuilder 내용: " + sb.ToString());
// Length 속성을 사용하여 StringBuilder의 길이를 가져옵니다.
Console.WriteLine("StringBuilder 길이: " + sb.Length);
// Capacity 속성을 사용하여 StringBuilder의 내부 버퍼 크기를 가져옵니다.
Console.WriteLine("StringBuilder 내부 버퍼 크기: " + sb.Capacity);
// Clear 메서드를 사용하여 StringBuilder의 내용을 모두 지웁니다.
sb.Clear();
// StringBuilder의 내용이 모두 지워졌는지 확인합니다.
Console.WriteLine("StringBuilder 내용이 모두 지워졌는가? " + (sb.Length == 0 ? "예" : "아니오"));
}
}
'내일배움캠프 > 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 23일차 TIL Unity 게임개발 숙련(Rigidbody - ForceMode,Ray,Canvas Scaler) (0) | 2024.05.24 |
---|---|
내일배움캠프 15일차 TIL 알고리즘 (Big O 표기법, 정렬, 탐색, 최단경로, 그리디 알고리즘, DFS, BFS, Sort, 동적 프로그래밍, 분할 정복) (0) | 2024.05.07 |
내일배움캠프 13일차 TIL 팀프로젝트Text 게임 만들기 (2) | 2024.05.01 |
내일배움캠프 12일차 TIL Git (0) | 2024.04.30 |
내일배움캠프 11일차 TIL C# 고급 기능(예외처리,박싱,언박싱,델리게이트,Func,Action,람다) (0) | 2024.04.29 |