작성
·
190
0
안녕하세요, Copy by Value 부분이 헷갈려서 질문드립니다.
강의 7:19초에서의 그림을 보면, clone는 original 값을 복사하고 서로 다른 주솟값을 가진 것으로 이해했습니다.
이때 clone 값 추가 없는 let original = '안녕하세요'; let clone =original; 상태에서 original === clone을 하면 true가 나옵니다. 서로 다른 주솟값을 가지지만 clone이 original 값을 복사했기 때문에 true인 것으로 이해하면 될까요??
혹시 let original2 = '감사합니다'; let clone2 = '감사합니다';의 경우 original2 === clone2가 true인데 이때도 서로 다른 주솟값에 저장되지만 값은 같아서 true인 것일까요?
답변 2
0
안녕하세요!
말씀하신 부분은 copy by value가 아닙니다.
copy by value는 값만 가져와야합니다.
하지만 let a = b; 이렇게 할경우 copy by reference가 됩니다. (그렇기때문에 true 입니다)
copy by value를 하려면 완전 새로운 값을 생성하고 값만 복사해야와합니다.
예를들어 let b = {test: 'test'}; let a = {...b} 이런식입니다.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다.
Copy by Value에 대한 질문에 대해 답변드립니다.
복사 의미론(Copy semantics)에는 크게 ‘값에 의한 복사(Copy by Value)‘와 ‘참조에 의한 복사(Copy by Reference)‘가 있습니다. 여기서 언급하신 경우는 기본형 데이터(Primitive data type)인 문자열을 다루고 있습니다. 복잡한 객체가 아닌 기본형 데이터는 값 자체가 변수에 저장되므로, 값에 의한 복사가 일어납니다.
let original = ‘안녕하세요’; let clone = original; 이 경우, ‘clone’은 ‘original’의 값 자체를 복사하여 가지게 됩니다. 따라서 ‘original’ 과 ‘clone’ 은 같은 값을 가지게 됩니다. 이 때문에 original === clone 은 true가 됩니다. 이경우 변수들은 서로 독립적인 값을 가지고 있으나, 값이 같기 때문에 논리적으로 동일하다(true)는 결과가 나오는 것입니다.
let original2 = ‘감사합니다’; let clone2 = ‘감사합니다’; 경우에도 마찬가지로, 두 변수는 서로 다른 메모리 공간에 같은 값 ‘감사합니다’를 각각 저장하게 됩니다. 이는 값에 의한 복사로 인해, 같은 값이지만 서로 독립적으로 존재합니다. 따라서 original2 === clone2 가 true인 것은 두 변수가 동일한 값을 가지기 때문입니다.
기본형 데이터의 경우, 변수에 직접 값이 저장되기 때문에 변수 간의 비교에서 값이 같다면 true가 됩니다. 이러한 비교는 변수가 참조하는 값 자체를 비교하는 것으로, 기본형 데이터의 비교에는 항상 ‘값에 의한 복사’의 원칙이 적용됩니다.