Today, I Learned


  1. About 화살표 함수
    • 함수를 선언 및 초기화 할 때, function을 써서 하는 것과 달리, 화살표 함수는 function을 없애고, 그 대신 (매개변수) => {} 형태로 쓴다고 생각하자
    • 이 때, 화살표 함수의 특성을 정리해보면, return을 생략할 수 있다. 그러나, 이렇게 리턴을 생략하는 경우에는 { }를 쓰면 안된다(괄호는 쓸 수 있음). 이에 더하여, 화살표 함수는 클로저를 이용한 커리 함수를 만드는 데에 유용하다. 왜? 매개 변수가 하나인 경우 괄호마저 생략할 수 있고, 이 경우에 커리함수를 만들기 편함. 예를 들어, x=>y=>x+y 로 만들 수 있다는 점
    • this와 관련된 화살표 함수의 특성 : 웹 브라우저, node.js 둘 다에서 화살표 함수는 일반 함수와는 다르게 this 값을 바인딩한다. 일단, 엄격 모드에서는 undefined로 바인딩되고, 비엄격 모드에서는 렉시컬 범위(lexical scope)에 있는 this값과 일치한다. 즉, 자기보다 상위 스코프에 있는 this 값과 똑같이 바인딩된다 => this를 쓸거면 화살표 함수를 안쓰는 것이 좋다
  2. this in Node.js
    • node.js에서 전역 실행 컨텍스트에 있는, 전역 범위에 있는 this는 웹 브라우저와 달리 window로 바인딩되는 것이 아닌, 'module.exports'에 바인딩된다. 또한, 함수 내에 있는 this는 global에 바인딩된다. 결론적으로, 웹 브라우저와 차이라고 하면, 웹 브라우저는 일반 함수, 전역 범위의 this는 모두 window과 바인딩되지만, node.js는 전역 범위는 module.exports, 일반 함수는 global과 바인딩된다는 차이가 있다.
  3. 엄격모드 vs 비엄격모드 : 엄격 모드는 간략하게 말해서('use strict'), 에러가 발생하는 것을 그냥 넘기지 않고, 확실하게 에러를 발생시키는 '엄격한' 모드이다. 반대로, 비엄격 모드는 변수 선언 없이 변수를 초기화해도 에러로 처리안하듯이 '덜 엄격한' 모드이다. 이러한 엄격 및 비엄격 모드에 따라 화살표 함수 그리고 setTimeout에서 this가 바인딩 되는 대상이 다르다. 엄격 모드에서는 this(화살표 함수와 setTimeout에서)는 undefined가 되고, 비엄격 모드에서는 setTimeout은 window(web browser), global(node.js)로 바인딩되고,화살표 함수는 위의 내용참고! ( 참조 사이트 )
  4. About Destructuring Assignment(구조 분해 할당)
    • 먼저, 간단한 예시로, 예전부터 내가 썼었던 [a,b] = [b,a] 형식으로 변수의 값을 교환해주는 방법도 구조 분해 할당을 이용한 것이였다. 나만의 정의로 이해해보면, 값 교환이라던지, 여러 값을 하나의 변수에(rest parameter 사용) 넣고 싶다던지, 순서대로 값을 변수에 넣어주고 싶다던지 등의 작업을 하고 싶을 때, 허공(?)에 하면 에러가 나기 때문에 예를 들어, a,b,c = 1,2,3; 이렇게 하면, 에러가 나기 때문에 그 겉을 감싸주고, 혹은 포장지 안에 넣고 작업을 하기 위해 배열 혹은 객체 구조 분해를 쓴다고 생각해보자, 그리고, 이 부분은 외우기보다는 이런 것들이 있다는 것을 알고, 써먹을 시간이 왔을 때, 습득하는 쪽으로 가자.
    • 매개변수로 [x, y, ...z] 를 줄 때, rest parameter는 하나만 있거나, 오른쪽 끝에 있어야함. [x, ...y, z] 이렇게는 안된다는 것!
  5. 깃헙에 대해서 복습 및 정리
    • 깃은 쉽게 말해 버전 관리를 해주는 프로그램이고, 깃헙은 그러한 깃을 업로드하고, 다른 사람들과 공유 및 협력할 수 있도록 해주는 플랫폼 혹은 개발자 커뮤니티와 같은 곳.
    • 깃에 대해서 좀 더 심층적으로 알아보면, 먼저, working directory - staging area - local repository - remote repository 로 나눠서 생각해볼 수 있다. 여기서, working directory는 내 소스코드로 작업을 하는 예를 들어, vscode 속의 내 코드들을 생각해보면 된다. 그러면, 그 다음 단계인 staging area는 무엇일까 하면, 중간 저장소라고 비유적으로 표현해볼 수 있다. 이 staging area의 장점 들은 추후에 알아보도록 하고, 일단, working directory에서 modified 된 것들을 git add 해주면, staging area에 staged된다. 즉, 중간 저장된다. 그 다음에, local repository로 commit을 해준다(git commit). 이 commit 단계는 staging area 에서 local repository(remote repository와 나 사이의 최종 관문과 같은 곳)로 modified, staged 된 것을 보내고, 최종적으로 git push를 하면, local repository에서 remote repository로 저장된다(스냅샷을 만드는 것과 유사함).
    • 이 때, git init은 내 소스코드들을 modified, staged, commited 상태로 만들기 위해 '추적'을 해야하는데, 그러한 추적이 가능하려면 숨김 파일 .git을 생성해야함 => 그것을 위한 명령어가 git init
    • git clone : remote repository에 있는 git을 내 로컬로 가져올 때 쓰는 명령어로, zip 파일을 다운받아서 가져오면 .git이 없는데(즉, git init 명령어로 만들어줘야하는데), git clone 하면 생성이 되어 있다.
    • HEAD : 현재 작업중인 브랜치
    • merge : 2개의 브랜치에서 작업한 다른 내용을 하나로 합치는 작업 (merge conflict : 같이 작업하는 팀원들이 서로 같은 부분을 수정하고, push 했을 때, 발생함)
  6. module.exports : 디폴트로 빈객체({})를 가지고 있는 module.exports는 js 파일 내에서 module.exports.add = (x,y) => x+y; 이런식으로, 빈 객체에 우리가 직접 프로퍼티를 넣어줄 수 있다. 이런식으로 프로퍼티를 만들어준 다음에 다른 js 파일에서 해당 js파일을 require하면, 그 require가 리턴하는 값이 module.exports가 되며, 다른 js에서 그 객체에 있는 add 프로퍼티를 쓸 수 있게된다(add메서드라고도 할 수 있음)
  7. 이전에 했던 내용이지만, setTimeout의 매개변수로 받는 함수 인자의 this는 window(웹 브라우저의 경우)을 바인딩 하고, node.js의 경우 global을 바인딩하기 때문에, this의 바인딩 대상을 바꿔줄 때, 그리고 함수를 인자로 넣어줄 때 bind로 this를 바꿔주고, 함수를 리턴해서 넣어주는 용도로 자주 쓴다.
  8. apply, call, bind 복습 time
  9. npm 명령어 관련 : npm으로 패키지 모듈을 다운 받을 때 버전을 지정해서 다운 받고 싶다면 ? =>
    npm install -g [package name]@[version name]
  10. package.json에 scripts 파트의 명령어 중에 특정 js 파일을 불러오는 것과 같은 명령어는? 예를 들어,
    npm run hello(hello는 test.js와 연계되어있는 키값)는
    node test.js 와 같다. 즉, test.js 불러온다는 점에서 결국 같은 기능을 하는 명령어 들임.
profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글