inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

유니티(Unity)로 시작하는 게임개발: Part 2. C# 프로그래밍 입문

값형식 참조형식

Heap 과 Stack

해결된 질문

303

Hyobin Kim

작성한 질문수 81

0

강의를 듣고 제가 이해한 내용이 맞는가 알고 싶습니다

구체적인 이유는 모르겠으나, 메모리를 Heap과 Stack으로 나눈것은, 용도의 차이를 둬서 효율성을 꾀한것으로 보입니다

아직 찾아보진 않았으나, Stack에 올라오는 것들은 Heap에 올라오는 것들 보다 크기가 작은 것들이 아닐까 짐작이 됩니다

참조를 쓰지 않고 바로바로 값에 접근을 해도 될 만큼 작은게 아닌지요?

반면, Heap에 올라오는 것들은 Stack에 저장하기에는 너무 크기가 크고, 복잡하기 때문에 Stack에 참조 변수라는 단말기를 만들어두고, 거기에 Heap의 주소를 입력해둔 것이라 봅니다

거기다, new 생성자와 Garbage Collector가 필요한 것도, Stack 보다 많이 복잡하고 크기 때문에 생성하고 지우는 절차가 더 까다로운 것으로 보입니다

함수 밖의 값 형식. 저는 이걸, 멤버 변수라고 이해 했는데 맞는가 확신이 서질 않습니다.

그리고 이것이 어째서 Heap에 존재해야만 하는지는, 어렴풋이이 멤버변수들은 클래스로 부터 생겨난 Instance의 실제 데이터들이기 때문에 그러지 않는가 싶은데 맞나요?

C# unity

답변 1

1

UDevApp

안녕하세요. 생각하고 계신게 맞습니다. 

용도에 달라서 구분해서 사용하기 위한 것이죠. 

힙에는 큰데이터를 사용합니다. (메모리관리를 해야 하는 하는 데이터들이 여기에 들어가죠)

그리고 작은 데이터라고 해도 멤버변수는 클래스 안의 데이터이기에 힙에 들어갑니다. 

스택은 함수안의 int 같은 기본자료형의 지역변수들이 그렇게 동작합니다.

함수의 파라메터도 마찬가지로 스택으로 동작하죠 

그래서 함수가 실행될때 생겼다가 사라집니다. 

또 아래 그림처럼 함수의 파라메터가 기본자료형이 아니라 클래스일 경우에는 이것의 실제 데이터는 힙에 있고요. 

하지만 변수자체는 스택에 생겼다가 사라집니다. 하지만 실제 데이터는 다른 곳에서 참고하고 있는데이터가 있을 것이기에 실제 클래스의 변수 자체를 가비지 컬렉터가 없애지는 않겠죠. 

그림으로 본다면 다음 데이터입니다. 

 public class MyData{

      int x;

      int y;

}

public class TestScript : Monobehaviour {

      MyData data;

       void Start(){

              data = new MyData();

       }

       void TestFunc(MyData d){

               print(d.x + d.y);

       }

}

결론적으로 생각하고 계신게 맞습니다. 많이 진행되셨네요. 축하드립니다. 

나중에 강의 끝쪽에 있는 리스트하고 배열 부분이 잘 이해되시면 좋겠네요. 이걸 확실히 이해하면 나중에 그 부분이 쉽습니다. ^^

Part4 유니티로 세가지의 게임만들기 강의도 들을 수 있는건가요?

0

262

1

플레이 버튼이 없어요

0

757

1

전체 연습문제 다운방법, 현재 연습문제 파일이 깨져서 열립니다.

0

376

2

연습문제파일

0

262

1

중단점을 찾을수가 없습니다

0

469

1

10분 24초에 만약 b를 0으로 둘시, "나눗셈이 불가능"대신 attempt to divide by zero 오류가 뜹니다.

0

312

1

if문의 비교(10분56초~59초사이)

0

219

1

NullReferenceException을 기대했는데....

0

326

1

C#에서의 메모리 관리

0

273

1

앞선 강의에서 Instance와 연관 지어서

0

269

3

Instance와 variable

0

243

1

구조체 6번째 강의

0

190

1

제공 함수는 실제 구현하는 몸체가 없다

1

341

1

인자와 매개변수

1

215

1

코드에서 new GameObject를 실행했을 때 유니티 화면상의 상태 문의

2

621

1

유니티 콘솔화면에 나타난 내용 문의

1

353

1

멤버변수를 전역변수라고 생각해도 되는지요?

1

1225

1

출력만 있는 함수 관련 질문

1

422

2

문제 파일은 어디에 있나요?

0

234

1

제 윈도우용 visual studio에서는 코드행 앞에 아무것도 안찍힙니다.

0

319

2

혹 강의내용을 캡쳐해서 블로그에 공개해도 되나요?

0

364

1

비쥬얼 스튜디오에서 강의대로 입력했는데 콘솔창에 아무것도 안나타나네요.

0

262

1

저는 윈도우즈에서 모니터를 두개로 나눠 강의영상과 Unity작업창으로 나눠서 하고 있는데 무슨 얘긴지 하나도 모르겠어요

0

229

2

갑자기 파일을 추가하려면 과정을 설명해 주셔야 하는데 그냥 파일부터 추가하네요.

0

171

1