메소드에 값을 전달하는 것과 객체에 값을 전달하는 것은 엄연히 다르다
메소드에 객체를 전달할 경우 메소드에서 객체의 객체변수(속성) 값을 변경할 수 있다.
public class Main {
public static void main(String[] args) {
카운터 a카운터 = new 카운터();
System.out.println("before : " + a카운터.count);
숫자 a숫자 = new 숫자();
a숫자.숫자(a카운터.count);
System.out.println("after : " + a카운터.count);
}
}
class 카운터 {
int count = 0;
}
class 숫자 {
void 숫자 (int count) {
count++;
}
}
위 코드에서 숫자라는 클래스는 int count 라는 변수를 받아서 그 값을 1씩 증가시키는 코드이다.
그리고 카운터라는 클래스는 int count 라는 인스턴스 변수를 가지고 있고 int count 의 초기값은 0이다.
위의 코드는 간단하게 생각해서 숫자 클래스에서 int count를 받아서 1씩 증가시키려고 하는 코드이지만
실질적으로 출력을 하게 되면 값은 0,0으로 나오게 된다.
그 이유는 void 숫자 라는 것에서 받은 값은 자료형인 int count를 받았기 때문에 변화가 없게 된다.
public class Main {
public static void main(String[] args) {
카운터 a카운터 = new 카운터();
System.out.println("before : " + a카운터.count);
숫자 a숫자 = new 숫자();
a숫자.숫자(a카운터);
System.out.println("after : " + a카운터.count);
}
}
class 카운터 {
int count = 0;
}
class 숫자 {
void 숫자 (카운터 카운터) {
카운터.count++;
}
}
위의 코드에서는 숫자라는 클래스가 카운터라는 클래스 자체를 받아왔고 이 전에는 int count라는 값을 받아왔으면
이번에는 카운터 라는 객체 자체를 받아왔다는 차이가 있다.
그리고 메소드를 출력하는 것 자체도 a카운터로 카운터 객체만 불러온다.
이렇게 하게 되면 출력 값은 0, 1 이 나오게 되어 값이 1 올라간 것을 볼 수 있다.
메소드의 입력으로 객체를 전달받는 경우에는 메소드가 입력받은 객체를 그대로 사용하기 때문에 메소드가 객체의 속성값을 변경하면 메소드 수행 후에도 객체의 변경된 속성값이 유지된다.
'Java' 카테고리의 다른 글
| 나 혼자 공부하는 자바 (생성자) (1) | 2022.10.05 |
|---|---|
| 나 혼자 자바 공부하기 (메소드 알아보기) (1) | 2022.10.04 |
| 나 혼자 자바 공부하기 (클래스) (0) | 2022.10.03 |
| 2022-09-30 자바 (최대값 구하기) (0) | 2022.09.30 |
| 2022-09-30 자바(숫자만 뽑은 후 더하기) (1) | 2022.09.30 |
댓글