Microsoft MVP성태의 닷넷 이야기
const와 readonly의 명확한 차이가 이게 맞나요? [링크 복사], [링크+제목 복사],
조회: 4898
글쓴 사람
김민아
홈페이지
첨부 파일
 

제가 알고있는 차이로는

1. const는 정적 취급이고 readonly는 인스턴스 취급이다. (readonly에 static을 선언하면 정적 취급)
2. const는 변수 선언과 동시에 값을 할당해야 하지만 readonly는 선언만 해놓은 후 생성자 내부에서 값을 몇 번이고 바꿀 수 있다.
3. const는 기본 자료형(int, string, enum)에 대해서만 사용할 수 있고 readonly는 모든 타입으로 사용할 수 있다.
4. const는 메소드 내부에서도 선언할 수 있는데 메소드에서 지역변수로 사용하게 되면 스택 메모리에 할당되며 클래스 필드로 사용하게 되면 힙에 할당된다.

그리고 정말 죄송하지만 부가적인 질문 하나가 더 있는데..
구조체 필드로써 선언한 값 형식은 스택, 참조 형식은 참조가 스택에 있고 그 주소를 찍고 들어가 보면 힙메모리에 객체가 저장되어 있는 건 알겠는데
구조체에서 const로 선언한 값 형식의 필드도 스택에 올라가는 게 맞나요..?








[최초 등록일: ]
[최종 수정일: 3/9/2022]


비밀번호

댓글 작성자
 



2022-03-09 12시59분
4번의 경우 const 지역 상수는 스택 메모리에 할당되지 않습니다. 또한 클래스 필드로 사용해도 힙에 할당되지 않습니다. 마찬가지로 구조체에서 const로 선언한 경우 스택에 올라가지 않습니다.

참고로, 이런 식의 궁금증들은 .NET Reflector나 ildasm.exe 등을 이용해 C# 컴파일러가 IL 코드로 어떻게 변환하는지 살펴 보시면 됩니다. 가령, 4번 질문의 경우, const를 지역 (변수가 아닌) 상수로 정의해도 C# 컴파일러가 출력한 DLL/EXE를 IL 코드 수준에서 보면 const 정의가 누락되는 것을 볼 수 있습니다.

또한, const로 정의한 필드가 구조체든 클래스든 개별 인스턴스의 메모리에 올라오지 않는 것은, 해당 필드를 IL 코드로 보면 static으로 정의되는 것을 통해 유추할 수 있습니다.
정성태
2022-03-09 01시33분
[김민아] 늦은 시간에 정말 감사합니다 앞으로 리플렉터로 변환 과정을 확인해 봐야겠네요!!
[guest]

... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4801spow...2/3/201710513C#의 참조 동작관련하여 아이디어 문의 드립니다 [4]
4800오세운2/1/201714590C# 에서 C++ DLL임포트 질문입니다. [2]
4798guest1/29/201711946picturebox의 image.dispose [1]
4797김철환1/13/201711894책에 관한 질문입니다 [3]
4796Bere...1/13/201711940++ 후위연산자와 = 을 함께 사용할 때 생성되는 IL 코드 관련... [2]
4795김철환1/11/201713137이벤트 부분을 읽고 있는데 이해가 안되서 질문합니다.. [11]
4794김철환1/10/201710429안녕하세요 c# 6.0 책을 구매한 사람인데요 [3]
4793장준영1/7/201712493안녕하세요 c언어 처음 공부해보는 학생입니다 [4]파일 다운로드1
4792김재영1/4/201713419소스코드 공개 전 성태님의 의견을 듣고싶습니다 [3]
4791C#초보12/28/201613352비동기 소켓 close시 ObjectDisposedException 문제점 질문 있습니다.. [1]
4790미나리12/24/201613593파워포인트 쇼 제어 SimpleHttpServer.cs 작동문제 [4]파일 다운로드1
4789김솔지12/21/201612409프린트 시, 프린트하는 파일의 파일명 구하는 부분에 대해서 질문드립니다. [1]
4788짜두12/19/201612141Visual Studio 2015 에서 msbuild 12 사용 [5]
4787guest12/18/201613924VLC라이브러리에 대해 아시나요? [3]파일 다운로드1
4785Hyou...12/16/201614032WPF 개발 시 MVVM 프레임워크 사용 [2]
4784ds12/15/201610688문의 드립니다. [2]
4783후배12/13/201612288MemoryStream에 관한 질문 입니다. [5]
4782김형민12/6/201610590[ C# 6.0 ] 126p 오타인가요? [6]
4781질문자11/29/201610727ms워드 저장 오류 [1]
4780최진11/28/201615186안녕 하세요 빌드 관련해서 질문드립니다 꾸벅 [4]
4779손니11/28/201611536안녕하세요 질문하다 드려도 될까요 [3]
4778김상호11/25/201611053재귀호출->비재귀호출 [2]파일 다운로드1
4777권오영11/12/201613311아래 질문 상세 소스전체입니다.. [3]
4776권오영11/11/201611212제가 이클립스를 공부중인데..이상한것을 찾았습니다.. [2]
4775이성환11/11/201614636안녕하세요. SnapsToDevicePixels 질문입니다. [5]파일 다운로드1
4774popo11/10/201611324.net SSL통신 관련 질문 드립니다. [1]
... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...