Dico

[Java] Method 02 - 매개변수

매개변수 Parameter

기본형 매개변수

변수의 값을 읽기만 한다.

원본이 아닌 복사본이 변경된 것이라 원본에는 아무런 영향을 미치지 못한다.

public class Test {
    public static void main(String[] args) {

        Variables v = new Variables();
        v.iv = 2;

        method(v.iv);
        System.out.println("v.iv: " + v.iv);	  // v.iv: 2
    }

    public static void method(int iv) {
        iv = 10;
    }
}

class Variables {
    int iv;
}

참조형 매개변수

주소 값을 받기 때문에 변수의 값을 읽고 변경할 수 있다.

public class Test {
    public static void main(String[] args) {

        Variables v = new Variables();
        v.iv = 2;

        method(v);
        System.out.println("v.iv: " + v.iv);	  // v.iv: 10
    }

    public static void method(Variables V) {
        V.iv = 10;
    }
}
  • 간단한 처리는 배열을 이용

     암시적으로 간단히 처리할 때는 별도의 클래스를 선언하지 않고 배열을 이용할 수도 있다.

public class Test {
    public static void main(String[] args) {

        int[] a = {0, 0};

        method(a);			               // method() a[0]: 10
        System.out.println("a[0]: " + a[0]);	       // a[0]: 10
    }

    public static void method(int[] a) {
        a[0] = 10;
        System.out.println("method() a[0]: " + a[0]);
    }
}
  • 활용

     반환값이 없어도 메서드의 실행결과를 얻어오거나, 여러 개의 값을 반환 받는 것과 같은 효과를 얻어올 수 있다.

public class Test {
    public static void main(String[] args) {

        int[] result = {0, 0};
        method(1, 2, result);
        System.out.println("result[0]: " + result[0] + ", " + "result[1]: " + result[1]);
    }						   // result[0]: 3, result[1]: -1

    public static void method(int a, int b, int[] result) {
        result[0] = a + b;
        result[1] = a - b;
    }
}

가변인자 Variable arguments

타입... 변수명

내부적으로 배열을 이용하는 것.

  • 같은 타입의 여러 매개변수를 사용할 경우 쓰인다.
void method(int x, int y, int j) {}	   // before
void method(int... x) {}		   // after
  • 매개변수 중에서 제일 마지막에 선언한다.
void method(int x, long... y) {}
void method(int... x, long y) {}            // error
  • 인자의 개수를 가변적으로 할 수 있다.

    배열과 달리 인자가 아예 없어도 된다.

void method(int... x) {}

method();
method(1);
method(1, 2);
method(new int[2]);
void method(int[] x) {}

method();        // error
method(null);
method(new int[2]);

가변인자를 선언한 메서드를 오버로딩하면 어느 메서드를 호출한 것인지 구별하지 못하는 경우가 발생하기 쉽다.

가능하면 가변인자를 사용한 메서드는 오버로딩 하지 않는 것이 좋다.

참고 서적: 자바의 정석 3판