클래스 초기화와 값대입
196
작성한 질문수 4
클래스에서 new를 이용해서 초기화를 하지 않으면, 값을 대입할수 없는 이유가 뭘까요? 클래스 호출해서 선언하는 순간 힙메모리에 일단 메모리 공간은 null값으로라도 만들어지는거 아닌가요? 그러면 그 null값의 메모리 할당공간안에 바로 값을 대입할수도 있어야 할거같은데,
어쨰서 일단은 new와 ()로 값을0으로 초기화 하던지, 안에 (0,1,2) 이런식으로 값을 넣던지 해야만, 값을 대입하고, 변경하는게 가능해지는건가요?
구조체에서는 되는데, 클래스에서는 안되는 명확한 이유가 궁금합니다.
답변 1
1
일반적인 데이터의 경우와 큰데이터에 클래스를 사용하고 작은 데이터의 경우 구조체를 사용합니다
힙에 데이터가 있다는 이유는 실제의 데이터가 크기때문에 힙메모리에 올리는 것입니다
구조체가 값타입이고 클래스가 참조타입입니다
값타입은 바로 그곳에 데이터가 있고 참조타입은 참조를 한번 거쳐가야 데이터가 있습니다
그런데 C# 에서는 문법을 같이 사용하면서 이렇게 다른 동작을 하는 경우가 종종 있습니다 제가 예상하기로는 이게 바로 c#을 언어를 설계한 사람들이 생각하는 철학이라고 생각합니다 초보자의 경우 같이 둘다 new를 하고 접근을 쉽게 하라는 뜻입니다
구조체는 new 를 하는 동작이 생성자를 사용하기 위한 작업입니다 즉 선언시 메모리가 생겨납니다 클래스의 경우 변수 선언이 레퍼런스를 만드는 작업입니다 이상태에서 실제 데이터가 생기지 않습니다 실제 데이터는 new를 해야 생겨납니다 생성자도 같이 실행되고요
궁금하신점은 또 질문주세요 감사합니다
Part4 유니티로 세가지의 게임만들기 강의도 들을 수 있는건가요?
0
263
1
플레이 버튼이 없어요
0
758
1
전체 연습문제 다운방법, 현재 연습문제 파일이 깨져서 열립니다.
0
376
2
연습문제파일
0
262
1
중단점을 찾을수가 없습니다
0
470
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
Heap 과 Stack
0
303
1
앞선 강의에서 Instance와 연관 지어서
0
270
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
1226
1
출력만 있는 함수 관련 질문
1
422
2
문제 파일은 어디에 있나요?
0
235
1
제 윈도우용 visual studio에서는 코드행 앞에 아무것도 안찍힙니다.
0
321
2
혹 강의내용을 캡쳐해서 블로그에 공개해도 되나요?
0
364
1
비쥬얼 스튜디오에서 강의대로 입력했는데 콘솔창에 아무것도 안나타나네요.
0
263
1
저는 윈도우즈에서 모니터를 두개로 나눠 강의영상과 Unity작업창으로 나눠서 하고 있는데 무슨 얘긴지 하나도 모르겠어요
0
230
2





