본문 바로가기
[JAVA]

[처음부터 다시 하는 JAVA] 메서드 호출과 값 전달

by 북방바다코끼리표범 2024. 1. 23.

처음부터 다시 하는 자바 공부는 인프런의 김영한 강사님의 강의를 참고해서 공부했다.

 

링크 : https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%9E%90%EB%B0%94-%EC%9E%85%EB%AC%B8

 

[지금 무료] 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 강의 - 인프런

프로그래밍에 처음 입문하는 분들을 위한 자바 강의입니다. 코드를 따라하면서 손쉽게 자바를 배울 수 있습니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 자바 입문[사진][임베

www.inflearn.com

 

메서드 호출과 값 전달1

지금부터 자바에서 아주 중요한 대원칙 하나를 이야기하겠다.(밑줄 100번 긋자!) 

 

자바는 항상 변수의 값을 복사해서 대입한다.
이 대원칙은 반드시 이해해야 한다. 그러면 아무리 복잡한 상황에도 코드를 단순하게 이해할 수 있다.

 

자바는 항상 변수의 값을 복사해서 대입한다.

changeNumber(num1) 호출 시점

  • num1 의 값 5를 읽고 복사해서 num2 에 전달 이 부분이 핵심

changeNumber메서드 실행 중

  • num2 의 변경은 num1 에 영향을 주지 않는다. 왜냐하면 앞서 값을 복사해서 전달했기 때문.

 

최종 결과

 

 

메서드 호출과 값 전달2

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

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
    } 
}
실행 결과
1. changeNumber 호출 전, number: 5
2. changeNumber 변경 전, number: 5
3. changeNumber 변경 후, number: 10
4. changeNumber 호출 후, number: 5

 

실행 과정
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가 출력된다.

 

 

메서드 호출과 값 반환받기
그렇다면 메서드를 사용해서 값을 변경하려면 어떻게 해야할까? 
메서드의 호출 결과를 반환 받아서 사용하면 된다.

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)

 

정리

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