C#/C# 교과서

[C# 교과서] 28~29. 제네릭 사용하기, 널(null) 다루기

서니션 2023. 1. 5. 22:19
728x90
반응형

제네릭

  • 특정 형식을 지정하여 컬렉션에 저장하고 사용할 수 있음
  • 다른 데이터 형식을 추가할 수 없도록 형식 안정성을 적용
  • 데이터 형식 변환 등 작업이 따로 필요하지 않음
  • Cup<T>를 형식 매개변수인 T에 따른 Cup 클래스의 개체를 생성하는 것

Cup of T

넘어오는 데이터 형식에 따라 해당 개체 성격을 변경하는 구조를 제네릭이라 함


Stack과 제네릭 클래스 사용

  • 일반 클래스 Stack과 제네릭 클래스인 Stack<T>는 하는 일이 동일함
  • 다만 Stack 클래스는 데이터 object를 다루고, Stack<T> 클래스는 T로 지정한 데이터로 다룸
  • object로 만든 데이터를 실제 사용하려는 string과 같은 형식으로 표현할 때는 중간에 변환 과정을 거치기 때문에 이 부분에서 추가 작업을 진행하는 비용이 발생함
  • 그래서 정확한 데이터 형식을 쓸 수 있는 Stack<T> 같은 제네릭 클래스를 사용하면 좋음

(박싱 작업과 언박싱 작업을 하지 않아도 되므로 성능이 향상)


List<T> 제네릭 클래스

  • List of T
  • 무언가의 리스트를 나타냄
  • List<int>, List<string> 등으로 사용
  • 이렇게 만든 제네릭 컬렉션 개체는 for 문 또는 foreach 문 등으로 쉽게 가져다 사용할 수 있음

Enumerable 클래스로 컬렉션 만들기

  • System.Linq 네임스페이스에 들어 있음
  • Range()와 Repeat() 메서드를 제공
  • 특정 범위의 정수 컬렉션을 손쉽게 만들 수 있음
  • 콤마가 포함된 배열을 가져오려면 string.Join 메서드와 함께 사용
  • string.Join(”,”, Enumerable.Range(1,5))
using System;
using System.Linq;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            var numbers = Enumerable.Range(1,5);
            foreach (var n in numbers)
            {
                Console.Write("{0}\\t",n);
            }
            Console.WriteLine();

            var sameNumbers = Enumerable.Repeat(-1, 5);
            foreach (var n in sameNumbers)
                Console.Write($"{n}\\t");
            Console.WriteLine();
        }
    }
}

Dictionary<T, T> 제네릭 클래스

딕셔너리 개체를 사용하여 키와 값으로 데이터를 저장하고 사용할 수 있는 딕셔너리 제네릭 클래스


null 다루기

프로그래밍에서 널(null, Null, NULL, nil)은 아무것도 없다는 상태를 의미

empty가 아닌 undefined 라고 이해


null 가능 형식 : Nullable<T> 형식

기본 제공 형식을 null이 가능한 형식으로 변경하려면 Nullable<T> 제네릭 형식을 사용

bool과 Nullable<bool>의 차이점

  • bool 형식은 true와 false를 가짐
  • Nullable<bool> 형식은 true, false, null을 가짐

Nullable<T> 형식을 줄이는 방법은 데이터 형식 뒤에 ?(물음표)를 붙이는 것

예를 들어 bool? int? 형식으로 null 가능 형식을 사용

Nullable<T> 형식이 제공하는 주요 멤버

  • HasValue 속성 : 값이 있으면 true, null 값이면 false를 반환
  • Value 속성 : 값 반환
  • GetValueOrDefault : 값 또는 기본값 반환

Nullable 형식은 null이 할당될 수 있는 형식을 의미

Nullable<int> i = null;

int? i = null;


?? 연산자(null 병합 연산자)

물음표 2개 (??)로 된 연산자인 null 병합 연산자는 왼쪽 항이 null이 아니면 해당 값을 반환하고, 그렇지 않으면 오른쪽 값을 반환

using System;
using System.Collections;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            string nullValue = null;
            string msg ="";

            nullValue = null;
            // if 구문으로 null 값 비교
            if (nullValue == null)
            {
                msg = "[1] null이면 새로운 값으로 초기화합니다.";
            }
            Console.WriteLine(msg);

            // ?? 연산자로 null 값 비교
            msg = nullValue ?? "[2] null이면 새로운 값으로 초기화합니다.";
            Console.WriteLine(msg); // nullValue가 null이니까 우측값 반환

            nullValue = "Hello";
            msg = nullValue ?? "[3] Nothing";
            Console.WriteLine(msg);
        }
    }
}

728x90
반응형