- 복사와 참조2024년 10월 11일
- chantleman
- 작성자
- 2024.10.11.:02
원시타입(primitive) vs 객체타입(object)
원시타입 : 속성도 메소드도 없는 것. number, string, boolean
객체타입: 배열, 리스트, 메소드,...
나머지는 무시 null, undefined, NaN
원시타입 값을 할당시 복사가 됨
객체 타입은 값을 할당할 시 참조가 이루어짐
var a=111; var b=a; b=222; alert(a);
이렇게 되면 a의 값은 111
왜냐하면 a는 원시타입(number)이기때문에 b에는 a가 복사가 돼서 b와 a는 별개의 변수!!
따라서 원본인 a에 222가 들어가는 게 아닌 b에 222가 들어가는 것
(a와 b가 다름)
var a={ name:"철수", age:20, etc:"hi" } var b= a; b.etc="bye"; alert(a.etc);
이렇게 되면 a.etc의 값은 bye
왜냐하면 a는 객체타입(object)이기 때문에 복사가 아닌 참조가 이루어져서
a와 b는 같은 변수가 됨
따라서 b.etc의 값을 바꾸게 되면 a.etc도 같이 바뀌게 됨
<input type="text" id="ckTxt" value="메에롱"> <script> var cktest = document.querySelector('#ckTxt').value; //메에롱은 text. 즉 string이기 때문에 원시타입 cktest = "안메롱"; var cktest2 = document.querySelector('#ckTxt'); //<input type="text" id="ckTxt" value="메에롱">는 객체임 cktest2.value = "안메로옹"; </script>
첫번째는 '메에롱'은 string이기때문에 복사 실행
따라서 안메롱으로 바뀌지 않음
두번째는 <input type="text" id="ckTxt" value="메에롱"> 자체를 가리키기때문에 객체타입임
따라서 안메로옹으로 바뀜
let onemore = "한개더엉"; alert(onemore.substring(0,3)); //원시타입에 점을 찍는 순간 wrapper로 바뀜
'한개더엉'으로 string이라서 원시타입이라 바뀌지 않지만
원시타입에 점(.)을 붙이는 순간 wrapper로 바뀌기때문에 String 객체로 바뀜
따라서 결과는 '한개더'로 바뀌어서 나옴
wrapper 클래스
int → Integer
double → Double
string → String
number → Number
속성하고 메소드가 없기 때문에 wrapper를 사용하면 속성과 메소드를 사용할 수 있음
let s = 123; alert(s.toLocaleString());
이렇게 하게 되면 number가 Number로 바뀜
const는 변수 재할당, 재선언이 불가능하기 때문에
원시타입은 바꾸지 못하지만, 객체 타입은 속성/메소드 안은 바꿀 수 있음
const a = {name:"minsu"}; a = {name:"chulsu"}; a.name="gildong";
const이기 때문에 a 자체를 바꿀 수 없음
하지만 {} 안의 내용물은 바꿀 수 있음
따라서 a의 name이 chulsu로 바뀌지 않지만, gildong으로는 바뀜!
heap 프로그램이 끝날때까지, stack은 임시로 갖고있음
참조타입(객체타입)은 heap에 할당되고, 원시타입은 stack에 쌓임
stack영역에는 하나의 데이터만 들어갈 수 있기 때문에 여러개의 값이 들어가면 ... stack에 저장할 수 있다하더라도 그 값을 불러올 때 불러올 수 없음
그래서 heap영역을 크게 만들어주고 heap영역의 주소값을 넣어 heap 주소에 값을 줄줄이 연결하면
값을 찾을 때 주소를 보고 맞는 heap영역에서 찾아 반환
heap영역의 메모리 공간은 동적으로 크기가 변함
728x90'js' 카테고리의 다른 글
Configure Snippets. 템플릿 (0) 2024.10.23 볼튕기기 (1) 2024.10.17 node 설치 (4) 2024.10.11 ajax로 데이터 송수신 (0) 2024.10.03 async / await (0) 2024.09.18 다음글이전글이전 글이 없습니다.댓글