수강평 작성자 프로필 이미지
Jordy

2023. 08. 15.

수강평5

평균평점5.0

30% 수강 후 작성

틀린 내용이 너무 많음 초반부터 틀린 내용이 너무 많다 보니, 그 이후부터는 강의 내용이 사실인지 따로 검증해야 되고 내가 강의를 듣는 건지 오류 검수를 하는건지 헷갈리는 지경에 이르게 됨 특히 Array 는 Compile 단계에서 메모리 할당이 발생한다는 부분에서 기염을 토함 그게 또 Stack memory 영역에 할당된다 는 것도 웃음 포인트 이 강의를 듣고 면접관분들께 큰 웃음 주셨을 많은 수강생 분들께 심심한 위로를 전하며 저와 같은 추가적인 피해자가 발생하지 않기를 바라는 마음으로 수강평 남겨둡니다. 추가. 댓글에 강사님께서 아래와 같이 남겨주셨는데요. 이 노션의 내용도 틀렸음을 알려드립니다. https://midi-mandolin-36f.notion.site/Array-33d866e5193f49789dd2079c75412f96?pvs=4 "C언어" 에서 "Static Array" 는 프로세스의 데이터 영역(Stack, Data, Heap) 중 어느 곳이든 저장될 수 있으며, 그것은 개발자의 개발 의도(코드)에 따라 달라집니다. // 코드로는 아래와 같습니다. int[5]; // Data 영역에 저장 int main() { int[5]; // Stack 영역에 저장 int* arr = (int*)malloc(5 * sizeof(int)); // Heap 영역에 저장 // 메모리를 동적으로 할당했을뿐 배열 자체는 Static Array 입니다. } 만약 "C언어의 Static array는 compile 단계에서 stack메모리에 할당된다." 라는 명제가 참이라면, "C언어의 int형 변수는 compile 단계에서 stack메모리에 할당된다." 라는 명제 역시 동일한 메커니즘이기 때문에 참 입니다. "주사위를 던지면 3이 나옵니다. 1, 2, 4, 5, 6 은 예외입니다." 라는 설명이 맞는지 "주사위를 던지면 나오는 숫자는 1~6사이의 숫자가 랜덤하게 나옵니다." 라는 설명이 맞는지는 수강생 분들께서 판단하시면 되시겠습니다. 추가. 강사님이 어느새 노션을 또 수정해두셨는데요. 노션 내용의 논리대로면, 자바에서는 Array 뿐만 아니라 모든 자료구조가 Heap에 저장됩니다. 그 아래 교수님 답변이라는건... 무슨 주장을 하고 싶으신건지 모르겠네요. [특정 자료구조와 빌드 단계, 프로세스 메모리 영역 할당은 관련이 없다] 가 맞습니다. C언어 기준에서 1, 2, 3번으로 잘 적어주셨는데, 왜 결론은 뜬금 없이 [C언어 기준으로 보면 array는 compile 단계에서 stack영역에 할당] 으로 나오는지 모르겠네요. 아무튼 다들 고생이 많으십니다.

개발남노씨프로필 사진
개발남노씨
지식공유자

2023. 08. 15.

