Java/JAVA 100 문제 풀이

자바 part.3 문제풀이 - Call by reference2

진이최고다 2023. 7. 10. 01:06

Call by value -> Call by reference 메서드 구현2

Call by value 메서드 호출을 Call by reference 방식으로 바꿔서 코드를 구현

이 문제는 앞서 다뤘던 문제의 Call by value 방식을 Call by reference방식으로 수정해서 보내라는 의미다.

a 값이 같은 결과가 나오도록 코드를 구현 수정


class TestNumber{
	int num;
	TestNumber(int num){
		this.num = num;
	}
}

public class method_methodCall3 {
	
	public static void sum(TestNumber a) {
		
		System.out.println("sum() 메서드안에서 a 값(TestNumber주소) : " + a);
		System.out.println(a.num);
		a.num = a.num + 400;
		System.out.println(a.num);
	}
	
	public static void main(String[] args) {
	
		// [1] : 객체 변수 선언
		TestNumber a = new TestNumber(100);
		sum(a);
		System.out.println(a.num);

	}
}
  1. `TestNumber` 클래스 : 이 클래스는 `num` 이라는 변수를 가지고 있다. 이 변수는 각 `TestNumber` 객체의 상태를 나타낸다. 생성자를 통해 `TestNumber` 객체가 생성될 때 `num의 값이 초기화된다.
  2. `method_methodCall3` 클래스 : 이 클래스는  `sum`이라는 정적메서드와 `main` 메서드를 포함하고있다.
  • `sum` 메서드 : 이 메서드는 `TestNumber` 타입의 매개변수를 받는다. 메서드 내에서는 전달된 객체의 주소와 `num`의 현재 값을 출력한 후, `num`에 400을 더하여 `num`의 값을 변경하고, 변경된 값을 출력한다. 여기서 중요한 점은 이 메서드에서 전달 받은 객체의 `num`값이 변경되면 원래 객체의 `num`값도 변경된다는 것이다. 이는 java에서 객체를 참조에 의해 전달하기 때문이다.
  • `main`메서드 : 이 메서드에서는 `TestNumber` 객체를 생성하고 `sum`메서드에 전달한 후, `sum`메서드 호출 이후의 `a.num`값을 출력한다. 
위 코드를 실행하면 다음과 같은 출력값이 나온다.
sum() 메서드안에서 a 값(TestNumber주소) : [TestNumber의 인스턴스 주소]
100
500
500

` sum()` 메서드를 호출할 때, `a`라는 `TestNumber` 객체의 참조가 전달되고, 이 `a` `num`값을 변경하면 원래 객체의 `num`값도 변경되는 것을 볼 수 있다. 이렇게 메서드를 통해 객체의 상태를 바꿀 수 있는 것이 `Call by Reference`방식이다.

 

 

 

 

인프런 - 예제로 공부하는 java 100 문제풀이.part.3