Java 메소드 호출과 파라미터

이 글에서 파라미터를 기본형 전달하는 단계로,
자바를 배우기 시작하는 사람에게 많이 포기하는 구간으로 중요하다!

메소드 호출과 파라미터를 확인하기 전에 변수의 값 복사에 대해서 알아보도록 한다.

참고로 자바의 기본형의 복사는 변수 값을 복사해서 대입한다.

Java 코드 예

public class VarCopy {
    public static void main(String[] args) {
        int num1 = 100;
        int num2 = num1;
        num2 = 500;
        System.out.println(num1);
        System.out.println(num2);
    }
}

Java 코드 실행

100
500
  • 변수 num2 를 변수 num1으로 할당 한다
  • 변수 num2 를 값을 변경하여도 num1은 영향을 주지 않는다는 것을 볼 수 있다.
    • 변수 num2를 변수 num1 할당 시 "100"을 복사해서 변수 num2 대입한 것이다.

2배수 코드 출력하기

메소드를 호출로 전달한 정수를 2배수로 출력하는 코드이다.

Java 코드

public class NumberDouble {
    public static void main(String[] args) {
        int num1 = 100;
        System.out.println("1. num1 = " + num1);
        printDouble(num1);
        System.out.println("3. num1 = " + num1);
    }

    public static void printDouble(int num2) {
        num2 *= 2;
        System.out.println("2. num2 = " + num2);
    }
}

Java 2배수 출력

1. num1 = 100
2. num2 = 200
3. num1 = 100
  • 변수 num1 출력하고 printDouble(num1); 메소드 호출로 인수로 전달하였다.
  • printDouble 메소드는 파라미터로 전달 받은 값을 복사해서 2를 곱한 후 출력한 후 종료한다.
    • printDouble 메소드 종료 시 모든 변수의 메모리를 모두 반환한다.
  • main 으로 돌아와 변수 num1 호출하였다.
    • num1 = 100 이 이유는 메소드로 복사해서 전달하였기 때문에 num2와 관계가 없기 때문에 200이 아닌 100으로 호출한다.

num1 과 num2를 같은 이름으로 number 인 경우

Java 코드

public class NumberDouble {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("1. number = " + number);
        printDouble(number);
        System.out.println("3. number = " + number);
    }

    public static void printDouble(int number) {
        number *= 2;
        System.out.println("2. number = " + number);
    }
}

Java 출력

1. number = 100
2. number = 200
3. number = 100
  • 변수와 파라미터 이름을 같더라도 printDouble 메소드 호출로 전달하게 되면 printDouble 코드 블록에만 사용하는 지역 변수가 되므로 main 메소드의 number 변수와 영향을 받지 않는다.

2배 곱한 값을 main 메소드로 전달하고 싶다면?

메소드의 반환타입을 지정하여 메소드호출로 반환되는 값을 할당해주도록 한다.

Java 코드

public class Logical1 {
    public static void main(String[] args) {
        int num1 = 100;
        System.out.println("1. num1 = " + num1);
        num1 = printDouble(num1);
        System.out.println("3. num1 = " + num1);
    }

    public static int printDouble(int num2) {
        num2 *= 2;
        System.out.println("2. num2 = " + num2);
        return num2;
    }
}
  • printDouble(num1) 호출 후 반환 값을 변수 num1 로 할당하고 있다.

Java 출력

1. num1 = 100
2. num2 = 200
3. num1 = 200