728x90
반응형
Call by value

 

메서드에 값(primitive type)을 전달하는 것과 객체(reference type)를 전달하는 것에는 큰 차이가 있다.

결론부터 얘기한다면 메서드에 객체를 전달할 경우 메서드에서 객체의 멤버변수 값을 변경할 수 있다.

 

// Updater 클래스 정의 : 메서드 정의
class Updater{
	void update(int count) {
		count++;
	}
}

// Counter 클래스 정의 : 멤버변수 정의
class Counter {
	int count = 0;
}

public class TestClass{
	public static void main(String []args) {
	
		Counter myCounter = new Counter(); // Counter 객체생성
		System.out.println("before update: "+myCounter.count);
		// → before update: 0
		
		Updater myUpdater = new Updater(); // Updater 객체생성
		/* 
		 * myUpdater 객체 내 update 메서드를 활용하여
		 * 인자 값으로 myCounter객체 내의 counter 멤버 변수를 넣는다.
		*/
		myUpdater.update(myCounter.count);
		System.out.println("after update:"+myCounter.count);
		// → after update:0
	}	
}
위와 같이 한개의 자바 파일에 2개 이상의 클래스 선언하기

파일 내에 TestClass, Updater, Counter 라는 클래스 3개가 정의되어 있다.
하나의 java파일 내에는 여러개의 클래스를 선언할 수 있다.
단 파일명이 TestClass.java라면 TestClass.java 내의 TestClass는 public으로 선언하라는 규칙이 있다.

 

Updater 클래스는 전달받은 숫자를 1만큼 증가시키는 update라는 메서드를 가지고 있다.

Counter 클래스는 count라는 객체 변수를 가지고 있다.

 

TestClass의 main메서드는 Counter클래스에 의해 생성된 객체의 객체변수 count의 값을

Updater 클래스를 이용하여 증가시키려고 시도하는 예제이다.

하지만 실행 해 보면 결과 값이 달라지지 않는다.

 

객체 변수 count의 값을 update 메서드에 넘겨서 변경시키더라도 값에 변화가 없다.

그 이유는 update 메서드는 값(int 자료형)을 전달 받았기 때문이다.

 

이제 예제를 다음과 같이 변경해보자.

// Updater 클래스 정의 : 메서드 정의
// + Updater 클래스 내 메서드의 인자는 Counter 객체를 받을 수 있다.
class Updater{
	void update(Counter counter) {
		counter.count++;
	}
}

// Counter 클래스 정의 : 멤버변수 정의
class Counter {
	int count = 0;
}

public class TestClass{
	public static void main(String []args) {
	
		Counter myCounter = new Counter(); // Counter 객체생성
		System.out.println("before update: "+myCounter.count);
		// → before update: 0
		
		Updater myUpdater = new Updater(); // Updater 객체생성
		/* 
		 * +생성된 myUpdater의 update 메서드를 통해
		 * 위의 생성된 myCounter 객체를 인자 값으로 넣는다.
		*/
		myUpdater.update(myCounter);
		System.out.println("after update:"+myCounter.count);
		// → after update:1
	}	
}

 

이렇게 메서드의 입력으로 객체를 전달받는 경우에는 메서드가 입력받은 객체를 그대로 사용하기 때문에
객체의 속성값을 변경하면 메서드 수행 후에도 객체의 변경된 속성 값이 유지된다.

728x90
반응형

'Language > Java' 카테고리의 다른 글

Java - Constructor  (0) 2023.03.26
Java - Inheritance  (0) 2023.03.26
Java - Class & Method  (0) 2023.03.25
Java - Object Oriented Programming  (0) 2023.03.25
Java - 제어문(conditional, iteration)  (0) 2023.03.25

+ Recent posts