[Java] 기본형 매개변수와 참조형 매개변수

Minuuu·2023년 1월 31일
0

Java

목록 보기
11/18

기본형 매개변수

  • 변수의 값을 읽기만 할 수 있다 (read Only)
  • 기본형 매개변수는 값 자체를 가져오기 때문에 변경할 수 없다
class Data {int x;} // Data 객체에 필드 x정의
main(){
  Data d = new Data(); // 인스턴스d 생성 (1)
  d.x = 10; // d인스턴스 x값 10 설정 (2)
  
  System.out.println(d.x); // 10출력
  change(d.x); 값을 바꾸는 함수 입력 (3)
  System.out.println(d.x); // 10출력
}

change(int x){
	x = 1000; // x값을 1000으로 설정
    System.out.println(x); // 1000 출력
}

위 코드를 보면 함수를 선언해 x값을 바꿨는데도 d.x의 값이 그대로 인 이유를 알아보자

  1. d라는 객체를 만들면 main메모리안에 주소값을 가진다(0x100)
  2. d.x = 10을 하면 d객체의 메모리에 접근해 그 값을 10으로 변경한다
  3. change메서드가 실행되어 이 주소값을 변경하는게 아닌 그 값을 복사하여 가져간다
  4. 그림으로 그리진 않았지만 change()에서 1000으로 변경하면 그 함수내에선 변경되지만 객체의 값 d.x는 변하지 않는다

참조형 매개변수

  • 변수의 값을 읽고 변경할 수 있다 (read & write)
  • 참조형으로 선언하면 값의 주소를 가져오기 때문에 값을 변경할 수 있다
class Data {int x;} // Data 객체에 필드 x정의
main(){
  Data d = new Data(); // 인스턴스d 생성 (1)
  d.x = 10; // d인스턴스 x값 10 설정 (2)
  
  System.out.println(d.x); // 10출력
  change(d.x); 값을 바꾸는 함수 입력 (3)
  System.out.println(d.x); // 1000출력
}

change(Data d){
	d.x = 1000;
    System.out.println(x); // 1000 출력
}

반대로 위와 같이 코드를 짜면
change()함수를 실행했을 때 객체 주소값을 받아 그 주소값에 접근하기 때문에
객체의 값 d.x가 바뀌어 1000이 출력되는 것을 알 수 있다

후기

복습의 단계로 자바를 다시 하고 있는데 당연히 되겠지 하는 부분을
직접 메모리로 그려보며 어떻게 돌아가는지 세세하게 알 수 있는 시간이 되어
더욱 더 어떻게 동작하는지 알 수 있는 시간이었다
다른 분들도 직접 메모리를 그려보는 습관을 가지길 바란다

profile
꾸준히 한걸음씩 나아가려고 하는 학부생입니다 😄

0개의 댓글