해결된 질문
작성
·
205
·
수정됨
1
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요,
강사님의 좋은 강의 감사드리며, 열심히 듣고 있습니다.
다름 아니라, MusicPlayerMain3 관련 질문드립니다.
우선 관련 코드를 보여드립니다.
MusicPlayerData data = new MusicPlayerData();
on(data);
volumeUp(data);
volumeUp(data);
volumeDown(data);
showStatus(data);
off(data);
}
static void on(MusicPlayerData data){
data.isOn = true;
System.out.println("음악 플레이어를 실행합니다.");
}
static void off(MusicPlayerData data){
data.isOn = false;
System.out.println("음악 플레이어를 종료합니다.");
}
이 코드에서
volumeUp과 volumeDown 메서드는 반환 타입이 void입니다.
main 메서드 안에는 볼륨 관련 메서드를 호출하고 있고,
따로 메서드 호출 결과를 저장할 변수는 선언되어 있지 않습니다.
그럼에도 volume 값이 메서드 호출 이후 지속적으로 업데이트 되는 것은,
기본적으로 main 메서드에서 생성한 data가 참조값을 갖고 있고, 메서드의 매개변수 역시 data와 같은 참조값을 갖고 있으므로, 따로 return type과 저장할 변수를 선언하지 않았어도 참조값이 가르키는 인스턴스의 value 값이 volumeUp, Down 메서드 호출 할 때마다 업데이트 되는 것인가요?
또한 만약 같은 코드가 기본형을 다루는 메서드 였다면 값이 업데이트 되지 않는 것인지 확인하고 싶습니다.
제가 이해한 것이 맞는지 확인하고 싶습니다.
감사합니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
core12님께서 질문하신 객체지향 프로그래밍, 구체적으로 메서드를 통해 참조 변수의 속성이 어떻게 변경되는지에 관한 내용은 많은 프로그래밍 학습자들이 궁금해하는 부분 중 하나입니다.
이에 대한 답변으로, core12님의 이해하신 부분은 맞습니다. Java에서는 객체의 참조를 통해 메서드를 호출할 때, 해당 메서드는 원본 객체에 대한 참조를 갖고 있으므로 메서드 내에서 객체의 상태를 변경하면, 해당 변경사항이 원본 객체에 반영됩니다. 이러한 방식으로 작동하기 때문에 volumeUp
과 volumeDown
메서드들이 void
반환 타입임에도 불구하고, 메서드 호출 이후 MusicPlayerData
인스턴스의 volume
값이 업데이트되는 것입니다. MusicPlayerData
객체에 대한 참조 자체가 메서드로 전달되므로, 해당 객체의 속성값을 메서드 내에서 변경 가능합니다.
기본형 변수(int, float, double 등)의 경우, 자바는 기본형 변수의 값을 메서드로 전달할 때 값을 복사하여 전달합니다(값에 의한 호출). 이 말은 메서드 내에서 기본형 변수의 값을 변경해도 호출한 측의 변수에는 영향을 주지 않는다는 의미입니다.
다음 질문 관련해서는 “스택 영역과 힙 영역”에서 비슷한 주제에 대한 설명이 있습니다. 이 답변에서는 메서드 호출 시, 객체의 참조와 기본형 데이터가 어떻게 전달되는지에 대한 기본적인 설명이 포함되어 있어, core12님의 이해를 더 돕는데 유용할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.