- Call by value(값에 의한 호출)는 인자로 받은 값을 복사하여 처리를 한다.
- 안전한 방법이며, 메모리 사용량은 Call by reference보다 많다.
- Call by reference(참조에 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.
- 직접 참조하기때문에 속도, 메모리면에서 Call by value에 비해 이점이 있으나, 값 변경의 위험이 있다.
- 간단히 말해 값을 복사를 하여 처리를 하느냐, 아니면 직접 참조를 하느냐 차이인 것이다.
예제코드#
1package com.company;
2
3public class Main {
4
5 private static class User{
6 String name;
7 public User(String name){this.name = name;};
8
9 public void setName(String name) {this.name = name;}
10 public String getName() {return name;}
11 }
12
13 public static void main(String[] args){
14
15 // call by value
16 int n = 10;
17 func(n);
18 System.out.println("func(n) = " + n);
19
20 // call by reference
21 // 자바에서는 주소를 가져올 방법이 없기때문에 call by reference가 불가능하다.
22
23 // 객체 프로퍼티 접근
24 User sampleUser = new User("soojong");
25
26 // call by reference처럼 동작하나 사실 주소"값"을 복사해서 넘기는것이다.
27 // 즉, 주소값 자체를 넘기는 call by reference와는 다르다.
28 foo(sampleUser);
29 System.out.println("sampleUser = " + sampleUser.getName());
30
31 }
32
33 static void func(int n) {
34 n = 20;
35 }
36
37 public static void foo(User user){
38 user.setName("Joey");
39
40 }
41
42}