C#

22.11.21 C# 일지_1

함형우 2022. 11. 21. 17:59
728x90

// Value Type

Value Type은 상속될 수 없으며,  상대적으로 간단한 데이터를 저장하는데 사용된다. 이런 Value Type은 null 값을 가질 수 없다. C#의 2.0버전 부터 이런 타입들에게 null 값을 부여할 수 있게 하였는데 이를 Nullable Type으로 부른다. C#에서 물음표(?)를 int나 DateTime 타입명 뒤에 붙이면 즉, int? 혹은 DateTime? 같이 하면 Nullable Type이 된다. 이는 컴파일하면 .NET의 Nullable<T> 타입으로 변환된다. Nullable Type (예: int?) 을 일반 Value Type (예: int)으로 변경하기 위해서는 Nullable의 .Value 속성을 사용한다.

 

// Nullable 타입
int? i = null;
i = 101;
            
bool? b = null;

//int? 를 int로 할당
Nullable<int> j = null;
j = 10;
int k = j.Value;

 

// 가변 배열 Jagged Array

각 차원별 배열 요소 크기가 동일한 Rectangular 배열은 C#에서 [,] 와 같이 괄호안에 콤마로 분리하여 다차원을 표현한다. 하지만 각 차원별 배열 요소 크기가 가변적인 가변 배열(Jagged Array)의 경우 [][] 와 같이 각 차원마다 괄호를 별도로 사용한다. 첫번째 차원의 크기는 컴파일 타임에 확정되어야 하고, 그 이상 차원은 런타임시 동적으로 서로 다른 크기의 배열로 지정할 수 있다.\

//Jagged Array (가변 배열)
//1차 배열 크기(3)는 명시해야
int[][] A = new int[3][];

//각 1차 배열 요소당 서로 다른 크기의 배열 할당 가능
A[0] = new int[2];
A[1] = new int[3] { 1, 2, 3 };
A[2] = new int[4] { 1, 2, 3, 4 };

A[0][0] = 1;
A[0][1] = 2;

 

// 배열 사용하기

다음 예제는 점수 배열(scores)을 하나 하나 엑세스하면서 총합을 구하는 예이다. 아래 예제에서 배열의 사이즈를 구하기 위하여 .Length 속성을 사용하였는데, 이는 System.Array 클래스에 정의된 속성이다. (.NET Framework의 System.Array에서 파생된 것이다)

static void Main(string[] args)
{
    int sum = 0;
    int[] scores = { 80, 78, 60, 90, 100 };
    for (int i = 0; i < scores.Length; i++)
    {
        sum += scores[i];
    }
    Console.WriteLine(sum);        
}

 

// 배열의 전달

배열은 Reference 타입이다. 그렇기 때문에 다른 객체나 메소드에 전달할 경우, 직접 모든 배열 데이터를 복사하지 않고 배열 전체를 가르키는 Reference값을 전달한다. 즉, 전달하는 쪽에서는 단순히 레퍼런스인 배열명을 사용하며, 받는 쪽에서는 아래 예제와 같이 배열 데이타 타입 및 배열 파라미터명을 사용한다

        static void Main(string[] args)
        {
            int[] scores = { 80, 78, 60, 90, 100 };
            int sum = CalculateSum(scores); // 배열 전달: 배열명 사용
            Console.WriteLine(sum);
        }

        static int CalculateSum(int[] scoresArray) // 배열 받는 쪽
        {
            int sum = 0;
            for (int i = 0; i < scoresArray.Length; i++)
            {
                sum += scoresArray[i];
            }
            return sum;
        }

 

// C# 에서의 문자열

C# 에서의 문자열은 한번 설정되면, 다시 변경할 수 없다.(Immutable Type) 

        static void Main(string[] args)
        {
            string name = "다름1";

            Console.WriteLine(name);

            name = "다름";

            Console.WriteLine(name);
        }

위와 같이 잘 작동하는데 무슨 소리냐고 할 수 있지만, 내부적으로는 완전히 다른 메모리를 가지는 객체이다. string과 다르게 mutable인 int형은 int num = 3으로 초기화 한 후 int num = 5로 하여도 똑같은 장소에 값만 바뀌지만, Immutable인 string의 경우 내부메모리에 존재하던 name값을 그대로 두고 새로운 name값을 지정한다, 즉 처리해야할 메모리가 늘어나고 용량이 커진다.

 

 

728x90