객체지향 참조

Joy·2022년 10월 25일
0

JavaScript

목록 보기
15/15

복제

전자화된 시스템의 가장 중요한 특징은 복제다.
프로그래밍에서 복제

	var a = 1;
    var b = a; // a에 담긴 1이라는 값을 복제한 것과 같다.
    b = 2;
    console.log(a); // 1

값을 변경한 것은 변수 b이기 때문에 변수 a에 담겨있는 값은 그대로이다.
즉 변수 b의 값에 변수a의 값이 복제된 것이다.

참조

	var a = {'id':1} //참조데이터타입
    var b = a;
    b.id = 2;
    console.log(a.id); // 2

변수 b에 담긴 객체의 id 값을 2로 변경했을 뿐인데 a.id의 값도 2가 되었다.

비유하자면 복제는 파일을 복사하는 것과 같고
참조는 윈도우의 바로가기를 만드는 것과 같다고 할 수 있다.
바로가기를 통해 만든 파일은 원본 파일에 대한 주소 값이 담겨있다.
바로가기에 접근하면 컴퓨터는 바로가기 링크에 저장된 원본의 주소를 참조해서 원본의 위치를 알아내고 원본에 대한 작업을 하게 된다.
원본 링크를 변화시키면 바로가기에 변화된 내용이 적용되는 것과 같다고 볼 수 있는 것
다시 말해, 저장 장치의 용량을 절약할 수 있고 원본 파일을 사용하고 있는 모든 복제본이 동일한 내용을 유지할 수 있게 된다.

	var a = 1;
    var b = {'id':1};

변수 a에 담긴 값은 데이터형이 숫자이고 변수 b는 객체이다.
숫자는 원시데이터형(기본)이다.
자바스크립트에서 원시 데이터형을 제외한 모든 데이터 타입은 객체로 다른 말로 참조 데이터형(참조 자료형)이라고도 부른다.
데이터형은 복제되고 참조 데이터형은 참조된다.

=> 변수에 담겨있는 데이터가 원시형이면 그 안에는 실제 데이터가 들어있고,
객체면 변수 안에는 데이터에 대한 참조 방법이 들어있다고 할 수 있다.

함수

참조, 복제와 같은 것들이 함수와는 어떻게 관련되어 있는지 알아보는 예제

	var a = 1;
    function func(b){ //함수정의 - 매개변수 값 변경
    	b = 2;
    }
    func(a);
    console.log(a); //1

원시(기본)데이터 타입을 인자로 넘겼을 때 코드이다.

	var a = {'id':1};
    function func(b){
    	b = {'id':2}; // 새로운 객체를 만들었다,
    }
    func(a);
    console.log(a.id); //1

참조 데이터 타입을 인자로 넘겼을 때 코드이다.
func()의 매개변수는 인자와 같다 => b=a
b는 새로운 객체를 만들어 담았다. 이는 b가 가리키는 객체를 변경하는 것이기 때문에 a에 영향을 주지 않는다.
하지만 아래는 다르다.

	var a = {'id':1};
    function func(b){
    	b.id = 2;
    }
    func(a);
    console.log(a.id); //2

b는 객체 a를 참조한다.
이 값이 속성을 바꾸면 그 속성이 소속된 객체를 대상으로 수정 작업을 한 것이 되기 때문에 b의 변경은 a에도 영향을 미치게 된다.

profile
🐣

0개의 댓글