본문 바로가기

Language/Java

[JAVA] Method호출 방식(Call by Reference, Name, Value)

Java에서 Method(함수)를 호출 하는 방식에는 3가지(Reference가 빠진 2가지라고 하기도 한다)가 있다.

Call by Reference(참조에 의한 호출), Call by Name(이름에 의한 호출), Call by Value(값에 의한 호출)이 있다.

 

1. Call by Name - 이름에 의한 호출

 

이름에 의한 호출이란 함수를 호출할 때 함수 이름만으로 호출을 하는 방식으로

test라는 이름을 가진 함수가 있을때 코드상에서 매개변수 없이 test();만을 써서 함수를 호출 하는 방식이다.

주로 반환받을 값이 없는 기능을 수행하는 함수의 경우 사용하는 방식이다.

 

2. Call by Value - 값에 의한 호출

 

값에 의한 호출은 함수를 호출 할 때 매개변수로 값을 넣고 호출하는 방식이다.

예시로 계산기를 만들 때 덧셈을 하기 위한 함수로 add()를 만들고 매개변수로 num1, num2를 보낸다고 가정할 때,

add(num1, num2)이런 식으로 호출 할 수 있다.

덧셈한 결과를 반환받는 방식으로 호출을 하게되면 result = add(num1, num2); 이렇게 호출하여 저장하면 된다.

 

3. Call by Reference

 

참조에 의한 호출은 값에 의한 호출과 비슷한 방식이다.

C를 하고 넘어온 경우에는 함수의 매개변수로 배열의 포인터를 넘겨서 다른 함수에서 데이터를 제어할 수 있게 하는 경우와 비슷하다 생각하면 된다.

Java를 처음으로 배운 경우에는 길이가 10인 int형 배열을 만들고 0부터 9까지 값을 넣는 함수를 만들어보면

간단하게 만들면

static void addArray(int arr[]){
    
 	for (int i = 0; i < arr.length; i++) {
		arr[i] = i;
 	}
    
 }

이와 같은 방법으로 만들 수 있다.

 

함수의 매개변수 부분을 보면 int형 배열을 받은 것을 알 수 있는데 리턴타입이 void인것을 볼 수 있다.

이제 main을 봐보자.

 

public static void main(String args[]){

	int arr[] = new int[10];

	addArray(arr);
    
    for (int a : arr) {
    
    	System.out.println(a);
    
    }

}

위와 같이 메인에서 addArray함수를 호출 할 때 배열 자체를 매개변수로 넘겼다.

이렇게 코드를 짜고 실행시키면 값이 정상적으로 들어가고 출력도 되는것을 볼 수 있다.

값을 넣고 반환하여 새로 배열을 초기화해주지 않았음에도 기존 배열에 값이 들어가는 이유는 배열이라는 것은 기본 타입의 변수가 아니라 Reference Type변수라 Heap영역에 있는 데이터의 실제 주소를 사용하기 때문에 위와 같은 방식으로 사용하여도 된다.

 

주소값을 이용하는 방법은 처음 접하는 사람한테는 충분히 어려울 수도 있다.

코딩을 접했던 사람들에게도 이해하기 힘들고 하는 부분인지라 계속 하게되면 이해하는 날이 올 것이다.

 

(글 내용에 오류나 추가할 점이 있으면 댓글에 부탁드립니다. 제가 정리한 내용인지라 주관적인 생각이 들어가 정확하지 않을 수 있습니다.)

 

'Language > Java' 카테고리의 다른 글

[JAVA] this에 대해  (0) 2021.02.03
[JAVA] Class에 대해  (0) 2021.02.03
[JAVA]반, 학생 수 를 입력받는 성적 프로그램  (0) 2021.02.01
[JAVA] 별찍기  (0) 2021.01.30
[JAVA]Stack과 Heap에 관하여  (0) 2021.01.30