모듈, 패키지, 라이브러리
패키지 매니저 npm(node package manager)
프로젝트 만들기
해당 경로로 이동해서 npm init npm 초기화 하기
(Window에서는 powershell에서 바로 안 됨)
Get-ExecutionPolicy powershell에서 정책 확인하기 > RestrictedSet-ExecutionPolicy RemoteSigned 정책 바꾸기 > RemoteSigned(Mac에서 실행)
npm init > package.json 파일 생성됨
npm init -y 모든 질문에 yes

npm install ansi-colors 또는 npm i ansi-colors

npm install(인수, ...) -> { 함수 본체 }동기 처리와 비동기 처리
동기 : r=f();
비동기 : 함수를 실행했는데 기다리지 않고 바로 다음으로 넘어가는 .. callback
동기는 복잡도, 성능 낮음 / 비동기는 복잡도 성능 높음
function displayB() {
setTimeout(() => {
console.log('B');
}, 2000); // 2초후 B 실행
} // -> 비동기 작업을 해줌
동기와 비동기 작업은 섞여 있는데 순서는 그대로인걸 요구
function displayA() {
console.log('A');
}
function displayB(callback) {
setTimeout(() => {
console.log('B');
callback(); // 비동기 작업이 끝날 때 callback 호출
}, 2000);
}
function displayC() {
console.log('C');
}
displayA();
displayB(displayC); // 중요
/* A
B
C */
<자바스크립트의 비동기 처리 방법>
콜백 함수: 함수 안에 또 다른 함수를 매개변수로 넘겨서 실행 순서를 제어, but 콜백 함수가 많아지면 가독성이 떨어질 수 있음
프라미스: 프라미스 객체와 콜백 함수를 사용해서 실행 순서를 제어
async/await: async와 await 예약어를 사용해서 실행 순서를 제어
콜백 함수 - 함수 이름을 콜백으로 사용하기
const order = (coffee, callback) => { // 콜백 위치 중요
console.log(`${coffee} 주문 접수`);
setTimeout(() => {
callback(coffee);
}, 3000);
};
const display = (result) => {
console.log(`${result} 완료!`);
};
order('아메리카노', display); // display 함수를 order 함수의 매개변수로
프라미스(Promise)
async/await
async function init() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const users = await response.json();
console.log(users);
} catch (err) {
console.error(err);
}
init();
}
프로그래밍에서 가장 기본적인 개념, 모듈
모듈 module
CommonsJS 모듈 시스템과 ES 모듈 시스템
모듈 내보내기 - module.exports
module.exports = {}모듈 가져오기 - require 함수
require(모듈 파일 경로)module cache?
아래 둘 같은 표현(두개 이상의 변수 내보내기 및 가져오기)
분해 할당 - 이름이 같아야 한다
파일 확장자를 .mjs로 지정
ES 모듈 시스템에서 모듈 내보내기 - export, export default
export 대상 → import 할 것을 명시해 주어야 함export default 대상export {대상1, 대상2,.}ES 모듈 시스템에서 모듈 가져오기 - import ~ from
import 변수명/함수명 from 모듈_파일import ~ as
import * as
import * as say from './greeting-1.mjs'; // greeting.mjs에서 내보낸 함수들을 한꺼번에 say로 받기
export default 가져오기
const hi = (name) => {
console.log(`${name}님, 안녕하세요?`);
};
const goodbye = (name) => {
console.log(`${name}님, 안녕히 가세요.`);
};
export default { hi, goodbye };
// 가져오고 싶은 파일에서
import say from './greeting-2.mjs';
say.hi('홍길동');
say.goodbye('홍길동');
<!DOCTYPE html>
<html>
<head>
<title>Movie</title>
<script>
async function fetchMovies(targetDate) {
const apiKey = ' ';
try {
const response = await fetch(
`http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=${apiKey}&targetDt=${targetDate}`
);
const movie = await response.json();
console.log(movie);
let result = '';
for (let i = 0; i < 10; i++) {
const movieInfo = movie.boxOfficeResult.dailyBoxOfficeList[i];
result += `<div>${movieInfo.rank}   ${movieInfo.movieNm}</div>`;
}
document.getElementById('result').innerHTML = result;
} catch (err) {
console.error(err);
}
}
function handleSearch() {
const dateInput = document.getElementById('date').value;
if (dateInput.length === 8 && !isNaN(dateInput)) {
fetchMovies(dateInput);
} else {
alert('날짜를 YYYYMMDD 형식으로 입력하세요.');
}
}
</script>
</head>
<body>
<div>
<h1>날짜별 영화 랭킹 사이트</h1>
날짜 입력(yyyymmdd):
<input id="date" type="text" placeholder="원하는 날짜를 입력하세요" />
<button onclick="handleSearch()">검색</button>
<div id="result"></div>
</div>
</body>
</html>
