본문 바로가기
Program Language/C#

Part1. C# 첫발 내딛기(26. const 와 readonly)

by 토담이아빠 2023. 1. 20.

 

const와 readonly

 

이번 포스팅에서는 상수를 표현하는 const와 이와 유사한 readonly에 대해서 정리했습니다.


const

 

const로 선언된 변수는 추후에라도 값을 변경할 수 없습니다. 만약 바꾸려고 한다면 컴파일 에러가 발생합니다. 나중에 값을 변경하지 못하기 때문에 선언과 동시에 원하는 값으로 할당을 해야 합니다. 따라서 컴파일 타임에 값이 결정됩니다.


const double kilometerTomile = 0.621371;

이렇게 선언된 kilometerTomile 변수는 나중에 값을 변경할 수 없습니다. 외부에서의 접근은 "클래스명.변수명"으로 접근해야 합니다.

readonly

 

C#에는 const와 유사한 readonly라는 키워드가 있습니다. const와 다른 점은 객체 생성 시 값이 초기화가 된다는 점입니다. 따라서 런타임 시에 값이 결정되며 외부에서의 접근은 "객체.변수명"으로 접근합니다. 다음은 const와 readonly를 비교한 예제입니다.


using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConstAndReadonly
{
    class ConstExam
    {
        public const double kilometerTomile = 0.621371;// const 변수 선언 및 초기화
    }

    class ReadonlyExam
    {
        public readonly double kilometerTomile = 0.0;
        public ReadonlyExam()
        {
            kilometerTomile = 0.621371;
        }
        public ReadonlyExam(double dValue)
        {
            kilometerTomile = dValue;
        }

    }

    internal class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine(ConstExam.kilometerTomile); //클래스명을 통해 접근한다.
            
            ReadonlyExam instance1 = new ReadonlyExam(); //객체 생성 시 초기화 됨
            Console.WriteLine(instance1.kilometerTomile); //객체를 통해 접근

            ReadonlyExam instance2 = new ReadonlyExam(0.621371); //객체 생성 시 0.621371값으로 초기화
            Console.WriteLine(instance2.kilometerTomile); //객체를 통해 접근

        }
    }
}

결과

0.621371
0.621371
0.621371

[참고]
"초보자를 위한 C# 200제(2판)" / 저자 : 강병익

 

 

 

 

댓글