Judaeng
🍒What I did today(package.json, 화살표 함수, 모듈화와 CommonJS) 본문
🍒What I did today(package.json, 화살표 함수, 모듈화와 CommonJS)
Judaeng 2021. 2. 25. 00:39✅Modern Javascript Koans
오늘 배운 함수들을 익히는 과제였다. 화살표 함수만 하면 됐는데, 페어 분과하다 보니 시간이 너무 많이 남아서 구조 분해 할당까지 해버렸다.
화살표 함수, 구조 분해 할당, Spread/Rest 문법 등을 익히는 과제였는데 생각보다 잘 이해한 것 같다.
그리고 이 과제를 하기 전에 package.json에 포함되어 있는 npm script를 실행하는 방법도 이해할 수 있었다.
npm run <스크립트 이름> 이런식으로 넣어서 테스트를 실행 및 제출 등을 할 수 있었다.
git clone url -> npm install -> npm run <스크립트 이름> 이런 식으로 확인하면서 이해했다.
구조 분해 할당 문제 중 rest/spread 문법을 객체 분해에 적용할 수 있다.라는 문제가 있었는데
아래 예시를 만들어봤는데 문제는 changeUser가 (???)과 같다면 true 이런식이었다.
근데 거기서는 expect.to.eql을 사용했지만 이해를 위해 console.log()를 사용해서 결과값을 바꿔보았다.
changeUser 객체에서 ...user가 무엇을 뜻하는지 왜 overwriteChanges 객체를 넣어보면 '해커스토익' age: 20 이 왜 안나오는지 이해를 했다.
그리고 마지막 changedDepartment는 ...user.company의 이해를 위해 코드를 적어보았다.
마지막 객체는 ...user, ...user.company가 선언되어 있기 때문에 이 둘의 차이가 무엇인지 알아보았다.
function it(){
const user = {
name: 'judaeng',
company: {
name: '신입사원',
department: 'Development',
role: {
name: 'Software Engineer'
}
},
age: 38
}
const changedUser = {
...user,
name: '해커스토익',
age: 20
}
const overwriteChanges = {
name: '해커스토익',
age: 20,
...user
}
const changedDepartment = {
...user,
company: {
...user.company,
name: 'judaeng',
department: 'Marketing',
role: {
name: 'Software Engineer'
}
}
}
console.log(changedUser); // 여기는 이제 어떠한 객체를 넣어서 결과를 확인한다.
}
it();
✅모듈 사용하기
브라우저와 node.js에서의 사용 차이 그리고 기본적인 사용법, 다른 스크립트를 불러올 때, 모듈로 노출시킬 때 방법을 배웠다.
기본적인 사용법은 let 모듈이 담긴 변수 = require('모듈이름') 이런식으로 불러온다.
다른 스크립트를 불러올 때도 사용 가능하다. 위에처럼 모듈이름을 'index2.js'라고 했을때 index2.js에 있는 내용을 불러온다.
마지막으로 모듈로 노출시킬 때는 다른 스크립트 파일에서 내가 만든 모듈을 사용할 수 있도록 노출시키는 방법이다.
// script1.js
const module2 = require('./script2.js')
console.log(modules2) // 'this is module 2'
// script2.js
module.exports = 'this is module 2'
module.exports 대신에 exports를 사용할 수도 있다. exports는 일종의 축약형(shortcut)이다.
exports는 module.exports를 참조한다.
이러한 모듈 노출 방법과 불러오는 방법을 CommonJS 모듈 시스템이라고 부른다.
🍒Remember
✅package.json이란?
NPM 모듈을 활용하기 위해 해당 모듈에 대한 정보를 담은 파일이다. 즉, 프로젝트 전반에 관한 정보가 들어있다.
$npm install
(npm -> 내 컴퓨터)
package.json에 적힌 모듈을 다운로드한다.
devDependencies란?
프로그램 실행과 관계없는 오로지 개발을 위해 필요한 dependency(의존성 모듈)
$npm install mocha --save-dev
--save-dev 옵션과 함께 install 진행 시 자동으로 devDependencies에 추가된다.
$npm install react or $npm install --save react
그냥 다운로드 <-> 다운로드 진행시 devDependencies에 추가한다.
왜 저장할까?
npm install은 package.json에 있는 dependency(의존성 모듈)을 바탕으로 설치한다.
모듈은 쓰고 있지만 npm install으로는 설치되지 않는다.
dependency에 만약 등록되어 있지 않다면? 팀 갈등의 주요 원인이 된다고 하는데 아직은 이해 못했다.
script항목(CLI에서 사용 가능한 명령 npm install)
$npm run <스크립트 이름>
✅화살표 함수
화살표 함수와 일반 함수를 비교하면서 보는게 제일 좋은 것 같다.
화살표 함수는 function 키워드를 화살표로 축약해서 표시할 수 있다.
함수 본문에 return 문만 있는 경우, return을 생략할 수도 있다. (이 때 주의해야 할 점은 {}중괄호를 사용하면 안된다.)
그리고 화살표 함수는 클로저를 표현할 때 더욱 좋다고 한다. 아래 예시가 클로저 예시이다.
// 함수 표현식
const adder = function(x) {
return function(y) {
return x + y
}
}
adder(5)(7) // 12
// 화살표 함수
const adder = (x) => {
return (y) => {
return x + y
}
}
// 2
const adder = x => {
return y => x + y
}
// 3
const adder = x => y => x + y
- 모든 모듈은 자신만의 독립적인 실행 영역이 있어야 한다.
- 모듈 정의는 전역객체인 exports 객체를 이용한다.
- 모듈 사용은 require 함수를 이용한다.
<script>
var $ = require('jquery');
var foo = require('./js/foo');
var bar = require('./js/bar');
var foobar = require('./js/foobar');
// foo.js
exports.foo = () => {...};
// bar.js
exports.bar= () => {...};
// foobar.js
exports.foobar= () => {...};
module.exports vs exports ?
- exports는 module.exports 사용을 도와주는 helper
- exports는 module.exports를 참조할 뿐이다.
- module.exports에 뭔가가 이미 붙어있다면, exports는 무시된다. => 섞어 쓰면 안된다.
module.exports <========= exports
// index.js file
module.exports = {a: 1}
// index-runner.js
const index = require('./index');
console.log(index); // {a: 1}
//hello.js file
exports = {a: 1}
//hello-runner.js
const hello = require('./hello');
console.log(hello); // { }
🍒More Study
✅AJAX, 비동기, XMLHttpRequest 정리
✅화살표함수 자주 사용해보기
2021-02-24
하루 알고리즘 문제 풀어보기 도전⚡
풀기만 하지말고 그 문제의 대한 개념을 정리하기가 제일 중요하다!
'Daily > TIL(Today I Leared)' 카테고리의 다른 글
🍒What I did today(OOP에 대해서 정리) (0) | 2021.03.02 |
---|---|
🍒What I did today(클래스와 인스턴스, this응용 - call, apply, bind 메서드 사용하기) (0) | 2021.03.01 |
🍒What I did today(Git Workflow, 충돌 해결, branch 만들어 보기) (0) | 2021.02.24 |
🍒What I did today(ES6 문법정리하기, node.js 설치) (0) | 2021.02.22 |
🍒What I did today(밀렸던 블로깅하기) (0) | 2021.02.19 |