[Java] Argument로 참조값을 보내면?

2024. 11. 16. 11:19·Java/OOP

 

**대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.  (김영한 강의 중)

 

저 대원칙을 꼭 기억하고 계속 생각하자.

 

 

 

 

public class MethodChange {
    public static void main(String[] args) {
        DataA dataA = new DataA();
        dataA.value = 10;

        System.out.println("메서드 호출 전 dataA의 값 = "+dataA.value);

        changeValueMethod(dataA);

        System.out.println("메서드 호출 후 dataA의 값 = "+dataA.value);
    }

    static void changeValueMethod(DataA da){
        da.value = 500;
    }
}

class DataA{
    int value;
}

 

 

해당 코드의 출력은 어떻게 될까?

메서드 호출 후 dataA.value=10일까?

 

 

 

 

 

dataA.value 멤버 변수의 값이 메서드 호출 후 변경되었다.

 

코드에 대해 자세히 살펴보자.

 

 

 


 

 

 

자바에서 대입연산 자체가 값을 복사해서 저장한다는 것을 꼭 기억해야 한다. (대원칙)

 

DataA dataA = new DataA();

 

 

인스턴스 생성 과정이다. dataA는 DataA타입의 메모리상 생성된 참조값(객체주소)을 지니고 있다.

 

 

 

 

changeValueMethod(dataA);

static void changeValueMethod(DataA da){
        da.value = 500;
}

 

여기서 void changeValueMethod를 호출한다. 

해당 메서드는 매개변수(파라미터)가 존재한다. 매개변수의 타입은 DataA이다.

 

메서드 호출 할 때 매개변수에 맞게 DataA타입의 참조값을 인자(Argument)로 보낸다.

 

dataA는 참조값을 가지고 있다. 그 값을 매개변수에 대입 연산 시키는 것이다.

 

다시 말해 DataA da = dataA인 것이다. 결국 매개변수와 인자값은 모두 같은 참조값을 가지고 있다.

 

 

같은 객체의 멤버 변수를 수정하는 것이므로 메모리상 어떤 한 객체를 수정한 것이다.

 

코드 외관상 서로 다른 값을 수정하는 것처럼 보이지만 결국에는 같은 객체를 참조하므로 어떤 참조변수로 멤버 변수를 수정해도 동일하다는 것이다.

 

 

 

 

    public static void main(String[] args) {
        DataA dataA = new DataA();
        System.out.println(dataA);
        changeValueMethod(dataA);
    }

    static void changeValueMethod(DataA da){
        System.out.println(da);
    }

 

'

 

결국 같은 참조값(주소값)이다.

'Java > OOP' 카테고리의 다른 글

[Java] 변수(지역, 인스턴스, 클래스)  (0) 2024.12.01
절차 지향 프로그래밍VS객체 지향 프로그래밍  (1) 2024.11.20
[Java] 기본형vs참조형  (4) 2024.11.15
[Java] 객체 배열  (0) 2024.11.13
[Java] 객체 사용 방법 (OOP)  (0) 2024.11.11
'Java/OOP' 카테고리의 다른 글
  • [Java] 변수(지역, 인스턴스, 클래스)
  • 절차 지향 프로그래밍VS객체 지향 프로그래밍
  • [Java] 기본형vs참조형
  • [Java] 객체 배열
oneH
oneH
  • oneH
    Hello WeonHyeok!
    oneH
  • 전체
    오늘
    어제
    • 분류 전체보기 (53) N
      • CSS (1)
      • Javascript (5)
        • JS자료구조,알고리즘 (1)
      • Java (14)
        • OOP (9)
      • JSP (1)
      • Computer Network (2)
      • 이론 컴퓨터 (2)
      • Project (0)
      • Algorithm&Data Structure (12)
      • 데이터베이스 (3)
      • Spring,SpringBoot (2) N
      • Git & GitHub (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컴퓨터 네트워크
    오블완
    JS
    티스토리챌린지
    폰노이만 아키텍쳐
    선택자
    컴퓨터구조
    Git
    Java
    object
    Selector
    자바
    덱
    링크드 리스트
    큐
    OSI7계층
    combinators
    Stack
    JavaScript
    선형 큐
    컴퓨터네트워크
    Algorithm
    math
    SQL
    이진검색
    컴파일
    스택
    프로토콜
    MySQL
    OOP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
oneH
[Java] Argument로 참조값을 보내면?

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.