2021.07.31.

Jin·2021년 7월 31일
0

Facts

일을 제시간에 해내기 위한 팁 시청

  • 모든일은 어떤 프로세스의 중간에 위치.
  • 이전과 이후에 그 일을 하는 사람이 존재.

<스칼라로 배우는 함수형 프로그래밍> 스터디

  • DSL, groovy
  • 상태전이 함수
  • 상태전이의 조합
  • 조합기 map, map2

김교수의 세가지 - 공부법 시청

  • 배운 것을 '압축'적인 키워드로 정리
  • 키워드를 통한 자연스러운 회상 효과
  • 회상을 통해 자신의 방식으로 정리, 보충

다익스트라 알고리즘 복습

  • cloud, visit(add)
  • shortest path
  • update

<코어 자바스크립트> 독서

주제: 데이터 타입

  • 기본형, 참조형
  • 불변, 가변
  • 변수 영역, 데이터 영역
  • 참조형을 불변으로

기본형은 왜 불변으로 처리된걸까?

5라는 숫자를 100개의 변수에 대입하는 상황을 생각해보자. 일단 식별자 100개를 마련하고, 식별자에 대응하는 주소마다 5의 값을 넣을 수 있다. 이렇게 하면 똑같은 5 라는 숫자를 메모리에 100번 저장하는 결과를 낳는다.

변수영역데이터영역을 나누면 이러한 문제를 해결할 수 있다. 변수영역에는 식별자와 그에 대응하는 데이터 영역의 주소를 넣는다. 데이터 영역에는 실제 값을 저장한다. 이렇게 하면, 5라는 값을 데이터 영역에 한번만 저장하고도 100개의 변수에 대입할 수 있어서 효율적인 메모리 운영이 가능해진다.

참조형은 왜 가변이고, 가변이면 어떤 문제가 생기는가?

참조형 변수에 저장되는 값이 변수 영역의 주소이기 때문에 그렇다. 예를 들어, 대표적 참조형인 객체를 살펴보자. 아래와 같은 객체에서 name 을 다르게 바꾸면, 어떤일이 일어날까?

const person = {
	name: "fall",
};

const person2 = person;
person2.name = "Jin";

console.log(person === person2); // true

이름을 바꾸면 person.name 의 주소영역에 새로운 데이터("Jin") 이 가리키는 주소값이 할당된다. 즉, person 식별자 자체에 할당된 주소값은 전혀 달라지지 않았다. 이 경우, 위와 같이 두 객체가 서로 다른데도 같다고 나와버려, 데이터가 변경된데 대한 가시성이 떨어진다는 것을 볼 수 있다.

해결하는 방법은 여러가지 이다. 동등성 비교를 지원하는 언어의 경우, 해당 비교 연산을 override 해서 새롭게 정의해주는 방법이 있다. 그렇지 않다면, 속성이 변경될때마다, 아예 새로운 객체를 돌려주는 방법이 있다.

새로운 객체를 만들어주는 방법도 다양하다. 깊은 복사 를 구현하기 위해서는, spread operator 를 활용하거나, 라이브러리를 사용해도 되고, JSON.parse, stringify 를 적용할 수 도 있다.

<코어 자바스크립트> 독서 #2

  • 콜 스택
  • 실행 컨텍스트 - Lexical Environment
  • environmentRecord, 호이스팅

0개의 댓글