const, readonly 둘 다 값을 수정할 수 없도록 하는 상수임.
둘의 차이는? const : 컴파일 타입의 상수 / readonly: 런타임 상수
const
- 컴파일 타입 상수임 ( 컴파일 시 const 변수의 값을 가져옴)
- 내장 자료형( 정수형, 실수형, Enum, String)에 대해서만 사용 가능함
- 변수 선언과 동시에 값을 할당해야 함
- 메모리 할당 위치는 Stack Memory임 (static 선언을 하면 heap 메모리에 저장 가능)
readonly
- 런타임 상수임 (exe or dll을 사용할 때 변수의 값을 가져옴)
- 모든 자료형에 사용할 수 있으며, 생성과 동시에 초기화할 필요는 없음
- 생성자 단계에서 단 1번 할당을 통해 초기화 가능
- 메모리 할당위치는 Heap Memory임
const보다 readonly를 써야 하는 이유
Const는 Stack Memory 에 저장되기 때문에 접근이 빠르다는 장점이 있지만,
const는 컴파일 상수이기 때문에 const변수 값이 바뀌는 경우 해당 프로젝트 뿐만 아니라 참조받거나 영향을 받는 프로젝트 모두 재컴파일을 해야한다는 단점이 있다.
반면, readonly는 생성 시 선언하지 않아도 생성자에서 초기화하여 사용할 수 있기 때문에 유연하며,
실제 사용하는 단계에서 변수의 값을 가져오는 장점이 존재한다.
공돌창고 :: C#/.NET readonly vs const 예제로 보는 차이점 (tistory.com)
+static
#include <stdio.h>
int test()
{
static int a = 0;
printf("%d", a);
a = 3;
}
int main()
{
test();
test();
}
이 코드를 실행 시 a = 0;을 만났을 때 a로 바뀌는 것이 아니라 이전에 만났던 3을 넣어줌
(새로 int로 선언 시 이미 선언이 되어있는 static이므로 초기화를 무시하고 바뀐 3을 출력함)
결과: 03
#include <stdio.h>
int main()
{
const int a = 3;
a = 5;
printf("%d",a);
}
if) const로 선언 시
a = 3 -> 절대절대 처음 지정한 값이 변하지 않아 디버깅 에러
'CS > C# & Unity' 카테고리의 다른 글
가비지컬렉터(GC : Garbage Collection) (1) | 2023.12.12 |
---|---|
C#의 string (0) | 2023.12.12 |
직렬화와 역직렬화 (1) | 2023.12.12 |
스태틱 게임오브젝트와 배칭 (0) | 2023.10.01 |
드로우콜과 배치 (0) | 2023.10.01 |