A 코드스테이츠/FE부트캠프
원시자료형과 참조자료형
DEV_29
2022. 7. 11. 11:13
원시자료형 | 참조자료형 |
string, number, boolea, undefined, null & bigint, symbol | 배열( [] ), 객체( {} ), 함수( function(){} ) |
데이터 보관함 한 칸(=변수)에 하나의 데이터만 넣을 수 있음 | 변수에 데이터(데이터 보관함, heap)의 주소를 담는다. |
값 자체에 대한 변경이 불가능하지만, 변수에 다른 데이터를 할당할 수는 있다. (const 키워드로 선언하면, 재할당 불가) | |
고정된 데이터 공간을 사용 | 데이터 사이즈가 동적으로 변함 보관되는 데이터의 양이 엄청날 수 있음. |
결론: 변수에는 원시값 혹은 주소만 지정할 수 있고, | |
원시자료형이 할당될 떄는 변수에 값 자체가 담기고 | 참조자료형이 할당될 때는 보관함의 주소가 담긴다 |
let score = 80; function doStuff(value) { value = 90; } doStuff(score) 다음 코드가 실행된 후, score의 값은? 답: 80 |
let player = { score: 3 }; function doStuff(obj) { obj.score = 2; } doStuff(player); 다음 코드가 실행된 후, player.score의 값은? 답: 2 |
<해설> 1. 함수 doStuff에 score의 값을 인자로 전달하여 실행 2. 매개변수 value에 score의 값 80이 전달되고, value=90에서 value에 90이 할당됨 3. 단 변수 score의 값 80은 값 자체를 복사하여 전달하기 때문에 함수에서 어떤 일이 발생했던가와 관련 없이 초기 할당된 값 80이 그대로 유지됨 |
<해설> 1. 함수에 변수 player을 인자로 전달하여 호출 2. 함수가 호출, 실행되면 매개변수 obj에 변수 player의 값이 할당 -> 변수 player의 값은 {score: 3}의 주소값 3. 함수로 들어가면 obj.score에 2를 할당하고, obj와 player은 같은 주소값을 가짐 4. player.score은 2가 됨 |
<내 생각/틀릴 수도 있음> 변수 score은 80이라는 고정된 값이 담긴 원시자료형이다. 함수 doStuff는 매개변수 value를 가지며, value에 90이라는 값을 할당한다. 함수 doStuff에 전달인자를 score로 하여 호출하면, score의 값 80이 전달되지만, 값만 복사하여 전달되기 때문에 변수 score자체에는 영향이 없다. 따라서 변수 score의 값은 변함없이 80이 된다. |
<내 생각/틀릴 수도 있음> 변수 player는 객체로 참조자료형이다 함수에 변수 player를 넣어 호출하는 경우 그 주소값이 담긴다. 함수 doStuff는 매개변수의 score값을 2로 할당하는데 변수 player를 전달인자로 받은 결과, 그 주소로 가서 score를 2로 바꾸어놓았다. 그 결과 player.score은 2가 된다. |