안녕하세요 jordy님. 수강생분들께 도움이 되고자 길고 진솔한 수강평 남겨주셔서 진심으로 감사드립니다. 다만 C언어 기준으로 Array는 Compile 단계에서 stack 영역에 메모리 할당이 된다는 내용은 오류가 없습니다. 하지만 JAVA관점에서는 다를 수 있어서 충분히 헷갈릴 수 있을 것 같아요. 해당 내용은 이 링크[https://midi-mandolin-36f.notion.site/Array-33d866e5193f49789dd2079c75412f96?pvs=4] 에서 자세히 설명드리도록 하겠습니다. 모두들 한번 보시면 도움이 많이 될 거에요!! 제가 수업에서 C언어 기준이라고 명확히 말씀드렸으면 혼동이 없었을텐데 죄송합니다. static array 과 dynamic array, linked list를 C언어 기준으로 설명드린 직후에 언급한 내용이라서 자연스럽게 C언어 기준으로 받아들이실줄 알았습니다. 그럼에도 불구하고 저의 강의가 jordy님의 기분을 많이 상하게 한것 같아서 저도 속상하네요ㅜ 지금 수강내역을 보니 intro파트를 제외하고 3개의 강의를 들으셨더라구요. 환불을 원하신다면 인프런문의하기를 통해서 진행하시면 됩니다. 저랑 인연이 닿지 않더라도 항상 하시는일 잘 되셨으면 좋겠습니다. :) 화이팅!

2023. 08. 15.

안녕하세요. 강사님 C언어 기준에서도 마찬가지로 "Array는 Compile 단계에서 stack 영역에 메모리 할당이 된다" 는 명제는 항상 참인 것이 아닙니다. 당연히 main 등 "함수" 안에서 int x[100] 과 같이 배열을 생성한다면, 지역 변수는 스택 영역에 저장되기 때문에 참이 맞습니다. 하지만, 이것은 C언어 컴파일러가 지역 변수를 스택 영역에 저장하기 때문이지 자료구조의 Array 에 대한 특성이 아닙니다. 그리고 main 함수 밖에 전역 변수 영역에 생성하거나 alloc (malloc) 등을 사용하여 동적 할당을 한다면, Array 역시 Stack 이 아닌 영역에 생성될 수 있습니다. 자료구조 특성과 언어적 특성을 혼용하여 설명하시니 혼란이 있을 수 밖에 없습니다. "어떠한 자료구조는 어느 메모리 영역에 생성된다" 같은 명제는 항상 참이 될 수는 없는 명제입니다. 말씀하신 것 처럼 언어마다 다를 수 있고, 동일한 언어라도 개발자의 의도에 따라 각기 다른 메모리 영역에 저장하도록 할 수 있습니다. 링크로 주신 노션에서 "해당 강의에서 Array는 C언어의 Static array를 의미합니다." 라고 말씀 하셨는데요. "C언어"에서 아래와 같은 코드가 있을 때, "Static Array" 의 메모리 할당 영역은 주석과 같습니다. int a[10000][10000]; // Stack 외 영역에 할당 int main() { int b[10000][10000]; // Stack 영역에 할당 }

개발남노씨프로필 사진
개발남노씨
지식공유자

2023. 08. 15.

좋은 답글 감사합니다. 예, 맞습니다. “array는 compile 단계에서 stack 영역에 메모리 할당이 된다” 라는 명제는 항상 참인 것은 아닙니다. 언급해주신 덕분에 다른 분들께서도 보실 수 있도록 해당 예외사항은 강의 커뮤니티(질문)에 링크해 두었습니다. 감사합니다. 자료구조, 알고리즘, 네트워크, 데이터베이스, 운영체제라는 과목은 4년제 대학에서는 3~4년에 걸쳐서 배우는 광범위하고 굉장히 깊은 내용들입니다. 사실 4년 동안 교수님들께 배운 내용들도 면접 때 받을 질문을 모두 커버하지 못합니다. 저 또한 면접을 한창 준비하던 시절, 원서로 된 두꺼운 책들을 하나하나 살펴보며 하나하나 심도 있게 준비했습니다. 그것이 저의 공부 성향이랑 맞았거든요. 다만 수십 번의 면접을 보고, 결국 원하던 기업에 입사하면서 되돌아보니 아쉬움이 남았습니다. ‘처음에 누군가가 가이드 역할을 해주었다면 내 소중한 시간들을 절약할 수 있었을 텐데’하고 말이죠. 그래서 저는 이 강의를 만들 때 제일 집중했던 것은 ‘학습 시간을 줄여주는 것’이었어요. 가령 dynamic array의 resize과정을 doubling이라고 설명드렸는데, 실제로 각 언어에서 구현된 것을 보면 정확히 2배를 하지 않죠. 하지만 이런 내용을 강의에서 모두 언급할 수 없는 이유는, 이것까지 하면 과한 설명이라고 생각했기 때문입니다. 사실 강의를 만들다 보니 ‘모든 내용’을 설명하여 시간을 늘리는 것보다, ‘핵심 내용’을 요약하여 시간을 줄이는 과정이 더 어렵다는 것을 알게 됐습니다. 그 과정에서 혼란을 야기했던 것 같습니다. 강의에 대해 다시 한번 생각할 기회가 됐습니다. 감사합니다.

2023. 08. 15.

답변 감사드립니다. 맞습니다. Dynamic Array 의 Resizing 역시 Java 에서는 50% 씩 증가로 구현되어 있습니다. 저도 강의를 업으로 해봤던 입장에서 한번에 완벽하게 설명하는 것이 힘들다는 점을 잘 알고 있습니다. 첫 리뷰에서 다소 과격한 표현을 사용했던 점에 대해서 진심으로 사과드리며, 반성하는 의미에서 수강평을 지우거나 수정하지 않겠습니다. 제가 이렇게 반응했던 이유는, 저도 많은 후배들을 가르쳐 봤던 선배로서 취업 준비생에게는 적지 않은 강의 비용인데, 강의 내용에 조금씩 아쉬운 부분이 있었기 때문인 것 같습니다. 그래도 제가 아쉬웠던 몇몇 부분을 제외한 대부분의 내용에서 좋은 강의해주셔서 감사드리며 저도 많이 배웠습니다. 감사합니다.