[러버덕2]



1. CS 지식의 필요성

  • 컴퓨터는 50년밖에 안된 학문이다.
  • 대부분의 이론이 변하지 않는다.
  • 빨리 변하는건 ? 라이브러리/프레임워크
    • 트렌디하다? 지금 트렌디한 얘네도 언젠간 구려진다.
    • 그 밑바닥에는 대학에서 배운 cs지식이 있다.
    • 변하지 않는 지식이 필요할 때가 온다
    • cs지식 꾸준히 공부하기!

2. 클린코드를 추구하자

  • java, c 는 태어날 때부터 완벽한 언어
  • js 는 멀티 패러타임 언어로, 보조 언어로서 탄생
  • 클린코드책(java) 에서 두 언어가 추구하는건 같지만 딱 달라붙지는 않는다.
  • js 방법론 : 선언형(함수형), oop, 명령형
  • 회사가 나에게 기대하는 건 뭘까?
    • 회사는 사회공헌 차원에서 신입을 교육해준다.
    • 학습할 mind와 태도가 되어있는가?
    • 어떤 사고관을 가지는가?
    • 결국은 “태도” > 지금까지 내 삶에 의해 보여지는 나의 태도
    • output에만 집착하지 말자 (어차피 처음부터 완벽한 신입은 없어)

3. 문자열은 원시타입이라면서, 어쩔땐 객체?

"abc".length "abc".toUpperCase()

  • length 프로퍼티를 갖는다는건 객체로서 해석했다는 것
  • 이러한 객체를 Wrapper 객체라고 한다.
    • number, string, boolean 사용 가능

4. 암묵적 형변환 왜하는거야? 헷갈리기만해!

  • 초창기 js는 비전공자가 쓸 줄 알았어.
x = 1
y = "3"

x + y // 나는 당연히 둘 다 숫자가 들어올 줄 알았지!
// 근데 비전공자는 이런거 잘 모르잖아
// 근데 오류나면 아에 실행이 멈춰버리는데 어떻게 그래!
// 그래서 일단 오류는 내지 말자 해서
// 숫자 + 숫자 와야하는데 문자 들어오니 특이사항이다 해서 문자로 인식해버리는 거지!
  • 그래서 최대한 error 가 안나도록 했어
  • 하지만 js가 점점 개발다운 언어가 되면서 ES6부터는 error내도록 바꼈어 (엄격해짐)
  • 각각의 암묵적 형변환을 외우지말고
  • 1 + 'a' 이런 식으로 사용하면 안된다에 초점을 둬!
  • 이런 일이 왜 생기는거야?
    • 변수에 타입이 없어서!
    • 그래서 타입 스크립트가 등장했어
    • let n : Number;

5. 배정밀도 부동소수점 방식..?

  • 정밀도가 배(2배)이다.
  • 간단히 모든 숫자를 실수의 개념으로 본다는거야(정수도 실수로 봐)
  • 지수부, 소수부로 각각 1byte 할당 (앞에 부호 부분 추가)
  • 0.1 + 0.2 = 0.30000000000000004
  • why? 대부분의 소수는 2진법으로 딱 떨어지지 않는다. (무한소수가 된다.)
  • 0.33333 (1/3)을 메모리에 기억시키려면?
    • 3을 어디서 끊냐를 정해야지 > 이게 정밀도야
    • 정밀도가 높을 수록 메모리공간을 더 많이 써
    • 이 방법이 다양한데 js는 정밀도 방법 중 배정밀도를 골랐다.

6. 리터럴과 평가?

  • 리터럴은 값을 만들어내는 방법 중 하나.
  • 리터럴이 메모리에 들어가려면 평가가 되어야 한다.
  • 평가되면 값이 된다.
  • 평가 된다는 것은?
    • 리터럴을 값으로 만드는 것.
    • 표현식인 문이 실행이 되어 값이 나오는 행위 === 평가된다.

7. 왜 객체는 mutable해?

  • 메모리 효율을 위해서
    • 객체가 처음 만들어진 과거는 공간 복잡도가 중요했어
    • 원시값은 메모리공간을 적게 차지하지만 (Number: 8byte)
    • 객체는 사이즈가 정해지지 않았기 때문에 부담스러웠지
    • 메모리를 알뜰살뜰 쓰려고 택한 방식이야ㅠ
    • 하지만 데이터의 불변성이 지켜지지 않아서 안좋지
  • 그래서 객체를 불변값처럼 사용하는 방식이 있어
    • 모던한 개발 방식에서는 이 방식을 선호해
    • 객체를 원시값처럼 사용하자.
    • 값을 수정할 때마다 새로운 객체를 만드는거야
    • like redux
    • 깊은 복사를 하고, depth가 깊으면 깊을수록 퍼포먼스는 낮아져
    • 하지만 재할당으로 주소가 바뀌면 값이 바꼈다는걸 판별할 수 있지!

8. 삼항연산자, 단축평가 같은거 왜 사용해?

  • 코드는 흐름이 중요해 (위 > 아래)
  • 근데 for문, if문은 이 순서를 역행하지
  • 단축평가, 삼항연산자를 사용하면 흐름을 방해하지 않아
  • 이렇게 제어문 대신 고차함수를 활용하는 패러다임 : 함수형(선언형) 패러다임

9. 이응모 강사님 tip

  • ECMAScript는 UTF-16 방식을 택했어. > 한글 3byte를 쓴다.
  • js엔진은 js 코드만 해석해(utf-16)
    • html내의 meta(utf-8)은 렌더링 엔진이 처리해
    • 각각 처리하는 엔진이 달라!
  • 객체 내 프로퍼티가 가리키는 값을 처리하는 방식 === 변수가 값을 가리키는 방식
  • number 형 변환 추천 : +"123" (가독성 측면)
    • 회사마다 컨벤션 다르다
  • if-else가 평가값이 아닌 이유는?
    • c에서 차용된 것
    • 가급적 사용 지양(삼항연산자 지향)
  • 데이터 타입이 필요한 이유 중 2진법을 어떻게 해석해야 할 지 안다면 타입을 안다는 건데 타입은 어디에 저장되어있지?
    • 변수 영역에 type 정보를 가지고 있다. (데이터 영역x)
  • for문이 안좋은 이유
    • 가독성 최악이다.
    • i++ 은 선언후 할당 > 안티패턴이야 (재할당해버리니까) > i += 1 사용하자
    • 고차함수를 사용하자. (filter..같은 선언형) > 내부적으로 for문을 추상화한다.
    • 실수할 수 있는 부분을 감춰놓는다.
    • for문 i+=2 이런게 더 복잡해지면 실수하기가 너무 쉽다.
    • 실수를 최대한 일어나지 않게끔 준비해놓는 코드가 좋은 코드