Developer/C#, 닷넷

C# .Net readonly, const 비교(언제 사용해야 할까?)

우주로그 2022. 8. 8.

const vs readonly

C#에서 const와 readonly는 값을 수정할 수 없도록 하는 상수입니다.

그럼 둘의 차이는 무엇일까요?

const는 컴파일 시점에 값이 저장되는 컴파일 상수이며, readonly는 런타임 시점에 값이 저장되는 런타임 상수 입니다.

이렇게 설명하면 이해가 어려울 수 있습니다.

 

각각의 예시를 보며 이해해 보도록 하겠습니다.

 

1. readonly

readonly의 값은 변수를 선언할 때 선언을 하거나, 

생성자에서 생성시 값을 초기화 해주게 됩니다.

샘플 소스를 보겠습니다.

internal class Program
    {
        static void Main(string[] args)
        {
            ReadonlyNumber readonlyObject = new ReadonlyNumber();
            Console.WriteLine(readonlyObject.no);

            ReadonlyNumber readonlyObject2 = new ReadonlyNumber(5678);
            Console.WriteLine(readonlyObject2.no);
        }
    }

    class ReadonlyNumber
    {
        // 변수 초기화시 값 할당
        // 생성자에서 값을 할당하므로 0000은 실제 사용이 안됨
        public readonly int no = 0000;
        // 기본 생성자
        public ReadonlyNumber()
        {
            no = 1234;
        }
        // 파라메터 존재 생성자
        public ReadonlyNumber(int inputNumber)
        {
            no = inputNumber;
        }
    }

결과는 아래와 같습니다.

 

ReadonlyNumber readonlyObject = new ReadonlyNumber();

여기서 readonlyObject라는 객체를 생성을 하며, 생성자에 의해 

no = 1234

가 할당이 되게 됩니다.

 

ReadonlyNumber readonlyObject2 = new ReadonlyNumber(5678);

readonlyObject2의 경우 5678이라는 int값을 인자로 객체 생성을 했기 때문에,

해당 객체의 no 값은 5678이 되는 것입니다.

 

이렇듯 no의 값을 수정을 할 수는 없지만, 객체마다 다른 값을 부여할 수 있습니다.

 

2. const

const는 컴파일 시점에 최초로 값이 저장 된 후 어떠한 경우도 변경을 할 수 없습니다.

internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(ConstNumber.no);
        }
    }

    class ConstNumber
    {
        // 변수 선언시 값 지정 필수
        public const int no = 9999;
 
    }

이렇게 class 내에서 const 값을 지정한 후 객체 생성 없이 바로 값을 사용합니다.

 

3. readonly, const 언제 사용할까?

readonly는 로그인 id를 객체에 담을 경우 같이, 객체 생성마다 값이 바뀌지만 이후 수정을 하면 안되는 경우에 사용하면 됩니다.

 

const는 절대 변하지 않는 경우, 예를 들어 URI 값이라던가 규정된 연동 키값 등에 활용하면 됩니다.

댓글