문제가 되는 영상 링크
https://www.youtube.com/watch?v=GIsr_r8XztQ
(현재 해당 영상에서 잘못 설명한 부분은 일부 삭제한 상태입니다)
영상에서 무엇을 잘못 설명했나?
대표적으로 영상 마지막에 아래와 같이 요약하면서 몇 가지를 잘못 설명했습니다 (지금은 이 부분은 잘라내서 더 이상 보이지 않습니다)
1. 객체는 힙 메모리에 저장된다고 일반화해서 잘못 설명
이건 저의 아주 뼈아픈 실책입니다
아주 오랫동안 저는 프로그래밍 언어에 상관없이 객체는 모두 힙 메모리에 저장된다고 잘못 알고 있었습니다
사실 조금만 생각해 보면, 언어마다 다를 가능성이 있고, 특히나 C/C++ 같이 OS나 하드웨어에 가까운 언어들은 메모리 사용에 자유도가 커서 더 다를 수 있다는 생각을 했어야 했는데, 이 부분을 오랫동안 의심조차 해보지 않았다는 것이 많이 뼈아프네요 ㅠ
매우 기본적이지만 중요한 지식인데 잘못 설명을 드려서 정말로 죄송한 마음입니다
프로그래밍 언어에 따라서는 (C++, GO 등등) 객체라도 스택 메모리에 생성할 수 있습니다
(다른 언어는 추가로 확인해보지 않았지만) C++의 경우 기본 자료형 변수라도 힙 메모리에 생성할 수도 있습니다
2. 참조 변수가 주소 값을 가진다고 부정확한 워딩 사용
자바의 경우 자바의 철학 자체가 메모리 주소를 직접 사용하는 것을 허용하지 않기 때문에, 참조(reference) 변수를 통해 객체에 접근할 수 있도록 합니다
그런데 그 참조 변수가 실제로 무엇을 값으로 저장하고 있는지에 대해서는 속 시원하게 알려진 바가 없습니다 (혹시 알려진 바가 있다면 알려주시면 정말 제게 큰 도움이 됩니다 ㅠ)
그럼에도 예상해 볼 수 있는 것은, 참조 변수가 본연의 역할을 잘 수행하려면 결국 내부적으로는 참조하는 객체의 주소 값을 어떤 형태로든 들고 있어야 할 겁니다
그래서 이 부분을 이해하기 쉽게 간단하게 설명하려고 '참조 변수는 객체의 메모리 주소 값을 가진다'라고 말씀드리게 됐는데, 돌이켜 보니 정확한 워딩이 아니었습니다
왜냐하면 C언어의 포인터처럼 주소 값 자체를 가진다고 오해할 수 있기 때문입니다
그래서 참조 변수의 개념을 다시 정의하면, 일반적으로 참조 변수란 이름 그대로 '어떤 객체나 변수를 가리키는(reference) 변수'라고 정의하는 것이 좋을 것 같습니다
(물론 내부적으로는 어떤 형태로든 참조하는 대상의 주소 값을 들고 있겠지만요)
3. 다른 언어의 GC 관련 몰랐던 부분
위 화면에서 텍스트로 명시하지는 않았지만 해당 영상에서 GC 관련 설명을 할 때, 직접 메모리를 관리하는 언어가 있다고 했는데 C나 C++을 염두한 말이었습니다
그런데 C나 C++도 GC 관련 기능이 추가됐다는 것을 알게 됐습니다
이 부분도 참고 부탁드립니다
정정 조치
1. 영상 마지막 요약 설명 통편집
유튜브에서는 이미 업로드된 영상이라도 일부를 잘라낼 수 있는 기능이 있기 때문에, 이 기능을 활용해서 잘못 설명하고 있는 마지막 요약 부분을 모두 잘라냈습니다
2. 제목과 프로필 이미지에 자바를 추가
자바 예제를 통한 설명이라는 것을 명확히 했습니다
3. 영상 설명 섹션과 댓글에 명시
영상 설명 섹션에서는 '변수나 객체가 메모리에 어떻게 저장되는지는 프로그래밍 언어마다 조금씩 다르지만 이번 영상에서는 자바를 예로 들어'라는 워딩으로 명시를 했습니다
pin 된 댓글에서도 이 글 링크와 함께 어떤 부분이 잘못됐는지를 명시했습니다
4. 유튭 커뮤니티에 공지
조회수가 2천이 넘은 영상이고 사안이 중대하기 때문에 이미 영상을 보신 분들이 다시 바른 정보를 가질 수 있도록 쉬운코드 유튭 커뮤니티를 통해서도 정정 공지를 했습니다
5. 영상에 카드를 통해 정정
영상의 흐름 때문에 일부 잘라내지 못한 부분은 우측 상단의 카드를 통해 잘못된 내용을 바로잡도록 했습니다
감사한 분들
1. ASCII CODE 님
ASCII CODE 님의 댓글 피드백 덕분에 저도 잘못 알고 있었던 혹은 불완전하게 알고 있던 지식을 바로 잡을 수 있었고,
쉬운코드 애청자 분들께도 올바른 지식으로 정정해서 다시 알려드리는 직접적인 계기가 될 수 있었습니다 👍
2. 세승 님
약 3개월 전 세승 님의 댓글을 보고, 뭔가 잘못됐음을 최초로 인지할 수 있었고, pin 댓글에도 일부 정정 내용을 적어뒀었습니다
(만약 이때 좀 더 자세히 검토했다면 보다 더 일찍 수정하고 공지할 수 있었을 텐데 제 자신이 아쉽습니다 ㅠ)
후기
우선 단순하면서도 중요한 내용인데 완전 잘못 알려드리게 된 것에 정말 죄송한 마음입니다
오랜 기간 '객체는 항상 힙 메모리에 저장된다'라고 잘못 알고 있었다는 사실이 8년 차 백엔드 개발자로서 뼈아프고 부끄럽고 그렇습니다..
솔직히 말씀드리면 이불 킥을 계속하고 있습니다
그럼에도 이렇게 자세히 설명드리는 이유는 잘못된 것을 알았을 때 인정하고 받아들이는 것이 좋은 개발자로 성장하는 데 매우 중요하다고 믿기 때문입니다
잘못이 있었음에도 체면이나 자존심 때문에 내가 틀렸다는 것을 인정하지 않고 변명이나 무시, 억지스러운 주장으로 일관한다면 그것이야말로 정말로 부끄러운 일이라고 생각하기 때문에
저의 실책이 뼈아프고 부끄럽지만 있는 그대로 솔직하게 말씀을 드리게 됐습니다
그리고 보통은 커뮤니티에 공지만 하고 따로 글을 쓰지는 않는데
이번 경우는 잘못 설명드린 부분의 심각성이나 영향도가 크다는 생각이 들어서 글로도 설명드리게 됐고요
앞으로도 잘못된 정보를 발견하게 되면 바로잡는데 최선을 다하는 쉬운코드가 되겠습니다
감사합니다!