C#/책 정리

C# 정리 ) 읽기 전용 필드

denofevil 2021. 12. 31. 00:45

프로퍼티를 사용하면 필드의 값을 읽기만 가능하도록 외부에 노출할 수 있다.

        class test
        {
            private int gett;
            public int getTest { get { return gett; } }
        }

하지만 클래스 내부에서도 읽기만 가능하도록 만들고 싶다면 어떻게 해야 할까?

아니면 한번 값을 쓰고 다시 값을 설정하지 못하게 해야할 때가 있다.

이럴때 readonly 예약어를 사용해 읽기 전용 필드를 정의하면 된다.

        class test
        {
            readonly int sec = 1;
            readonly string name;
            public test()
            {
                this.name = "일정";
            }
            public void Run()
            {
                this.sec = 5;
            }
        }

필드를 정의할 때 readonly 예약어가 붙은 변수에 값을 넣을 수 있다.

생성자 또한 가능하다.

하지만 일반 메서드 Run() 에서는 값을 대입할 수 없어 오류가 발생한다.

 

읽기 전용 필드는 변수를 정의할 때와 생성자 내부를 제외하고는 그 값을 바꿀 수 없다.

 

객체에는 두 종류가 있다.

가변 객체와 불변 객체

 

가변 객체 : 필드의 값이 변할 수 있는 객체.

불뱐 객체 : 상태가 한번 지정되면 다시 바꿀 수 없는 객체.

 

다음 클래스는 불변 객체에 속한다.

        class test
        {
            int x, y;
            public int X { get { return x; } }
            public int Y { get { return y; } }
            public test(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
        }

x에 5를, y에 6을 넣고 인스턴스를 만들었다고 해보자.

이때 만약 x가 6, y가 5인 인스턴스가 필요하다고 하면 다시 new로 할당을 해 주어야 한다.

불변이므로 객체 내부 값을 변경할 수 없는 것이다.

 

하지만 이렇게 클래스를 작성하면 나중에 실수를 할 가능성이 있으니 이럴때 readonly 예약어를 사용하면 된다.