• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

클래스 초기화와 값대입

20.08.07 19:14 작성 조회수 95

2

클래스에서 new를 이용해서 초기화를 하지 않으면, 값을 대입할수 없는 이유가 뭘까요? 클래스 호출해서 선언하는 순간 힙메모리에 일단 메모리 공간은 null값으로라도 만들어지는거 아닌가요? 그러면 그 null값의 메모리 할당공간안에 바로 값을 대입할수도 있어야 할거같은데,

어쨰서 일단은 new와 ()로 값을0으로 초기화 하던지, 안에 (0,1,2) 이런식으로 값을 넣던지 해야만, 값을 대입하고, 변경하는게 가능해지는건가요? 

구조체에서는 되는데, 클래스에서는 안되는 명확한 이유가 궁금합니다.

답변 1

답변을 작성해보세요.

1

일반적인 데이터의 경우와 큰데이터에 클래스를 사용하고 작은 데이터의 경우 구조체를 사용합니다

힙에 데이터가 있다는 이유는 실제의 데이터가 크기때문에 힙메모리에 올리는 것입니다

구조체가 값타입이고 클래스가 참조타입입니다

값타입은 바로 그곳에 데이터가 있고 참조타입은 참조를 한번 거쳐가야 데이터가 있습니다

그런데 C# 에서는 문법을 같이 사용하면서 이렇게 다른 동작을 하는 경우가 종종 있습니다 제가 예상하기로는 이게 바로 c#을 언어를 설계한 사람들이 생각하는 철학이라고 생각합니다 초보자의 경우 같이 둘다 new를 하고 접근을 쉽게 하라는 뜻입니다

구조체는 new 를 하는 동작이 생성자를 사용하기 위한 작업입니다 즉 선언시 메모리가 생겨납니다 클래스의 경우 변수 선언이 레퍼런스를 만드는 작업입니다 이상태에서 실제 데이터가 생기지 않습니다 실제 데이터는 new를 해야 생겨납니다 생성자도 같이 실행되고요

궁금하신점은 또 질문주세요 감사합니다