오늘 한일
- Linked List 구현
- 클래스,객체
- 원시타입, 참조타입 차이
알고리즘과 자료구조를 공부하면서
linked list 를 구현을 해보았다. 강의를 따라하면서 next 값을 계속 접근해가면서 새로운 값을 append 하는과정을 보면서
cur 이라는 변수에 class의 this.head 를 넣어주는데 cur = this.head 라고 있었고 이 this.head는 클래스를 참조하는것이였다.


순수 자바스크립트의 이론을 공부한지 오래되기도했고 이론과 실전을 접목하는 시간이 많이 없어서 몰랐는데 위의 스샷에서 cur = cur.next로
cur 에 접근하여 값이 바뀌면 this.head안에 있는 this.head.next 값도 바뀌는걸 보고 "응? 이게 왜 같이 바뀌는거지?" 라고 생각했다. '클래스 안에서 더하면 저러나?' '클래스안의 함수라?' 'new로 이중으로 새로만들어서?' 여러가지를 생각한것중에 '만약에 내가 그전에 알고있던 일반변수(원시타입)에 또다른변수를 넣어주면 같이 바뀌는걸 몰랐었나?' 생각을 했고 혹시 내가 잘못 알고있나 테스트하기위해 원시타입인 a 와 b를 만들고 a 에는 1이라는 값을 넣고 b는 a 라고 선언 및 초기화 해주었다.

만약 이게 맞다면 a가 바뀌거 b가 바뀌건 둘다 같이 바뀌어야하는데 이때는 1,2 각각 다른 값이 나와서 같이 바뀌지않는다는걸 보고
원시타입은 메모리 참조가 아닌 값을 복사하는것 이라는걸 명확히 알게되었다.

-> 이 경우엔 b기 a의 메모리 참조한것이 아닌 a에 있던 값만 복사해서 넣어준거라 b를 바꾸더래도 값이 바뀌지않는다는 것이다.
'아, 이게 기본적으로 말하는 원시타입과 참조타입의 차이구나' 알게되었고 시도해보니 맞다는걸 알게되었다.
정말 기본도 안되어있는건가 생각하면서도 그래도 새롭게 제대로 알게되어 재미있다고 생각했다.
그래서 2가지의 경우로 더 테스트 해보기로했다.
1. class
처음에는 class로 직접 만들고 다른 변수에 넣어(참조)주면 그 값이 바뀌면 같이 바뀌는지 확인하였다.


2. 객체
두번째로는 객체를 만들고 키값을 정하여 새로운 변수에 넣어 값을 변경해보았다.


객체 역시 참조하기때문에 data를 바꾸게 되면 둘다 바뀌는걸 확인하였다.
spread operator(스프레드 연산자)
하나더 체크한건 만약 data값은 가져오되 객체를 스프레드 연산자를 사용하여 객체 안에 있는 속성값들만 복사해서 넣어줘 새로만든다면 data값이 바뀌더래도 같이 바뀌지 않는다는걸 확인했다.


클래스나 객체를 만들고 하나의 변수를 만들어 그것을 참조하게한후 그 값을 바꾸면 클래스값이나 객체 값이 같이 바뀌는걸 알수있었다. new 를 써서 새로운 객체를 만들지 않는이상 '=' 을 사용하여 참조하게 된다면 그 참조값에 접근하여 바꾸기때문에 둘다 바뀌는걸 알수있었다.
TIL을 통해 기록을 남겼지만 나중에 참조, 원시 타입에 대해서 정리해서 올릴 생각이다.
'TIL' 카테고리의 다른 글
| [TIL] 20220228 검색어를 입력하세요. www (0) | 2022.02.28 |
|---|---|
| [TIL] 코딩테스트 (0) | 2022.02.27 |
| [TIL] 넘치도록 해야할것들?! (2) | 2022.02.23 |
| [TIL] 공공데이터, CORS, Express 프록시 서버 구축 (0) | 2022.02.23 |
| [TIL] Typescript 타입스크립트 (0) | 2022.02.20 |