본문 바로가기

백엔드/JAVA

JAVA 변수 와 매개변수의 값이 다른이유

 

가장기본적인 내용이지만 변수란 말그대로 변하는 값이다.

 

아래 예제를보며 다시한번 의미를 생각해본다.

public class JavaMemoryMain1 {
    public static void main(String[] args) {
        method1(10);  }
    
 static void method1(int m1){
        System.out.println(m1);
        int cal = m1 * 2;    // ** cal 변수확인
        
        method2(String.valueOf(cal)); //cal 변수의 값을 복사하여 method2로 전달함
    }

    static void method2(String m1){ //매개변수 m1
        System.out.println(m1);
       }

결과

 

10

20

 

method1 에 있는 cal이라는 변수가 왜 m1으로 바뀌는지 헷갈렸는데 나의 경우 택배와 같은 방식으로 이해를 했다.

 

위 예제에서  cal이라는 변수는 운송장에 붙어있는 발송자와 같다.

int cal = m1 * 2;
method2(String.valueOf(cal)); //타입변경 이유: method2 받는곳에서 String type으로 받음

 

 

그리고

static void method2(String m1){ //매개변수이고 String type 매개변수 m1으로 받는다.
System.out.println(m1);
       }

 

m1은 수신자로 보면된다. 그래서 송신자와 이름이 같아도 달라도 상관없다 중요한건 method2 라는 주소와 

cal 과 m1에 전달된 값이다.

 

또한  JAVA에서는  값 그대로 전달되는 것이 아니라 중간에 복사된 값을 전달한다는것이다. 

쉽게말해 택배르 보낼때 원본이아니라 사본을 보낸다고 생각하면된다. 내용은 똑같으니 이 또한 상관이없다.

 

그런데  변수선언하고 아무곳에서도 호출되지않는다면? 그냥 메모리 낭비인거다.

 

결론적으로 


해당 주소지를 가지고 있고 내용물이 포맷그대로(type 에 의해 파손되지않고) 전달될수 만 있다면 상관없는것이다.  


//char gpt 답변

변수명이 다름에도 불구하고 cal 변수가 String m1에 대입될 수 있는 이유는, 메소드 호출 시 
값이 복사되어 전달되기 때문입니다. 이 과정을 이해하려면 매개변수와 메소드 호출의 개념을
살펴봐야 합니다.

1. 메소드 호출 시 값의 전달
Java에서 메소드를 호출할 때, 값을 전달할 때 사용하는 매개변수는 호출하는 쪽에서 인자로 
전달한 값을 복사하여 메소드 내부에서 사용합니다. 이때, 변수명이 다르더라도 
값 자체는 전달됩니다.


4. 결론
변수명이 다르더라도, 메소드 호출 시 값이 복사되어 전달되기 때문에 서로 다른 변수명을 
사용해도 값이 전달됩니다. 여기서 중요한 것은 변수명이 아닌, 전달된 값이기 때문입니다.
이 과정에서 실제로 전달되는 것은 값이고, 해당 값이 메소드 내부의 매개변수로 복사됩니다.
반응형

'백엔드 > JAVA' 카테고리의 다른 글

JAVAIT 클래스  (0) 2024.09.25
절차지향 vs 객체지향(인프런실습)  (0) 2024.08.29
ch06. 타입변환과 다형 8/22  (0) 2024.08.28
java - map  (0) 2024.08.28
java - lambda  (0) 2024.08.28