반응형
728x170
call by reference와 call by value는 그림으로 보면 이렇게 된다
call by value는 값만 복사가 되기 때문에 원본의 값이 변경이 되지 않는다.
call by reference는 주소값이 전달이 되기 때문에 두 번째 참조 변수가 해당 객체의 값을 변경하면 첫 번째 참조 변수가 가르키는 객체의 값도 변경이 된다.
다음 예제를 봐보자
int a = 5;
int b = 10;
add(a, b); //call by value
System.out.println(a+", "+b);
단순히 이렇게 값만 전달해주면 add메소드에서 a를 + 5하고, b를 +10 해도 원본의 a, b의 값은 변하지 않는다.
즉 add 연산이 끝나고 프린트를 해도 a = 5, b = 10이 출력이 된다.
하지만 아래와 같은 경우를 보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Ex //사용자 정의 데이터 타입 { int a; int b; } Ex in = new Ex(); in.a = 10; in.b = 20; System.out.println(in.a+", "+in.b); add(in); //call by reference System.out.println(in.a+", "+in.b); private void add(Ex in) { in.a = 100; in.b = 200; System.out.println(in.a+", "+in.b); } Colored by Color Scripter |
위 같은 경우는 참조 변수를 전달해준다. 참조 변수를 전달해주는 것은 참조 변수가 담고 있는 인스턴스에 대한 정보(주소, 참조하는 애)를 주기 때문에 원 값이 흘러가게 된다.
따라서 add 연산후 a는 100, b는 200이 될 수 있다.
이것이 call by value와 call by reference의 차이점이다.
반응형
그리드형
'java' 카테고리의 다른 글
java 오류 could not open java lib amd64 jvm.cfg 해결 (10) | 2018.11.26 |
---|---|
자바 컬렉션 프레임워크(Collection Framework)Map 컬렉션(HashMap, Hashtable) (0) | 2017.08.21 |
자바 2차원 배열 여러가지 예제 (0) | 2017.08.21 |
자바 컬렉션 프레임워크(Collection Framework)Set 컬렉션(HashSet) (0) | 2017.08.18 |
자바 컬렉션 프레임워크(Collection Framework)소개 및 List 컬렉션(Array List, Vector, LinkedList) (0) | 2017.08.18 |