본문 바로가기

JAVA

자바 메서드 매개변수에 객체 넣어서 전달하기

메서드의 매개변수로 1) 원시 자료형의 값, 2) 객체 형태로 전달할 수 있다. 일반적으로 1) 원시 자료형인 int, short, long 등을 매개변수로 넣어서 전달한다. 하지만 두가지 경우 리턴 값이 다르게 나올 수도 있다.

1) 메서드 매개변수로 자료형 전달할 경우

public class Object01 {

    // 1. 매개변수로 자료형 전달
    int objAdd(int a){
        // a는 매개변수안에서만 쓰이는 변수이다.
        a++;
        return a;
    }

    public static void main(String[] args) {
        int b = 1;
        Object01 obj = new Object01();
        obj.objAdd(b);
        System.out.println(b);
    }
}

 

b를 출력해보면 2일것 같지만 출력값은 다음과 같이 1이다. 그 이유는 메서드 objAdd()의 매개변수인 int a는 새로 객체 생성한 obj의 b에 영향을 미치지 않기 때문이다. objAdd()의 매개변수인 int a 오직 메서드 안에서만 쓰인다.

#출력
1

 

그래도 objAdd() 메서드를 이용해서 main 메서드의 b 값을 증가 시키는 방법도 있다.

objAdd()메서드에 main 메서드의 변수인 b를 입력값으로 넘기는데, 돌려받는 값을 다시 b에다 넣는 방법이다. objAdd()가 실행되어 리턴 값으로 대입되는 것이다.

public class Object01 {
    int objAdd(int a){
        a++;
        return a;
    }

    public static void main(String[] args) {
        int b = 1;
        Object01 obj = new Object01();
        b = obj.objAdd(b);
        System.out.println(b);
    }
}
#출력
2

2) 객체 형태로 전달할 경우

다음은 objPlus()메소드를 객체로 매개변수를 이용했을 경우이다. void 리턴값이 없어도 출력값은 2가 나오게 된다.

[ main 함수 ]

- Object01 클래스의 객체변수 a의 값을 1로 초기화 시켜줬다.

- obj.objPlus(obj) 메소드 호출시 객체(obj)로 전달했더니 메서드를 이용하여 값을 증가시킬 수 있다.

public class Object01 {
    int a;

    // 2. 객체형태로 전달
    void objPlus(Object01 obj){
        obj.a++;
    }

    public static void main(String[] args) {
        Object01 obj = new Object01();
        obj.a = 1;
        obj.objPlus(obj);
        System.out.println(obj.a);
    }
}
#출력
2