일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- OOP
- 웹개발
- Props
- JavaScript
- 자바스트립트
- 캡슐화
- 클래스
- Zustand
- 리액트
- 불변성
- 타입스크립트
- 프론트엔드
- 상속
- webdevelopment
- frontend
- 자바스크립트
- 노마드코더
- 추상화
- Fetch
- 객체지향프로그래밍
- Hooks
- 패스트캠퍼스
- CSS
- REACT
- 투두앱만들기
- 부트캠프
- typeScript
- github
- js
- 논리연산자
- Today
- Total
connecting dots
Beginner 4회차 1 (7/26) | 즉시실행함수(IIFE), 비동기 처리 용어(pending, fulfilled, rejected), try...catch 구문 + finally, 추상화, 논리연산자(&&, ||), 데이터 통신, 메소드 체이닝 본문
Beginner 4회차 1 (7/26) | 즉시실행함수(IIFE), 비동기 처리 용어(pending, fulfilled, rejected), try...catch 구문 + finally, 추상화, 논리연산자(&&, ||), 데이터 통신, 메소드 체이닝
dearsuhyun 2024. 7. 27. 13:10
즉시실행함수(IIFE)
익명함수를 ( )로 감싸고 그 전체를 바로 (호출)하는 방식
--> 원래 익명함수는 호출할 수 없음 (이름이 없으니까). 이를 가능하게 해주는 방식 !
세미콜론을 명령 뒤에 안 붙이는 경우에는 위쪽의 명령과 섞이지 말라는 의미로
즉시실행함수 앞에 ';'을 붙여줌. 이렇게 하면 오류가 나지 않음
비동기 처리 용어 쉽게 이해하기
상황: 빵을 사러 서울에서 1시에 출발 ! 사고 다시 서울로 돌아온 시간 9시 !
1. 대기(pending)
- 1시부터 9시까지, 출발해서 다시 돌아올 때 까지, 8시간동안의 시간이 대기상태 (기다리고 있는 것)
- 가져오고 있는 중 (ing)
- 도착했으면 대기 끝
2-1. 이행(fulfilled)
- 빵을 잘 사왔으면 '빵을 사러 다녀오다' 미션이 제대로 이행됨 --> 성공
- 갔다왔을 때
2-2. 거부(rejected)
- 빵 사오라고 했는데 안 사오고 바다만 구경. '까먹었어' --> 실패
- 갔다오긴 했는데 미션이 제대로 이행되지 않음
==> 거부가 되었다고 하면 에러 메세지를 띄워줘야 함. (거부된 상태에 대한 예외처리가 필요함)
거부된 상황은 의도되지 않은 '예외 상황' (의도한 것은 빵을 잘 사오는 것이었는데 안 사왔으므로 예외상황)
--> 예외 상황을 처리하는 코드가 필요함 --> 예외 처리
예외 처리
Try - Catch 구문
- try와 catch는 항상 같이 사용
fetch('https://api.heropy.dev/v0/users' 에서 에러가 발생하면
--> 정상 처리 되었을 때 실행되어야 할 try 구문은 실행되지 않고 무시되며 바로 catch로 넘어감
(거부된 코드 다음 코드들은 실행되지 않고 catch 구문으로 넘어감)
에러가 발생하지 않으면 ? --> try 구문만 실행되고 catch 구문은 실행되지 않음
인디케이터(로딩 애니메이션): 데이터를 화면에 채워야 하는데 서버가서 가지고 오는데 시간이 걸림. 가져오면 없어짐
가져왔는데 에러 났으면 에러 메시지를 보여주는데 로딩 애니메이션은 안 보일 것임
--> 잘 가져왔든 아니든 없어지는 것
로딩 애니매이션은 이행되나 거부되나 상관없이 동작해야 함.
Finally 구문
필수 부분은 아님. 필요 시에 사용
이행, 거부 상태에 상관없이 pending이 끝나면 무조건 실행되는 코드
이행 -(출력)-> 이행, 무조건
거부 -(거부)-> 거부, 무조건
console.error(error.message)
console 객체:
• console은 자바스크립트에서 제공하는 내장 객체로, 다양한 디버깅 메서드를 포함하고 있습니다. 그 중 하나가 error 메서드입니다.
error 메서드
• console.error()는 에러 메시지를 콘솔에 출력하는 메서드입니다. 이 메서드는 주로 에러 상황에서 사용자에게 에러 정보를 제공하거나 디버깅 목적으로 사용됩니다.
• 출력되는 메시지는 보통 빨간색으로 표시되어 눈에 띕니다.
error.message:
• error.message는 Error 객체의 속성입니다. 이 속성에는 에러에 대한 설명이 담겨 있습니다.
• 예를 들어, new Error("Something went wrong")로 생성된 에러 객체는 message 속성에 "Something went wrong"를 가집니다.
에러 객체 생성 및 출력
try { // 에러를 의도적으로 발생시킴 throw new Error("Something went wrong"); } catch (error) { // 에러 메시지를 콘솔에 출력 console.error(error.message); }
• 설명:
• throw new Error("Something went wrong"): 에러 객체를 생성하고 이를 던집니다.
• catch (error): 던져진 에러를 잡아 error 변수에 저장합니다.
• console.error(error.message): 에러 객체의 message 속성을 콘솔에 출력합니다.
errorEl.textContent = error.message
1. errorEl
• 설명: errorEl은 HTML 요소를 참조하는 변수입니다. 예를 들어, HTML 문서에서 특정 요소를 가리킬 때 사용됩니다.// 예제 const errorEl = document.getElementById('error');
2. textContent
• 설명: textContent는 DOM 요소의 속성으로, 요소 내의 텍스트 콘텐츠를 설정하거나 가져올 때 사용됩니다. 이 속성은 HTML 태그를 포함하지 않고 순수한 텍스트만 포함합니다.// 예제 // errorEl 요소의 텍스트 콘텐츠를 “An error occurred”로 설정 errorEl.textContent = "An error occurred";
추상화
복잡한 시스템의 세부 사항을 숨기고, 간단하고 이해하기 쉬운 인터페이스를 제공하는 것
추상화의 장점: 가독성 향상, 재사용성 증가, 유지 보수 용이
논리연산자(&& , | |)
1. 그리고 연산자 (&&)
왼쪽에서부터 해석함
가장 먼저 만나는 거짓(falsy)를 반환함
거짓이 없으면 가장 마지막에 있는 것을 반환함
console.log(true && false) // false
console.log(123 && 456) // 456
console.log(1 && 2 && 3 && 4) // 4
console.log(1 && 2 && 0&& 3 && 4) // 0
예제
if (true && false) {
console.log('안녕')
} // 출력 안됨
if (123 && 456) { // if (456)
console.log('안녕')
} // 안녕
if (1 && 0 && 2 && 3) {
console.log('안녕')
} // 출력 안됨
<div>{loading && '로딩 중...'}</div>
// '로딩 중...'
2. 또는 연산자 ( | | )
왼쪽에서부터 해석함
가장 먼저 만나는 참(true)를 반환함
참이 없으면 가장 마지막에 있는 것을 반환함
console.log(0 || false || null || undefined) // undefined
console.log(0 || false || null || 123 || undefined) // 123
데이터 통신 (블로그 읽어보기)
자바스크립트는 웹 브라우저와 컴퓨팅환경에서 작동할 수 있음
(컴퓨팅 환경에서 작동) node.js + npm
fetch함수는 Web API(명령) --> 웹에서만 쓸 수 있는 명령(웹에서의 기본 명령). 따라서 node에는 fetch 함수 기능이 없음 (사용할 수 있는 라이브러리가 있긴 함)
실무에서는 Axios 라는 라이브러리를 사용하는 것을 추천하기도 함 (설치 필요)
https://www.heropy.dev/p/QOWqjV
데이터 통신을 위한, Fetch 함수와 Axios 라이브러리
서버와 클라이언트 간의 데이터 통신은 웹 개발의 핵심 개념 중 하나로, 자바스크립트에서의 데이터 통신을 위한 fetch 함수와 axios 라이브러리의 사용법을 알아봅니다.
www.heropy.dev
메소드 체이닝
객체 지향 프로그래밍에서 여러 메소드를 하나의 문장으로 연속적으로 호출할 수 있게 하는 기법
이는 각 메소드가 객체 자신을 반환함으로써 가능해지며, 이를 통해 코드를 더 간결하고 읽기 쉽게 만듦
const number = [1, 2, 3]
number.forEach()
// number는 변수가 참조하는 이름일 뿐
// [1, 2, 3].forEach()와 같음
- 함수 + 함수도 가능
function number() {
return [1, 2, 3]
}
number().forEach()
// number 함수가 호출되면 그 자리에 [1, 2, 3]이 남음
// 항상 함수 호출되는 자리에는 어떠한 데이터가 남아있을까를 생각해야 함
const number = [1, 2, 3]
number().map(n => n).forEach()
// 1. number().map(n => n).forEach()
// 2. [1, 2, 3].map(n=>n).forEach()
// 3. [1, 2, 3].forEach()
- 불가능한 경우
[1, 2, 3].forEach().map(n=>n)
// undefined.map(n => n)
// forEach()는 undefined를 반환하므로 undefined에 대해 map 메소드를 호출하려고 하면 오류 발생
// undefined는 map 메소드를 가지지 않기 때문에 뒤에 map 체이닝될 수 없음
forEach와 map의 차이점
forEach
• 역할: 배열의 각 요소에 대해 주어진 함수를 실행합니다.
• 반환값: undefined
• 사용 예: 주로 배열의 각 요소에 대해 부수 효과(side effect)를 발생시키기 위해 사용됩니다. 예를 들어, 각 요소를 콘솔에 출력하거나, 배열의 각 요소를 이용해 어떤 작업을 수행할 때 사용됩니다.
let arr = [1, 2, 3]; arr.forEach(n => console.log(n)); // 1, 2, 3 출력
map
• 역할: 배열의 각 요소에 대해 주어진 함수를 실행하고, 그 결과를 새로운 배열로 반환합니다.
• 반환값: 변형된 새로운 배열
• 사용 예: 배열의 각 요소를 변형하고 그 결과를 새로운 배열로 얻고자 할 때 사용됩니다. 예를 들어, 배열의 각 숫자에 2를 곱한 새로운 배열을 얻을 때 사용됩니다.
let arr = [1, 2, 3]; let newArr = arr.map(n => n * 2); console.log(newArr); // [2, 4, 6]
* 공부할 때 어떤 것을 호출하면 무엇을 반환하는지까지 같이 외워둬야 함 !
함수 호출과 결과물
function abc() {
return 123
}
const a = abc()
console.log(typeof abc) // 'function'
console.log(typeof abc()) // 'number'
함수를 호출하면 항상 어떠한 결과물(return으로 반환하는 값)을 두고 가기 때문에 이 부분을 항상 유념할 것
* 자바스크립트에서 오류가 발생한다면 ?
자바스트립트는 싱글 엔진 --> 멈춰버림
엔진이 죽지 않고 정상처리 가능함
* 에러발생하면 쫄지말고 잘 읽어보기. 오히려 어디가 문제인지 알려주는 친절한 존재
* 용어가 거창하다고 해서 쫄지 말자. 용어가 기술로 연결될 때는 중요하게 봐야 함(ex. 클로저(closer))
* 컴포넌트 이름은 파스칼케이스로, 두개 단어 이상으로 만드는 것을 추천(html의 태그와 섞여버릴 가능성을 최대한 줄이기 위해)
ex. TheLoader.tsx, TheHeader.tsx
* 인터넷으로 공부할 때, 최신 포스팅 위주로 보는 것 추천
* tsx는 import할 때 확장자를 적지 않음
https://developer.mozilla.org/en-US/docs/Web/API/console
console - Web APIs | MDN
The console object provides access to the debugging console (e.g., the Web console in Firefox).
developer.mozilla.org