인프런 커뮤니티 질문&답변

Ambition님의 프로필 이미지
Ambition

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

배열

안녕하세요. 배열 강의 부분에서 공부를 하면서 "값 변경"에 대해 드릴 말씀이 있습니다.

해결된 질문

작성

·

379

0

 얕은 지식을 가진 제가 감히 강사님께 수정을 요청드려도 될 지 모르겠지만, coffees[2] = "에스프레소"; // 값 변경 에서 많은 학습하는 사람들이 주석에 쓰인 "값 변경"을 C나 C++에서 쓰인 value로 해석할 여지가 있으실 것 같아서 이것을 "참조값 변경"으로 수정해주시면 감사드리겠습니다.

왜냐하면 Java는 미리 public class로 선언한 부분에서 String class를 coffees로 객체명을 지어서 객체를 생성할 수 있고, 우측의 {"아메리카노", "카페모카", "라떼", "카푸치노"}; 인 참조 객체를 객체 변수에 할당하는 것이기 때문입니다.

저는 강사님의 넓고 깊은 지식을 강의를 들을 때마다 매번 감탄하면서 배우는 입장인데, 제가 주제넘었다면, 이 글은 바로 삭제하겠습니다.

항상 퀄리티 높은 강의를 제공해주셔서 감사합니다 😄

답변 3

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

아참, 그리고 저는 그저 자바 공부를 조금 더 일찍 시작했을 뿐 지금도 계속해서 배워나갈 부분이 많은 부족한 사람입니다. 그러니 '감히' 제게 수정을 요청하기보다는 강의에서 잘못되었거나 수정이 필요한 부분이 있다면 많은 분들의 올바른 지식 습득을 위해 '마음껏' 꾸짖어 주셔도 됩니다. 지식을 전달하는 과정에서 제가 잘못한 부분이 있다면 당연히 사과를 드리고 정정을 해야 하는 부분이니까요 😊 소중한 제안 글 다시 한 번 감사드려요, Ambition 님!

Ambition님의 프로필 이미지
Ambition
질문자

나도코딩 강사님은 항상 가르치는 강사의 입장이 아닌, 배우는 학습자들의 입장을 반영해서 강의를 정성스레 만들어주셔서 같이 배우는 저의 입장에서도 굉장히 체계적이고 단계적으로 배운다는 느낌을 받았습니다. 자바뿐만 아니라 파이썬에서도요. 사실 프로그래밍은 생소한 개념이 나오면 질겁하고 도망가기 마련인데, 나도코딩님께서는 개념을 직관적으로 그림으로도 이해시켜주고, 실생활에 친숙한 예제코드로도 어떻게든 이해시켜준다는 점에서 굉장히 만족스러웠습니다. 그런 세심한 배려를 전제로 깔고서 강의를 만드셨다는 것을 제가 미처 몰랐었네요 😭 다시 한번 감사드립니다!! :)

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

먼저 소중한 제안 진심으로 감사드립니다. 답변을 드리기 전에 많은 고민을 했고 어떤 게 최선일까 여러 번 답변을 수정하고 나서야 이 글을 적습니다 😅

저는 강의를 만들 때 순서대로 차근차근 단계를 높여가면서 자연스럽게 흐름이 이어지도록 하게끔 노력합니다. 처음부터 어렵거나 헷갈리는, 또는 복잡한 개념을 만나게 되면 금방 흥미를 잃어버리고 프로그래밍에 손을 놓을 수도 있거든요. 그래서 우선은 쉬운 개념부터 하나씩 익히면서 자신감을 가지고 스스로 배우는 재미와 보람을 느낄 수 있도록 합니다. 경험상 이렇게 강의를 만들었을 때 입문자분들도 큰 거부감 없이 흥미롭게 수업을 잘 따라와주셨습니다.

