메도스에 값(primitive type)을 전달하는 것과 객체(reference type)를 전달하는 것에는 큰 차이가 있다.
메소드로 객체를 전달할 경우 메소드에서 객체의 객체변수(속성) 값을 변경할 수 있게 된다.
Counter.java
class Updater {
public void update(int count) {
count++;
}
}
public class Counter {
int count = 0; // 객체변수
public static void main(String[] args) {
Counter myCounter = new Counter();
System.out.println("before update:"+myCounter.count);
Updater myUpdater = new Updater();
myUpdater.update(myCounter.count);
System.out.println("after update:"+myCounter.count);
}
}
Updater 클래스는 전달받은 숫자를 1만큼 증가시키는 update라는 메소드를 가지고 있다. Counter 클래스는 count라는 객체변수를 가지고 있다. Counter클래스의 main메소드는 Counter클래스에 의해 생성된 객체의 객체변수 count의 값을 Updater클래스를 이용하여 증가시키려고 시도하는 예제이다.
before update:0
after update:0
객체 변수 count의 값을 update메소드에 넘겨서 변경시키더라도 값에 변화가 없다. 그 이유는 이전 챕터에서 알아본 것과 같이 update 메소드는 값(int 자료형)을 전달받았기 때문이다.
class Updater {
public void update(Counter counter) {
counter.count++;
}
}
public class Counter {
int count = 0;
public static void main(String[] args) {
Counter myCounter = new Counter();
System.out.println("before update:"+myCounter.count);
Updater myUpdater = new Updater();
myUpdater.update(myCounter);
System.out.println("after update:"+myCounter.count);
}
}
위와 같이 Updater 메소드의 입력 항목을 int 형에서 Counter counter와 같이 객체를 전달 받도록 변경하고 메소드를 호출하는 부분도 변경하였다.
before update:0
after update:1
이렇게 메소드의 입력으로 객체를 전달받는 경우 메소드가 입력받은 객체를 그대로 사용하기에 메소드가 객체의 속성값을 변경하면 메소드 수행 후 객체의 변경된 속성값이 유지되게 된다.
'개발 > JAVA' 카테고리의 다른 글
[JAVA] 생성자 (0) | 2020.06.15 |
---|---|
[JAVA] 상속 (0) | 2020.06.11 |
[JAVA] 메소드 (0) | 2020.06.10 |
[JAVA] 클래스 (0) | 2020.06.08 |
[JAVA] 제어문 - for each (0) | 2020.06.06 |