정적 언어

→메모리 할당 부족, 개발자가 직접 형변환, 넉넉한 메모리를 미리 할당해놓을 수 없기 때문. 숫자는 32767 까지만 허용해서 32768 쓰면 에러남. → 4바이트의 정수형(int) / 2바이트의 정수형(short) 를 개발자가 미리 고민해야함.

동적 언어

→ 메모리 관리에 대한 압박에서 자유로움. 넉넉하게 할당, 숫자를 정수형인지 부동 소수형인지 구분하지 않고 64비트, 즉 8바이트를 확보, (1비트는 부호) 11비트는 지수, 나머지 52비트를 가수부로 씀. 그래서 형변환을 걱정할 필요가 없음

변수 선언

한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않습니다. 변하려면, “새로 만들어야 핰”

참조형 데이터의 “가변성”에 대한 오해

대부분의 자바스크립트 책에서 ‘기본형은 값을 복사하고, 참조형은 주솟값을 복사한다’고 설명하고 있지만, 사실은 엄밀히 따지면 어떤 데이터 타입이든 변수에 할당하기 위해서는 주솟값을 복사하기 때문에, 모든 데이터 타입은 참조형 데이터입니다. 다만, 기본형은 주솟값을 복사하는 과정이 한 번만 이뤄지고, 참조형은 한 단계를 더 거치게 된다는 차이가 있는 것입니다.

(== 둘다 주솟값 가져감. 근데 기본형은 교체하면 주솟값이 바뀌어야하는데, 객체형은 참조했던 주솟값에 담긴 데이터 자체가 객체를 담는 변수영역 주솟값이라서, 객체 내부에 프로퍼티를 바꿔도, 변수 영역 내에서 변화가 생기는 거지, 변수영역 주솟값을 담은 객체형 변에는 영향이 없음.. 긍까.. 수정하는 위치가 다른 느낌..? 뭔가.. 데이터 자체가 다른거다라는 개념보다는..)

ex) a = 1, b = a → @1001: 5001 & @5001: 1 @1002: 5001

b=2

@5002: 2, @1002: 5002,

a={c:1, d:2}, b=a →@1001: 5001 @5001: 7001,7002, @5002: 1 @5003: 2 @7001: 5002, @7002: 5003

b.c = 3

@7001: 5004, @5004: 3,

그래서 나중에 a 를 들여다 보면.. → @1001: 5001 이니까 5001 가면 7001 가보래. 근데 7001은 5004 즉 3을 저장하고 있음;

그래서 a 도 b 도 {c:3, d:2} 이렇게 되는거임.

즉, 참조형 데이터가 ‘가변값’이다 라고 설명할 때의 가변은 참조형 데이터 자체를 변경할 경우가 아니라 그 내부의 프로퍼티를 변경할 때만 성립합니다.