고박사님 질문이 있습니다. string 예를들어.. string str = "Hello" 라고 하였을때 Hello라는 문자열 그자체는 사실 ROM의 text 영역에 생성된다고 알고 있습니다. 이때 str이 참조하는 주소는 ROM의 text 영역에 생성된 Hello가 맞을까요? 아니면 heap영역에 ROM의 text 영역에 생성된 Hello를 참조하는 변수가 만들어지면서 그 변수를 참조하는 것이 str이 될까요?
C#에서 문자열(string)은 불변(immutable) 데이터 타입이므로 문자열 리터럴("Hello")은 ROM(Read-Only Memory)의 텍스트 영역에 저장됩니다. 하지만 변수 str은 이 리터럴을 참조하는 스택 메모리 영역에 생성됩니다. 변수 str은 문자열 리터럴 "Hello"를 참조하게 됩니다. 이 변수는 힙(heap) 영역에 문자열 데이터가 저장되는 것이 아니라, 스택(stack) 메모리에 있는 변수이며, 이 변수는 문자열 리터럴을 가리킵니다. 다시 말해, str은 ROM의 text 영역에 저장된 "Hello" 문자열 리터럴을 참조하는 것이지, 힙 영역에 새로운 문자열이 생성되는 것이 아닙니다.
네 맞습니다. GameObject.Find("name")는 Hierarchy View에 있는 모든 오브젝트를 "탐색"해서 "name" 이름을 가지는 오브젝트를 찾기 때문에 오브젝트 개수가 많으면 많을수록 연산량이 더 늘어납니다. GetComponent()도 오브젝트에 포함된 컴포넌트를 모두 "탐색" 합니다. 그래서 Find류는 지양하라고 유니티에서도 얘기합니다. GetComponent()와 같은 메소드도 초기화(Awake, Start 등)에서 한 번만 호출해 변수에 저장해두고 쓰도록 권장합니다.
C#도 c++과 동일하게 포인터를 사용합니다. 다만 포인터 표시를 별도로 하지 않아도 클래스와 같은 참조 형식의 데이터이면 알아서 포인터 취급을 하고 주소 값 참조를 합니다. 클래스 변수를 만들고 GetComponent()와 같이 다른 오브젝트의 컴포넌트를 얻어오는 행위가 그 컴포넌트의 주소값을 참조하는 행위입니다
08:18 구조체(struct)는 값 형식, 배열(array)는 참조 형식 입니다. 참고하세요 :)
명강의 감시합니다 처음에는 이해하지 못했는데 계속 돌려보고 정보를 찾아보니 이해했습니다 감사합니다
C#은 자료 형식이 다양한 것 같아 혼동되었는데 영상에서 깔끔한 정리 덕분에 개념이 잘 잡혔습니다. 감사합니다!
유니티 C# 강의 잘봤습니다. 감사합니다.
좋은 강의 감사합니다!
영상 진짜 고퀄이네요
이런 영상 제작해주셔서 감사합니다
좋은 댓글 감사합니다^^
좋은 강의 감사합니다~ 개발 하다보니 c#이 부족하단 걸 느껴서 찾아보게 됐어요 짬날 때마다 공부하러 올게요 감사합니다
댓글 감사합니다^^
오늘 처음 공부 시작했어요.. 영상을 봐도 무슨말인지 모른다는게 함정이지만ㅜㅜ 이해 될때까지 공부해볼게요 영상감사합니다^^
댓글 감사합니다^^
한번에 이해가 가능하다면 좋겠지만.. 프로그래밍은 수학처럼 보고 실습을 계속 해보면서 익혀 나가야 하기 때문에 과정이 조금 멀고 험합니다.
대신 자기가 원하는걸 만들었을 때, 그걸 누군가 재미있게 해줄 때 찾아오는 쾌감이 큰 분야입니다 :)
영어로 치면 단순히 문법을 외우는 것이 아닌 단어의 어원을 이해하고 문법을 만들어내는 영상같습니다. 대단하십니다. 제가 강의 플랫폼 인프런타고 들어왔는데 유료 강의도 결제할 것 같습니다^^ 좋은 영상 감사드리고 앞으로도 잘 부탁드립니다~
이렇게 설명하면 더 딱딱한 느낌이 있어 지루하다고 느낄 수도 있는데 좋게 봐주셔서 감사합니다^^
카페 보고왔는데 굳은머리로 이해가 잘되네요 천천히 꾸준하게 봐보겠습니다.
좋은 댓글 감사합니다^^
완료!
좋은 영상 감사드려요!💚
댓글 감사합니다^^
좋은 영상 감사합니다!~
댓글 감사합니다^^
@@unitynote 저야말로 좋은 영상 고마워요!!~
고박사님 질문이 있습니다.
string 예를들어..
string str = "Hello" 라고 하였을때
Hello라는 문자열 그자체는 사실 ROM의 text 영역에 생성된다고 알고 있습니다.
이때 str이 참조하는 주소는 ROM의 text 영역에 생성된 Hello가 맞을까요?
아니면 heap영역에 ROM의 text 영역에 생성된 Hello를 참조하는 변수가 만들어지면서 그 변수를 참조하는 것이 str이 될까요?
C#에서 문자열(string)은 불변(immutable) 데이터 타입이므로 문자열 리터럴("Hello")은 ROM(Read-Only Memory)의 텍스트 영역에 저장됩니다. 하지만 변수 str은 이 리터럴을 참조하는 스택 메모리 영역에 생성됩니다.
변수 str은 문자열 리터럴 "Hello"를 참조하게 됩니다. 이 변수는 힙(heap) 영역에 문자열 데이터가 저장되는 것이 아니라, 스택(stack) 메모리에 있는 변수이며, 이 변수는 문자열 리터럴을 가리킵니다.
다시 말해, str은 ROM의 text 영역에 저장된 "Hello" 문자열 리터럴을 참조하는 것이지, 힙 영역에 새로운 문자열이 생성되는 것이 아닙니다.
12:27 GameObject.Find()는 지양 이라고 되어 있는데요~ 이유가 궁금합니다. 연산량이 많아서 일까요?
네 맞습니다.
GameObject.Find("name")는 Hierarchy View에 있는 모든 오브젝트를 "탐색"해서 "name" 이름을 가지는 오브젝트를 찾기 때문에
오브젝트 개수가 많으면 많을수록 연산량이 더 늘어납니다.
GetComponent()도 오브젝트에 포함된 컴포넌트를 모두 "탐색" 합니다.
그래서 Find류는 지양하라고 유니티에서도 얘기합니다.
GetComponent()와 같은 메소드도 초기화(Awake, Start 등)에서 한 번만 호출해 변수에 저장해두고 쓰도록 권장합니다.
@@unitynote 자세한 답변 감사합니다~ 그러면 타 게임오브젝트의 컴퍼넌트를 가장 효율적으로 가지고 오는 방법은 멤버변수 선언 후 인스펙터 창에서 링크 연결 시키는 것일까요? 아니면 다른 방법이 있나요?
@@nibbles00 번거롭지만 그게 가장 효율적입니다.
저는 만약 Instantiate()로 복제하는 경우에는 Instantiate() 해주는 **Spawner 같은 클래스에서 변수로 가지고 있다가 생성하면서 전달하는 방법을 사용합니다.
@@unitynote 빠른 답변 감사합니다~!!
궁금한게있습니다 만약에 주소참조하고싶을떈어떻게 해야될까요 c++시절엔 포인터로 참조했엇는대 c#에선 어떻게해야될지모르겟습니다 값복사가아닌 주소를 가져오고싶습니다
예를들어 인벤토리안에있는 포션을 아이템사용창에서 포션을사용하면 인벤토리에있는 포션도 갯수가 줄어야되는대 값복사면 아이템사용창에있는 포션갯수만 줄어들어서 어떻게 해결해야될까요..?
C#도 c++과 동일하게 포인터를 사용합니다.
다만 포인터 표시를 별도로 하지 않아도 클래스와 같은 참조 형식의 데이터이면 알아서 포인터 취급을 하고 주소 값 참조를 합니다.
클래스 변수를 만들고 GetComponent()와 같이 다른 오브젝트의 컴포넌트를 얻어오는 행위가 그 컴포넌트의 주소값을 참조하는 행위입니다
데이터 형식에서 배열은 참조 형식이 아닌가요...?
맞습니다. 구조체와 배열을 반대로 써놔서 전에 댓글을 달아뒀었는데 사라졌나보네요^^;
몇번 돌려보고 있는데 혹시 책이 있나요?
책은 따로 없습니다 :)
@@unitynote 넵 확인감사합니다