가장기본적인 내용이지만 변수란 말그대로 변하는 값이다.
아래 예제를보며 다시한번 의미를 생각해본다.
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 |