제 기억에 수학 시간에 처음으로 배운 수는 자연수였습니다. 그러다가 정수를 배우고, 나중에 실수를 배웠는데요. 자연수를 공부하고 있을 때 0 또는 -1, -2 와 같은 정수를 만나면 어려울 수 있습니다. 이제 막 손가락으로 하나 둘 사과를 세고 있는 어린이들에게 사과 -1 개라고 이야기하면 이해하기 어렵듯이 말이죠. 하물며 1.15, -3.87 과 같은 실수가 등장하게 된다면 아마 '으앙~' 하면서 울지도 모릅니다. 자연수를 배우고 있는 어린이들에게 "제일 작은 수는 뭐에요?" 물었을 때 "1이요" 라고 답한다면 이는 틀렸다고 볼 수 없을 겁니다. 그들이 배운 범위 내에서는 1이 가장 작은 수일 수도 있을테니까요.

배열 섹션에서 아직은 참조라는 개념이 등장하지 않았습니다. 자바에서 String 객체는 말씀하신 것처럼 불변(Immutable)이므로 한 번 생성된 String 객체의 값은 바꿀 수 없으며 새로운 값을 가진 String 객체를 만들어서 동일한 변수에 할당하는 식으로 참조를 변경하는 것이 맞습니다. 하지만 여기에서 이를 설명하게 되면 이제 막 공부를 시작한지 얼마 안되는 시점에서 조금 어렵게 다가올 수도 있습니다. 참조라는 것이 굉장히 중요한 개념이긴 하지만 조금 뒤에 클래스와 객체를 배우고 나서 공부하는 것이 더 낫겠다는 생각으로 저는 이 곳에 "값 변경" 이라고 주석을 달았어요. int, float 과 같은 기본 자료형들과 마찬가지로 등호 뒤에 적은 문자열로 변경되는 것은 맞으니까요.

"틀린 설명" 이라고 말씀하실 수도 있겠지만 "지금까지 배운 범위 내에서는 허용되는 설명" 으로 너그럽게 봐주시면 감사하겠습니다. 만약 제 강의 방식이 잘못되었다고 생각하시는 또다른 분들께서 지적을 해주신다면 해당 강의를 업데이트 하거나 수업 노트를 작성하여 정정하도록 하겠습니다.

함께 공부하시는 분들이 올바로 개념을 익히실 수 있게끔 지적해주신 Ambition 님의 소중한 제안 진심으로 감사드립니다 😊


혹시라도 Ambition 님께서 남겨주신 내용 관련하여 더 자세히 알고 싶으실 분들을 위해 아래에 설명을 작성해두겠습니다. 배열 단원을 공부하시는 시점에서 이 Q&A 를 보실 수도 있으실테니까요 🤗 하지만 아래 내용이 잘 이해되지 않는다고 하셔도 괜찮습니다. 나중에 다시 배우게 될 거에요.


배열 강의 영상 13:13 의 다음 예제에 강의에서 값 변경 이라고 주석을 입력하였습니다.

coffees[2] = "에스프레소"; // 값 변경

하지만 엄밀히 말하면 이는 coffees[2] 에 처음 설정한 "라떼" 라는 문자열 값 자체를 변경하는 것은 아니고 "에스프레소" 라는 새로운 문자열을 메모리 공간의 어딘가에 만든 뒤 이를 참조하도록 한 것입니다. 참조는 섹션 8. 클래스 단원에서 배우겠지만 간단히 설명하면 '가리킨다' 정도로 이해하시면 됩니다. 그래서 처음에는 "라떼" 라는 문자열이 있는 곳을 가리키다가 위 문장을 만나면 "라떼" 가 아닌 "에스프레소" 라는 문자열이 있는 곳을 가리키도록, 즉 참조 값을 변경하게 됩니다. 참조라는 개념은 지금까지 배운 내용 중에서는 문자열만 해당되며 int, float, boolean 변수에는 해당되지 않습니다.

0

Ambition님의 프로필 이미지
Ambition
질문자

공부할 때마다 자꾸 새로운 지식을 배워가서 정정합니다. 기본 자료형(Primitive data)인 int, double, boolean, char, float 같은 경우에는 value를 변수명에 할당하는 것이기 때문에 "값 변경"이 맞고, String같은 참조 자료형(reference type)은 우변에 있는 참조 객체를 좌변에 있는 객체변수에 할당하는 것이기 때문에 "참조 값 변경"이라고 합니다.

Ambition님의 프로필 이미지
Ambition

작성한 질문수

질문하기