call by value, call by reference

Seonhee Kim·2023년 7월 12일

study

목록 보기
9/18

값을 복사를 해서 처리하냐, 아니면 직접 참조를 하느냐의 차이

call by value (값에 의한 호출)

: 값이 그대로 복사되는 것을 의미. 자바스크립트(JS)에서는 원시 데이터/원시 값의 경우 값의 복사 call by value가 발생

  • 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존된다.

  • 단점 : 직접 참조를 하기 때문에 메모리가 사용량이 늘어난다.

  • i의 값을 함수의 인자로 파라미터로 넘길때 값을 복사해서 넘기기 때문에 원본의 값은 변하지 않는다

let i = 1;
function somefunc(a) {    
	a = a + 1;
	return a;
}
somefunc(i);   // i의 값을 파라미터로 값만 복사해서 넘긴다. 복사된 값을 넘기기 때문에 원본은 바뀌지 않는다.
console.log(i) // 결과 1

call by reference (참조에 의한 호출) (함수에서 값 대신 주소값을 전달하는 방식)

: 데이터가 있는 주소(메모리)를 참조한다(값을 복사하는 게 아님). 객체나 배열에서 call by reference가 발생

  • 장점 : 복사하지 않고 직접 참조를 하므로 빠르다.

  • 단점 : 직접 참조를 하기 때문에 원래 값이 영향을 받는다.

  • 배열이나 객체는 인자값을 파라미터로 넘길 때 복사 값이 아닌 참조를 하기 때문에 원본 값에 영향을 줄 수 있다.

let i = { num: 1 }
function somefunc(a) {
	a.num = a.num + 1;  
	return a;
}
somefunc(i); // i 의 객체를 파라미터로 넘겨서(a 자리에 {num: 1}) a의 num에 (=1) +1 을 해주고 a를 리턴한다.
             // 복사값이 아닌 참조값이므로 결과는 {num: 2}가 출력된다.
profile
안녕하세요 ~_~

0개의 댓글