목차
- 메서드
- 매개변수 전달 기법(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;
}
}
'프로그래밍 > Java' 카테고리의 다른 글
19.12.19) Java - 변수와 배열 (0) | 2019.12.20 |
---|---|
19.12.19) Java - 기본 자료형과 객체 자료형 (0) | 2019.12.20 |
19.12.18) Java - Calendar 프로젝트 (0) | 2019.12.19 |
19.12.18) Java - 변수, 자료형, 선언 (0) | 2019.12.19 |
19.12.17) Java - 구동 방식 (0) | 2019.12.17 |