값이 변할 수 없다?
Object를 제외하면, 나머지 데이터 타입의 값은 변경할 수 없다. 이러한 것을 primitive value, 원시 값이라 일컫는다.
String을 예시로 들어보자. 일단 한 번 문자열이 생성되면 그 값을 변경할 수 없다. 물론 String.concat() 이나 + 연산자 등을 사용하여 원래 문자열에서 수정된 문자열을 만드는 것은 가능하다.
하지만, 기본적으로 String을 포함하여 Object를 제외하면 값을 변경할 수 없다.
그렇다면 객체는 어떨까?
객체는 식별자로 참조할 수 있는, 메모리에 있는 값을 의미한다. 객체를 어떤 변수 A와 B에 각각 할당하면 A와 B에 객체가 복사되는 것이 아니라, 해당 객체의 주소를 참조하게 된다. 그렇기 때문에 만일 B에서 객체의 프로퍼티를 변경하게 되면 A 역시 같은 객체를 참조하고 있기 때문에 영향을 받게 된다.
이 블로그를 작성한 이유는 배열이 객체와 같이 서로 다른 변수에 할당하면 복사되는 것이 아니라 주소 값을 참조하는 것인지 잘 몰라서 작성하게 되었다. 처음에는 배열 역시 ‘변경 불가능’ 한 것이라 생각하였다. 하지만 배열 역시 객체처럼 주소 값을 참조하기 때문에 변경가능 하다는 것을 알게 되었다.