C#에서의 메모리 관리
273
81 asked
계속해서 반복되는 내용에서 깨달은게 있는 것 같은데 맞는지 확인 좀 해주셨으면 합니다
배열에서도, 리스트에서도, 아니 그 이전, 참조에 대해서 배울 때 부터 나오는 점이 어디에 변수와 실제 데이터가 선언이 되느냐의 문제 잖아요?
값형식이라면, 함수 종료시에 바로 바로 스택에서 사라지니까 딱히 메모리 관리라는게 필요 없어 보입니다
참조형식이라면, 실제 데이터가 참조되지 않는다면 Garbage Collector가 알아서 지워주지만, 이걸 잘 이용해야 할 것 같이 보입니다. 참조 변수가 stack에 있다면, 역시나 위의 값형식 처럼(대부분의 경우) 알아서 없어 질거라 기대를 하지만, 멤버 변수로 선언하는 경우처럼 참조 변수 마저도 Heap에 있다면 적절하게 이 참조 변수가 어디서 사라질것인지를 고려해야 할 거라고 생각 합니다
이게 맞나요?
Answer 1
0
안녕하세요. 답변이 늦어 죄송합니다. 요즘 계속 바빠서 답을 늦게 달았습니다.
둘다 맞습니다. 값형식이 스택에 있는 경우 메모리가 사라지므로 관리의 필요가 없습니다.
참조형식의 경우도 참조가 여러곳에서 이루어 지는 경우 하나만 참조가 해제되어도 가비지컬렉터가 해제하지 않습니다.
소스코드에서 두 부분에서 참조를 할 경우 하나만 해제되어도 나머지는 사라지지 않습니다. 이걸 저희가 만든 클래스가 이렇게 동작하는데요.
계층뷰에서의 상황은 조금 다릅니다. (둘다 고려해야 하는 건 맞습니다.)
계층뷰에 게임오브젝트가 있고 리스트에서 이걸 참조 하고 있을때의 이야기입니다.
디스트로이로 게임오브젝트를 파괴해 버리면 실제 오브젝트가 파괴되죠. 그래도 리스트에서는 빈 항목이 남아 있습니다. 그걸 나중에 리스트에서 remove 를 해줘야 나중에 코드에서 오류가 생기지 않겠죠.
일반적인 경우 게임오브젝트의 경우에는 Create 와 Destroy 만 잘 신경쓰면 됩니다.
둘다 메모리관리를 어떻게 보면 할 필요가 없는데요. 그래도 코드를 작성하다가 보면 오류가 생기는 경우 메모리가 어떻게 동작하는지 모르면 오류를 잡기가 어렵기 때문에 알아야 합니다.
Part4 유니티로 세가지의 게임만들기 강의도 들을 수 있는건가요?
0
263
1
플레이 버튼이 없어요
0
758
1
전체 연습문제 다운방법, 현재 연습문제 파일이 깨져서 열립니다.
0
377
2
연습문제파일
0
262
1
중단점을 찾을수가 없습니다
0
470
1
10분 24초에 만약 b를 0으로 둘시, "나눗셈이 불가능"대신 attempt to divide by zero 오류가 뜹니다.
0
313
1
if문의 비교(10분56초~59초사이)
0
219
1
NullReferenceException을 기대했는데....
0
326
1
Heap 과 Stack
0
303
1
앞선 강의에서 Instance와 연관 지어서
0
271
3
Instance와 variable
0
243
1
구조체 6번째 강의
0
190
1
제공 함수는 실제 구현하는 몸체가 없다
1
343
1
인자와 매개변수
1
215
1
코드에서 new GameObject를 실행했을 때 유니티 화면상의 상태 문의
2
624
1
유니티 콘솔화면에 나타난 내용 문의
1
353
1
멤버변수를 전역변수라고 생각해도 되는지요?
1
1227
1
출력만 있는 함수 관련 질문
1
422
2
문제 파일은 어디에 있나요?
0
235
1
제 윈도우용 visual studio에서는 코드행 앞에 아무것도 안찍힙니다.
0
321
2
혹 강의내용을 캡쳐해서 블로그에 공개해도 되나요?
0
365
1
비쥬얼 스튜디오에서 강의대로 입력했는데 콘솔창에 아무것도 안나타나네요.
0
264
1
저는 윈도우즈에서 모니터를 두개로 나눠 강의영상과 Unity작업창으로 나눠서 하고 있는데 무슨 얘긴지 하나도 모르겠어요
0
231
2
갑자기 파일을 추가하려면 과정을 설명해 주셔야 하는데 그냥 파일부터 추가하네요.
0
172
1

