본문 바로가기
유니티/개념 정리

const와 readonly

by fore4022 2025. 4. 1.

친구에게 readonly에 대해서 말하면서 ‘변수를 읽기 전용으로 만든다.’라고 하였더니, 친구가 그러면 const와는 다른 점이 무엇이냐고 물었다.

나는 readonly는 이름 그대로 ‘읽기 전용(값의 변경이 없이, 값을 가져와서 사용하는 것만 가능)’으로 기억했고, const는 ‘상수’로 readonly처럼 ‘읽기 전용’으로 알고 있었다.

오늘은 이 두개의 차이점에 대해서 알아보자.


const란?

  • const를 변수 앞에 사용할 경우, 변수를 상수로 만들어준다.
    • 상수 : 변하지 않는 고정된 값이다.
    • 클래스의 경우 상수 생성자가 필요하다.
  • 필드에 선언된 것으로 초기화된다.
  • 컴파일 시점에 값이 결정된다.

const 사용 예시

우리는 개발을 하면서 다양한 값을 저장하는 변수를 만든다. 그러다 보면 ‘바뀌어서는 안되는 값’이 필요할 때가 있을 것이다.

"예를 들어서 바뀌지 말아야 할 값이 5이다."
"값이 5로 지정된 것을 토대로 코드를 작성하였다."

위와 같은 상황에 값이 변경된다면, 여러 문제가 발생할 것이다.

이러한, 문제 상황을 예방하기 위해서, 바뀌어서 안되는 값을 가지는 변수를 상수로 만들어 주는 것이다.


readonly란?

  • 변수나 클래스를 읽을 수만 있도록 만들어준다.
  • 값 형식은 바꿀 수 없다.
    • string, float, int, bool
  • 클래스의 경우에는 아예 수정이 불가능 하지 않다.
    • 새로운 값(인스턴스)으로 대체는 불가능하다. 단 인스턴스 내부의 값은 readonly에 의해서 변경이 제한되지 않는다.
  • 런타임 시점에 값이 결정된다.
  • 선언과 동시에 초기화 하지 않아도 된다.

readonly 사용 예시

우리는 개발을 하면서 특정 값을 가져와서 사용하면서, 해당 값이 변하지 않도록 해주어야 하는 경우가 존재한다.

"이 게임의 닉네임은 한번 정하면 변경할 수 없다."
"이때 유저의 닉네임을 저장하는 변수가 필요한데, 초기화 가능하고 값을 읽기만 가능해야 한다."

위와 같은 상황에서 readonly는 선언할 때 초기화하지 않아도 되기 때문에, 입력받은 닉네임을 통해 변수를 초기화 해서, 그 이후로는 변수에 값을 수정할 수 없게 된다.


const와 readonly의 차이점

어떤게 다른 것인지 정리해 보자.

  • 초기화의 시점
    • const의 경우에는 필드에서 변수 선언과 초기화가 동시에 이루어져야 한다.
    • readonly는 필드에서 변수를 선언하고, 원하는 시점에 생성자를 통해서 초기화 할 수 있다.
  • 사용 가능한 타입
    • const는 타입으로 클래스를 가질 수 없다.
    • readonly는 타입의 제한을 받지 않는다.
  • 값의 불변
    • const는 스크립트 외에서 값을 변경할 수 없다.
    • readonly는 클래스와 참조에 대한 값은 변경될 수 없다. 하지만 클래스의 필드는 수정 가능하다.

여태까지 특정 값이 변경되지 않을 때 const를 사용하였다. 하지만 앞으로는 변경되지 않는 특정 값에 대해서 처음부터 제한을 받고 코드를 작성하는 것이 아닌, 조금 더 유연하게 사용할 수 있을 것 같다.

'유니티 > 개념 정리' 카테고리의 다른 글

SerializedProperty  (0) 2025.04.28
Custom Editor  (0) 2025.04.28
Text와 TextMeshPro  (0) 2024.12.17
StringBuilder  (0) 2024.12.10
Null Return  (0) 2024.12.03