본문 바로가기

Frontend/JAVASCRIPT

[Javascript] 값을 저장하는 방식, pass by value vs. pass by reference

반응형

1. 값을 저장하는 방식

자바스크립트뿐만 아니라 대부분의 프로그래밍 언어들은 값을 변수에 저장하는 방식이 크게 2가지가 있다.

  • 1. 어떤 값을 메모리 공간에 직접 넣고 변수를 할당하는 방법
  • 2. 어떤 값을 저장한 메모리의 주소를 변수에 넣는방법

이렇게 2가지가 있다.

1번의 경우를 그림으로 생각하면,

2번의 경우를 그림으로 생각하면,

보통 2번의경우는 객체를 저장할 경우 이런방식으로 값을 할당하는데, 객체는 이른바 힙(heap)이라는 메모리 공간에 할당되어 진다.

7. Memory : Stack vs Heap
 
gribblelab.org
제일 아래쪽 when to use the Heap? 을 읽어보면 좋다.

1번의경우도 물론 주소가 있지만 사용하지는 않는다.

변수에 값을 직접 할당하는 경우( 1번 )는 일반적인 primitive type들을 사용할때다. 

주소값을 사용하는 경우( 2번 )는 reference type들을 사용할때다.

[Javascript] 변수와 값(타입)
1.변수 프로그래밍에 있어서 변수는 숫자, 문자와 같은 값들을 저장하는 공간을 의미한다. 선언 프로그래밍 언어는 변수를 선언하지 않으면 표현할수가 없다. 변수의 선언은 let과 const를 이용한다. let은 변수안..
artdev.tistory.com

2. pass by value vs. pass by reference

값을 전달하는 방식또한 값을 저장하는 방식과 동일하다.

  • 값으로 전달하는 방식(pass by value)
  • 주소값으로 전달하는 방식(pass by reference)

사실 값을 저장하는 방식만 이해하게 되면 값을 전달하는 방식은 자동적으로 알게된다.

    1. pass by value

passMe 변수에 value를 할당하면 그 값(20) 을 넘기고 그 값들은 별개가 된다.  value와 passMe는 남남이다.

    2. pass by reference

passMe2 변수에 obj에 할당된 객체를 할당하면, 그 값들은 서로 연결되있다.

obj는 객체의 주소값을 가지고 있고 , 그 주소값을 passMe2 변수에 고대로 복사했기떄문이다.


TV(object)에는 TV를 조작할수있는 기본리모컨(variable)이 있다. 

TV의 주파수(address)만 리모컨이 알고있으면 조작이 가능하다..

요즘 IPTV 많이 사용하지 않는가? IPTV를 설치하면 거기서 제공하는 리모컨(variable2)이 있다. 

IPTV리모컨 또한 TV의 주파수만 알면 같은 TV를 조작할수가 있다.

결국 어떤 리모컨이든 TV의 주파수만 알면 TV를 조작할수가 있는것이다.


 

반응형