데이터 복사, 전달, 비교
데이터 복사, 전달, 비교

Javascript에서 데이터를 처리하는 방법은 데이터 형식에 따라 다르다.

값에 의한 전달과 참조에 의한 전달

숫자(Number)와 부울값(Booleantruefalse)은 값에 의한 전달로 복사, 전달, 비교된다.

값에 의한 전달로 복사 또는 전달하면 컴퓨터 메모리에 공간을 지정한 후 원래 값을 그 공간 안에 복사하여 저장한다. 원본에는 영향을 미치지 않고 새로운 복사본을 만드는 것이다.

그 후 원본을 변경하더라도 두 항목은 별개의 것이기 때문에 복사본은 영향을 받지 않는다. 반대로 복사본을 수정하여도 원본은 영향을 받지 않는다.


개체(Object), 배열변수(Array) 및 기능함수(Function)는 참조에 의한 전달로 복사, 전달, 비교된다.

값에 의한 전달로 복사 또는 전달하면 원래 항목에 대한 포인터를 만들어 그 포인터를 복사본처럼 사용한다.

그런 후 원본을 변경하거나 복사본을 변경하면 원본과 복사본이 모두 바낀다. 실제로 항목은 하나만 존재하기 때문이고 '복사본'이라 함은 실제로 복사본이 아니라 항목에 대한 또 다른 참조일 뿐이다.


참조에 의한 전달로 비교할 때 동일한 것으로 되려면 두 변수가 완전히 동일한 항목을 참조해야 한다.
예를 들어, 별개의 Array 개체는 동일한 요소를 포함하더라도 항상 동일하지 않은 것으로 비교된다.
변수 중 하나는 다른 하나에 참조가 되어야 동일한 것이 된다.
두 배열변수(Array)가 동일한 요소를 갖는지 확인하려면 ToString() 메서드를 사용하면 된다.


문자열(String)을 복사, 전달할 때는 참조에 의한 전달을 사용하지만 비교할 때는 값에 의한 전달을 사용한다.

new String('something')으로 만들어진 두 개의 String 개체가 있을 경우 참조에 의한 전달로 비교되지만 이들 값 중 적어도 하나가 문자열 값일 경우에는 값에 의한 전달로 비교된다.


ASCII와 ANSI 문자 집합의 구성 방식 때문에 대문자는 시퀀스 순서에서 소문자보다 앞에 온다.
예를 들어, 'Young'는 'apple'보다 에 온다. 문자들의 순서는 ASCII 조견표를 참조하라.

대소문자를 구분하지 않으려면 두 문자열에 toUpperCase() 또는 toLowerCase()를 호출한다.

기능함수로 매개 변수 전달

값에 의한 전달로 기능함수(Function)에 인수(arguments)로서 매개 변수를 전달하면 기능함수 안에서만 존재하는 별도의 매개 변수 복사본을 만들어 기능함수를 실행하게 된다.

개체와 배열변수가 참조에 의해 전달되더라도 직접 기능함수에 새 값으로 덮어쓰면 새 값은 기능함수 외부에는 반영되지 않는다. 개체 속성 또는 배열변수 요수를 변경해야만 기능함수 외부에서도 반영된다.

obj.message="원래 개체의 속성이다."
argum.message="newFunction 호출이다."

'제목 ' 다음에 [12345] 대괄호속 문자 1, 2, 3, 4, 5 중 아무것이나 검색한다.

<SCRIPT>
function myFunction(argum){ // 기능함수를 정의한다. 인수로 받은 전역변수 argum 은 사용되지 않았다.
  argum=new Object(); // 기능함수 속에서 지역 변수를 속성 개체로 argum을 생성한다.
  argum.message='argum.message="myFunction 호출이다."<BR>'; // 기능함수 속의 속성인 지역변수 값을 할당한다.
   // 전역변수 속성에는 영향이 없다. 기능함수 속에서 출력하면 이 값이 출력되나 밖에서는 전역변수 속성값이 출력된다.
} // 기능함수를 종료한다.

function newFunction(argum){ // 기능함수를 정의한다. 인수로 받은 전역변수 argum 의 값을 수정한다.
  argum.message='argum.message="newFunction 호출이다."<BR>'; // 기능함수 속에서 전역 변수에 값을 할당한다.
} // 기능함수를 종료한다.

var obj=new Object(); // 전역변수 개체 obj를 생성한다.
obj.message='obj.message="원래 개체의 속성이다."<BR>'; // 전역변수 개체 obj에 속성을 생성하고 값을 할당한다.

myFunction(obj); // 기능함수를 호출한다.
document.write(obj.message); // 기능함수의 속성을 출력한다. 기능함수 밖이므로 변경안된 원래의 전역변수 속성값이 출력된다.

newFunction(obj); // 기능함수를 호출한다.
document.write(obj.message); // 기능함수의 속성을 출력한다. 기능함수에서 전역변수를 변경된 새로운 전역변수값이 출력된다.
</SCRIPT>

<SCRIPT>
myString="정규식에서 '제목 1', '제목 2', '제목 3', '제목 4' 및 '제목 5'를 검색한다.";
regexp=/제목 [12345]/g; // 정규식을 생성한다.
document.write(myString,'<BR>'); // 문자열 변수를 출력한다.
document.write(myString.match(regexp),'<BR>'); // 검색 결과를 출력한다.
document.write(myString.search(regexp),'<BR>'); // 검색 결과를 출력한다.
</SCRIPT>
데이터 비교

값에 의한 전달로 비교를 수행할 때는 별개의 두 항목을 비교하여 서로 같은지 본다.
보통, 이 비교는 바이트를 단위로 하여 이루어진다.

참조에 의한 전달로 비교할 때에는 두 항목이 한 원본 항목에 대한 포인터인지 본다.
두 항목이 한 원본 항목에 대한 포인터인 경우에는 두 항목이 같은 것으로 보고, 아니면 비록 두 값이 바이트 단위로 비교하여 완전히 일치한다고 해도 서로 다른 것으로 본다.

문자열을 참조에 의한 전달로 복사, 전달하면 메모리를 절약할 수 있다.
그러나 일단 만든 문자열을 변경할 수 없기 때문에 값에 의한 전달로 문자열을 비교할 수 있다.
이렇게 하면 서로 완전히 독립적으로 만들어진 두 문자열의 내용이 일치하는지 비교할 수 있다.

refers
데이터 복사, 전달, 비교
이전페이지로페이지 맨위로
최종 수정:
06/29/2025 06:24:35
KoXo Homepage
All right reserved
비정상적인 방식으로 프레임없이 페이지에 접속하면 자주 오류가 발생됩니다.
오류가 나면 정상적 접속으로 시도해 보세요.
http://koxo.com/lang/js/refers/dataHangle.html