본문 바로가기

프로그래밍/Java

19.12.19) Java - 변수와 메서드

목차

  • 메서드
  • 매개변수 전달 기법(parameter passing)

핵심

메서드는 매개변수를 받아 동작한 후 결괏값을 변수처럼 가지고 있는다

메서드

변수는 하나의 데이터를 담고 있다. 2개 이상의 데이터를 담을 땐 그 데이터의 주소를 담지, 데이터를 담는 것이 아니다.

메서드도 비슷한 맥락이다. 인자 값을 받아서 기능을 수행한다. 그다음 결과 값을 메서드 이름에 저장한다.

public int sum(int a, int b) {
    return a + b; 
}

int c = sum(3+5); // 3 + 5의 결과값이 sum에 담기고 그 값이 c에 할당된다. 

매개변수 전달 기법(parameter passing)

메서드를 호출할 때 메서드의 선언부로 매개변수를 전달하는 방법은 크게 2가지가 있다. 총 5가지 정도 있다고 한다.

한 번쯤은 들어봤을 두 친구들 자바 처음 배울 때 혼란에 빠트리는

  • Call by Value
  • Call by reference

Call by value

메서드 호출할 때 값(value)을 보낸다.

다 값으로 하지 안 할 수가 있나?

변수(메모리 공간)에 저장된 값을 직접 메서드 선언부로 보낸다. 그럼 메서드 선언부는 새롭게 변수(메모리 공간)를 만들고 기능을 한 다음 결괏값을 반환한다.

결론 : 메서드 호출부의 매개변수와 선언부의 매개변수는 기억공간(메모리 공간)을 공유하지 않는다

//호출부
int a = 3;
int b= 5;
int result = sum(a, b);

//선언부 
public int sum(int c, int d) { //c, d는 a, b와 기억공간을 공유하지 않는다.
    return c + d; 
}

Call by reference

메서드 호출할 때 매개 변수의 주소를 보낸다. 값을 직접 보내지 않고 주소를 메서드 선언부로 보낸다. 그럼 메서드 선언부는 받은 주소를 참조하는 새로운 변수를 만들어 작업한다. 그 뒤 결괏값을 반환한다.

결론 : 메서드 호출부의 매개변수와 선언부의 매개변수는 기억공간을 공유한다.

int[] arr = {10, 20};
int[] result = sum(arr);

int sum = 0;
public int[] sum(arr2){ //arr2는 arr과 같은 주소를 공유한다.
    for(int i : arr2) {
        sum += i;
    }
}