CS/C# & Unity

const와 readonly의 차이 (+ static)

혀니리리 2023. 12. 12. 12:35
728x90

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)

 

C#/.NET readonly vs const 예제로 보는 차이점

C#, 닷넷에서 readonly 키워드와 const 키워드는 비슷하지만 다른 키워드 이다. 두 키워드의 차이점 및 공통점에 대해서 알아보자. const 키워드는 대부분에 프로그래밍 언어에서 지원하는 기본적인

hijuworld.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 -> 절대절대 처음 지정한 값이 변하지 않아 디버깅 에러

728x90

'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