함수에 기능을 추가하는 코드를 재사용 할 수 있다.
콜백지옥?
여러 로직이 componentWillUnmount, componentDidMount 등의 리액트 life cycle에 흩어지게된다.
함수는 단일 책임 원칙을 벗어나게되고, 코드는 복잡해지고, 디버깅도 어려워진다.
그래서 나타난게 Hook이다.
컴퓨넌트의 상태(state)가 변하면, 컴포넌트의 리렌더링을 발생시킨다.
Component
모듈? 애플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드조각
세부사항을 캡슐화하고 공개가 필요한 API만을 외부에 노출한다.
모듀른 파일 단위로 분리되어 있으며, 애플리케이션은 필요에 따라 명시적으로 모듈을 로드하여 재사용한다.
(애플리케이션과 분리되어 개별적으로 존재하다가, 애플리케이션의 로드에 의해 일원이 된다.)
기능별로 분리되어 작성되므로 코드 단위르 명확히 분리한다. 재사용성이 좋아서 효율성, 유지보수성을 높인다.
script 태그에 type= “module” 어트리뷰트를 추가하면 로드된 자바스크립트 파일은 모듈로서 동작한다.
ES6 모듈의 파일 확장자는 모듈임을 명확히 하기위해 mjs를 사용하도록 권장한다.
1 | <script type="module" src="app.mjs"></script> |
ES6 모듈의 단점
구형 브라우저는 ES6 모듈을 지원하지 않는다.
브라우저의 ES6 모듈 기능을 사용하더라도 트랜스파일링이나 번들링이 필요하다.
지원하지 않는 기능이 있다. (Bare import 등)
따라서 ES6 모듈기능보다는 Webpack 등의 모듈 번들러를 사용하는 것이 일반적이다.
| 구성 요소 | 내용 | 표현 방법 |
|---|---|---|
| 자원(Resource) | 자원 | HTTP URI |
| 행위(Verb) | 자원에 대한 행위 | HTTP 요청 메소드 |
| 표현(Representations) | 자원에 대한 행위의 구체적 내용 | HTTP 페이로드 |
1 |
|
비동기 처리를 위해 콜백 함수를 사용한다.
하지만 콜백 패턴은 가독성이 나쁘고 비동기 처리 중 발생한 에러의 예외 처리가 곤란하며 여러 개의 비동기 처리 로직을 한꺼번에 처리하는 것도 한계가 있다.
이를 보완하기위해 ES6에서 프로미스를 도입. 비동기 처리 시점을 명확하게 표현한다.
후속 처리 메소드를 체이닝(chainning)하여 여러 개의 프로미스를 연결하여 사용할 수 있다.
콜벡 헬이 발생하는 이유
비동기 처리 모델은 실행 완료를 기다리지 않고 즉시 다음 태스크를 실행한다.
따라서 비동기 함수 내에서 처리 결과를 반환하면 기대한 대로 동작하지 않는다.
비동기식 처리 모델(병렬적 태스크 수행)
태스크가 종료되지 않은 상태여도 대기하지 않고 즉시 다음 태스크 실행(Non-Blocking)
DOM 이벤트, Timer 함수, Ajax 요청
비동기 처리를 위해 콜백 패턴을 사용하면 처리 순서를 보장하기 위해 여러 개의 콜백 함수가 네스팅(nesting)되어 복잡도가 높아지는 콜백 헬이 발생된다. (가독성 안좋음)
Promise 생성자 함수를 통해 인스턴스화한다.
1 | const promise = new Promise((resolve, reject) => { |
then
catch
존재하는 값을 Promise로 래핑하기 위해 사용
각각의 프로미스가 resolve한 처리 결과를 배열에 담아 resolve 하는새로운 프로미스 반환
처리순서가 보장
가장 먼저 처리된 프로미스가 resolve한 처리 결과를 resolve하는 새로운 프로미스를 반환
병렬처리 x
1 | function foo() { |
Update your browser to view this website correctly. Update my browser now