본문 바로가기
Java

나 혼자 공부하는 자바 (객체 값 받는 법)

by allwing12 2022. 10. 4.

메소드에 값을 전달하는 것과 객체에 값을 전달하는 것은 엄연히 다르다  

메소드에 객체를 전달할 경우 메소드에서 객체의 객체변수(속성) 값을 변경할 수 있다.

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 올라간 것을 볼 수 있다.

 

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

 

댓글