C# 문법 4주차 - 고급 자료형 및 기능

Amberjack·2024년 1월 2일
0

C# 문법

목록 보기
32/44

⚽ Nullable 형

▪️ null

  • null은 "아무것도 없음"을 의미한다.
  • 참조형 변수가 어떠한 객체를 참조하지 않을 때 사용한다.

🤔 Nullable?

  • Nullable은 C#에서 null 값을 가질 수 있는 값형에 대한 특별한 형식.
  • 기본적으로 값형은 null을 허용하지 않으나, 값형 변수에 null 값을 지정할 수 있는 방법을 제공하여 값형이나 구조체를 사용하는 프로그램에서 null 상태인지 확인할 수 있도록 해준다.
  • 형식은 ? 연산자를 사용하여 선언된다.
    ex) int?는 int형식에 null을 할당할 수 있는 Nullable<int> 형식을 나타낸다.

ex) 정수형 변수를 사용한다고 가정해보자. 이 정수형 변수의 음수값, 0, 양수값 모두 사용한다고 했을 때, 해당 변수에 값이 대입이 되었는지, 되었다면 어떤 값인지 확인을 해야할 필요가 있다고 하자.

이 때, 값의 대입 여부를 확인하기 위해 Nullable로 선언을 하고,
int? nullableInt = null;
HasValue를 찍어 확인해볼 수 있다.
if(nullableInt.HasValue)

아래의 예제에서 nullableDouble.HasValue를 통해 확인해볼 수 있다.

예제)

// 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?

  • 문자열 조작
    stringBuilder는 Append(), Insert(), Replace(), Remove() 등 다양한 메서드를 제공하여 문자열에 대한 추가, 삽입, 치환, 삭제 작업을 수행할 수 있다.

  • 가변성
    stringBuilder는 내부 버퍼를 사용하여 문자열 조작을 수행하므로 크기를 동적으로 조정할 수 있다. 따라서 문자열의 크기가 늘어나거나 줄어들어도 추가적인 메모리 할당이 발생하지 않는다.

  • 효율적인 메모리 관리
    문자열 조작 시 stringBuilder는 내부 버퍼를 사용하여 문자열을 조작하므로, 반복적인 무자열 조작 작업이 발생해도 메모리 할당 및 해제 오버헤드가 크게 감소한다.

▪️ 주요 메서드

  • Append : 문자열을 뒤에 추가한다.
  • Insert : 문자열을 지정한 위치에 삽입한다.
  • Remove : 지정한 위치에서 문자열을 제거한다.
  • Replace : 문자열의 일부를 다른 문자열로 대체한다.
  • Clear : StringBuilder의 내용을 모두 지운다.

사용 예제)

StringBuilder sb = new StringBuilder();

// 문자열 추가
sb.Append("Hello");
sb.Append(" ");
sb.Append("World");

// 문자열 삽입
sb.Insert(5, ", ");

// 문자열 치환
sb.Replace("World", "C#");

// 문자열 삭제
sb.Remove(5, 2);

// 완성된 문자열 출력
string result = sb.ToString();
Console.WriteLine(result);

0개의 댓글