2021-07-24 TIL

K PizzaCola·2021년 7월 24일
0

TIL

목록 보기
42/44

Today I Learn

  • 모던 자바스크립트 딥 다이브 11장까지
    • 예제 코드를 치진 않고 쭉 읽었다.
    • 9장부터 몇몇 몰랐던 내용을 정리
  • 9장 타입변환과 단축 평가
    • 자바나 C도 정수형 데이터 int와 double을 연산하면 int가 더 표현력이 큰 double로 변하는 암시적 타입변환이 존재한다.
    • 그러나 자바스크립트는 Number와 String 사이에 타입 변환 규칙이 좀 더 있다.
    • {?} + string 은 문자열로 변해서 연산한다.
    • (-, *, /)는 피연산자를 숫자로 변환한다.
    • +{표현식}은 Number 타입으로 변한다. 이때 false나 null은 0으로 변환된다.
    • !{표현식}은 Truthy, Falsy로 평가된다.
    • ''(빈 문자열), null, undefined, 0, -0, NaN 등은 Falsy이다.
    • || 나 &&는 값을 왼쪽부터 true, false 판단하여 바로 결정할 수 있으면 우측을 보지 않는다.
    • 이를 활용하여 변수의 기본값을 할당하는 매커니즘으로 사용할 수 있지만, null 또는 undefined 인 경우만을 확인하기 위해서 ?.??를 사용할 수 있다.
  • 10장 객체 리터럴, 11장 원시값과 객체의 비교
    • 이전에 js 객체에 대해서 조금 잘못 이해해서 맵처럼 사용했던 것도 있었다.
    • js는 일단 함수도 객체이기 때문에, 결국 객체 내에는 Property만 있다고 할 수도 있다. 그래도 일단 일반적인 객체와 마찬가지로 property와 method로 구성된다고 생각해도 좋을 것 같다.
    • 객체에 프로퍼티를 자유롭게 추가, 삭제할 수 있다. 이런 형태 때문에 객체를 맵과 비슷하게 쓸 수 있겠다고 오해했다.
    • V8엔진은 맵처럼 구현하지 않고 히든 클래스를 이용해서 고정된 객체 레이아웃을 제공하고, 그 방법으로 프로퍼티에 접근하는 성능을 높혔다.
    • 그 외에 js 객체는 원시 타입과 다르게 Mutable하다. 그리고 자바와 마찬가지로 변수의 객체 참조는 주소값으로 처리하므로, pass by value로 동작한다 볼 수 있다. 이 부분은 js엔 따로 정의된 용어는 없다고 한다.
  • 이펙티브 자바 스터디
    • 아이템 7, 8, 9
    • 객체 참조 해제하기, finalize, cleaner 사용하지 않기, try-with-resources 사용하기
    • 7은 GC를 이해하면서 메모리 관리를 잘 할 수 있어야 한다는 이야기라고 생각한다. 물론 한 줄만으로 정리하긴 Weak Reference 등등 더 공부할 것이 있어 심오한 이야기라고 생각한다.
    • 8은 GC의 동작 자체를 예상하기 어려우므로, 사용하지 말라는 이야기라고 생각한다. 특히 자원 회수 로직close()을 finalize에 넣으면 GC가 언제 동작하고 자원 회수가 언제 될 지 모르므로 사용하지 않는게 좋다.
    • 9는 try-with-resources 문법을 적극 활용하자는 이야기 이다. 코드상으로도 깔끔해지며 close()를 자동으로 실행해주므로 자원 회수를 까먹는 실수도 방지해준다. 물론 AutoCloable을 구현해야한다.

Good

  • 주말 되니 좀 편하다.
  • vscode 이제 디버깅 됨. 모듈 import에서 실수했었다.

Bad

  • 디비, 네트워크 읽는데 집중 잘 안된다.

To Do

  • 모던 자바스크립트 딥 다이브
  • 데이터베이스
  • 네트워크
  • 이펙티브 자바
  • 리팩터링
profile
공부하는 개발자입니다.

0개의 댓글