[Java] 메서드 호출과 값 전달 2

코드 속의 "진돌"·2024년 1월 9일
0
post-thumbnail

✅ 메서드 호출과 이름이 같은 변수


같은 문제를 호출자의 변수 이름과 매개변수의 이름을 같게 해서 한번 더 풀어보자.

✏️ MethodValue2

package method;

public class MethodValue2 {

  public static void main(String[] args) {
    int number = 5;
    System.out.println("1. changeNumber 호출 전, number : " + number);  // 출력 : 5
    changeNumber(number);
    System.out.println("4. changeNumber 호출 후, number : " + number);  // 출력 : 5
  }

  public static void changeNumber(int number) {
    System.out.println("2. changeNumber 변경 전, number : " + number);  // 출력 : 5
    number = number * 2;
    System.out.println("3. changeNumber 변경 후, number : " + number);  // 출력 : 10
  }
}

이번에는 main()에 정의한 변수와 메서드의 매개변수(파라미터)의 이름이 둘 다 number로 같다.



✏️ 실행 결과

main()도 사실은 메서드이다. 각각의 메서드 안에서 사용하는 변수는 서로 완전히 분리된 다른 변수이다. 물론 이름이 같아도 완전히 다른 변수다. 따라서 main()numberchangeNumber()number는 서로 다른 변수이다.



✏️ 실행 과정

changeNumber(number);  // changeNumber를 호출한다. main()의 number(5)
changeNumber(5);  // number의 값을 읽는다.

// main()의 number값 5가 changeNumber()의 number에 복사된다.
// 결과 : main()의 number(5), changeNumber()의 number(5)
void changeNumber(int number = 5)

// changeNumber()의 number에 값 10을 대입한다.
// 결과 : main()의 number(5), changeNumber()의 number(10)
number = number * 2;
main()의 number를 출력한다 : main()의 number의 값인 5가 출력된다.




✅ 메서드 호출과 값 반환받기


그렇다면 메서드를 사용해서 값을 변경하려면 어떻게 해야할까?

메서드의 호출 결과를 반환 받아서 사용하면 된다.

✏️ MethodValue3

package method;

public class MethodValue3 {

  public static void main(String[] args) {
    int num1 = 5;
    System.out.println("changeNumber 호출 전, num1 : " + num1);  // 출력 : 5
    num1 = changeNumber(num1);
    System.out.println("changeNumber 호출 후, num1 : " + num1);  // 출력 : 10
  }

  public static int changeNumber(int num2) {
    num2 = num2 * 2;
    return num2;
  }
}



✏️ 실행 결과



✏️ 실행 과정

num1 = changeNumber(num1);  // num1(5)
num1 = changeNumber(5);

// 호출 시작 : changeNumber()
// num1의 값 5가 num2에 대입된다. num1의 값을 num2에 복사한다. num1(5), num2(5)
int changeNumber(int num2 = 5)
num2 = num2 * 2;  // 계산 결과 : num1(5), num2(10)
return num2;  // num2의 값은 10이다.
return 10;
// 호출 끝 : changeNumber()

num1 = changeNumber(5);  // 반환 결과가 10이다.
num1 = 10;  // 결과 : num1(10)



🔔 정리


자바는 항상 변수의 값을 복사해서 대입한다.
(참고로 참조형이라는 것이 있는데, 이때도 똑같다. 결국 참조형 변수에 있는 값인 참조값을 복사하는 것이다.)

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글

관련 채용 정보