반응형
readonly 사용 시 값 타입 vs 참조 타입
- readonly 의미
- 값 타입(int, struct 등) : 해당 값 자체를 변경할 수 없음
- 참조 타입(class, List, LinkedList 등) : 참조 자체를 변경할 수 없음 (참조 대상의 내용은 변경 가능)
- 내부 값 변경
- 값 타입(int, struct 등) : 불가능
- 참조 타입(class, List, LinkedList 등) : 가능 (속성, 메서드 등 사용해서 내부 조작 가능)
readonly 값 타입(Value Type) 실제 예제

readonly int a = 5;
a = 10; // 컴파일 에러
a 자체가 값 타입이기 때문에 값 변경 자체가 불가능
readonly 참조 타입(Reference Type) 실제 예제

readonly List<int> list = new();
list.Add(1); // 가능
list = new(); // 컴파일 에러 (참조 변경 금지)
list 변수에 한 번 참조된 내용 변경은 불가능
하지만 list를 통해서 내부 값은 변경이 가능하다.
정리하자면
즉, readonly는 변수 자체의 대입 금지를 뜻하지, 참조 대상의 내용 조작까지는 막지 않는다.
(이것을 막고 싶다면 ImmutableCollection, ImmutableList 등을 사용해야 한다.)
같이 읽으면 좋은 글
C# Call by value와 Call by reference에 대해서
먼저 읽고 오면 좋은 글 C# Value Type vs Reference Type 값 타입(Value Type) 스택 메모리에 저장 데이터를 직접 가지고 있음 기본 타입들 대부분이 값 타입 (Booleans, Characters, DateTime, TimeSpan, 구조체) 값 타입
jettstream.tistory.com
'프로그래밍 > C#' 카테고리의 다른 글
| C# JSON 직렬화/역직렬화 옵션을 설정하는 여러 방법 (0) | 2025.06.01 |
|---|---|
| C# 업 캐스팅(Upcasting)에 대해서 알아보자 (0) | 2025.05.19 |
| C# 얕은 복사, 깊은 복사에 대해서 알아보자 (1) | 2025.05.19 |
| C# EF Core 사용시 DB 상태를 간단하게 체크하는 방법 (0) | 2025.05.19 |
| UseForwardedHeaders를 이용해서 클라이언트 실제 IP 얻기 (0) | 2025.05.19 |
댓글