수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

call by reference의 의미

우수리

2023.04.01

[java 질문입니다]
call by reference는 주소값을 넘기기 때문에 메소드에서 인자로 넘어온 값을 변경했을 시에 그 값이 콜을 한 영역에서도 변경상태가 적용되는 것으로 알고 있습니다.
그런데 그 인자를 다른 값으로 변경하는 것은 안됩니다.

예를 들면 다음과 같은 것이지요

public void func(Map m) {m = null; // 1) null로 변경
Map mm = new HashMap();

mm.put(123,456);

m = mm; // 2) 다른 객체 값으로 변경

}
주소를 넘기기 때문에 그 주소를 참조하여 값을 변경하는 것은 가능하지만 주소 자체 변경은 불가능 하다는 말인듯 합니다.

제가 과연 옳게 생각하고 있는 것입니까?

프로그램을 하다가 저런 경우가 발생하여 질문을 드립니다.
요즘 들어서 부쩍 기초가 많이 부족하구나 라고 느끼고 있습니다. ;;

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • Creative

    제가 알기로는 call by value로 하면 copy function이 수행됩니다. call by reference로 주소만 넘겨 받는게 빠른 방법이죠. string이나 pointer를 사용할때도 call by value로 하면 쓸데없는 copy에 의해 느려지게 됩니다.
    위의 경우에는 call by reference로 하시려서든,

    public void func(Map &m) { // &를 쓰셔야 할듯,
    // m은 미리 initialize되어야겠죠?

  • 일본어못해요

    이렇다고 하네요...
    자바에서는 call by reference라는 말은 원래 없고 call by value만 존재한답니다.
    객체를 넘길때는 주소값 자체가 call by value로 복사되어 넘어간다고 하네요.
    따라서 메소드에서 객체를 변화시킬수 있는 것은 객체의 주소를 알수 있어서이고 그 주소를 만일 다른 주소로 대체하거나 null로 바꾼다 하더라고 주소의 복사값이기 때문에 기존의 주소를 그대로 살아 있고 단지 메소드 내부에서 그 주소를 참조할 방법이

  • 방방

    수다님이 하시는 생각이 맞지 않나요? 메서드인자 m은 메서드호출시의 인자가 참조하고 있는 주소를 똑같이 참조만 하고 있는 새로운 변수이기 때문에 m=null을 설정함과 동시에 그에 대한 참조는 사라진다고 생각합니다. 결국 m=mm;이 되더라고 m은 벌써 호출시에 건네준 인자의 메모리 주소를 잃었기 때문에 메인에서 설정값을 참조하는건 불가능하다고 생각합니다.

  • 이룩

    메소드로 넘어온 변수(위의 경우에는 m)을 변경하므로써 메소드를 호출할때 넘겨준 변수 값을 변경하는 질문이었습니다.
    예를 들면 메인메소드에서 Map m을 위의 메소드로 넘겼을 시에 메소드에서 인자로 넘어온 m 값을 null로 할당을 하게 되면 그게 메인메소드에서 반영이 되는지 여부를 알고 싶었습니다.

    직접 해봤을 시에 적용이 안되서 call by reference의 의미를 다시 알고자 했던 것입니다 ^^;;
    메소드로 넘겨서 객체를 변경할 수 있는 이유

  • 볼수록매력

    음.. 어떤 질문인지 제가 파악못한걸수도, 제가 모르는 것일 수도 있지만
    주소 자체를 변경한다는점이 무슨의미인지 파악을 잘 못하겠네요^^;
    만약 제가 생각하는 것이라면 java 프로그래밍을 하면서 크게 신경쓸 이유가 있을까? 합니다.
    물론 단순히 궁굼증이라면 모르지만^^;;

번호 제 목 글쓴이 날짜
2697487 html5 css3 학원 추천좀해주세요 (1) 예그리나 2025-06-08
2697459 이런 질문도 답변해주실지는 모르겠습니다만 병특에 관한 질문입니다. 승아 2025-06-08
2697422 가운데 정렬하는 방법좀 흑흑흑... (3) 목련 2025-06-07
2697395 홈페이지 기본구조에 대해서... (6) 모든 2025-06-07
2697366 에..조금 짜보고 다시 질문입니다. (2) 나샘 2025-06-07
2697333 li 가운데 정렬.....도와 주세용... (7) 초고리 2025-06-07
2697284 이미지를 흐리게 (2) 난새 2025-06-06
2697258 VC++ 6.0(studio)을 깔면서 재미가 붙었는데..ㅠㅠ (4) 앵겨쪼 2025-06-06
2697228 WorkFlow가 궁금합니다.. 다들 어떻게 하시는지.. (1) 애기 2025-06-06
2697174 button 태그와 input 태그의 type 속성을 사용한거와 차이 (1) 여름 2025-06-05
2697149 익스플로러에서 이미지로딩이 느려지는건지..깨져서 나옵니다. (4) 든솔 2025-06-05
2697122 호환성질문 (5) 미즈 2025-06-05
2697066 웹에서 다른이름으로 저장 할때 파일 이름 저장하는 방법은? 코이 2025-06-04
2697043 position:absolute; 로 하면 사라져 버리는 이유 ㅠㅠ (3) 풍란 2025-06-04
2697016 테이블 thead tbody 질문 아란 2025-06-04
2696989 contact us 페이지는 dl로 작성하는게 좋을까요? (4) 파라 2025-06-03
2696964 img 태그 질문드려요 (9) 연블루 2025-06-03
2696907 [질문] 올플래시 메뉴 고정할수 있는[수정] (4) 맨삶이 2025-06-03
2696875 책구입 후 따라하다가 ShortCode Ultimate 오류 가지등 2025-06-02
2696844 css 마우스 오버시 display:block되는 영역 질문드립니다 ㅠㅠ (2) 갅쥐누뉨 2025-06-02
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com