6. JavaScript Array method

JavaScript Array

JavaScript Array는 자바스크립트에서 가장 유용하고 자주 사용되는 데이터 구조 중 하나입니다. 배열을 다루는 메소드들과 활용 예시를 알아봅시다.

JavaScript Array

1. splice()

splice() 메소드는 배열에서 특정 요소를 제거하거나 추가하는 데 사용됩니다.

예시:

<code>
let arr = [1, 2, 3, 4, 5];
arr.splice(1, 2); // [2, 3] 제거
console.log(arr); // [1, 4, 5]

arr.splice(1, 3, 100, 200); // 인덱스 1부터 3개 제거하고 100과 200 추가
console.log(arr); // [1, 100, 200, 5]

let arr = ["나는", "철수", "입니다"];
arr.splice(1, 0, "대한민국", "소방관"); // 인덱스 1부터 아무것도 제거하지 않고 "대한민국"과 "소방관" 추가
console.log(arr); // ["나는", "대한민국", "소방관", "철수", "입니다"]
</code>

2. slice()

slice() 메소드는 배열의 일부를 추출하여 새로운 배열을 반환합니다.

예시:

<code>
let arr = [1, 2, 3, 4, 5];
arr.slice(1, 4); // [2, 3, 4]
</code>

3. concat()

concat() 메소드는 배열을 합쳐서 새로운 배열을 반환합니다.

예시:

<code>
let arr = [1, 2];
arr.concat([3, 4]); // [1, 2, 3, 4]
arr.concat([3, 4], [5, 6]); // [1, 2, 3, 4, 5, 6]
arr.concat([3, 4], 5, 6); // [1, 2, 3, 4, 5, 6]
</code>

4. forEach()

forEach() 메소드는 배열의 각 요소를 반복하며 함수를 실행합니다.

예시:

<code>
let users = ['Mike', 'Tom', 'Jane'];
users.forEach((item, index, arr) => {
   console.log(`${index + 1}. ${item}`);
});
// 1. Mike
// 2. Tom
// 3. Jane
</code>

5. indexOf()와 lastIndexOf()

indexOf()는 배열에서 특정 요소의 인덱스를 찾습니다. lastIndexOf()는 배열에서 뒤에서부터 찾습니다.

예시:

<code>
let arr = [1, 2, 3, 4, 5, 1, 2, 3];
arr.indexOf(3); // 2
arr.indexOf(3, 3); // 7
arr.lastIndexOf(3); // 7
</code>

6. includes()

includes() 메소드는 배열에 특정 요소가 포함되어 있는지 확인합니다.

예시:

<code>
let arr = [1, 2, 3];
arr.includes(2); // true
arr.includes(8); // false
</code>

7. find()와 findIndex()

find() 메소드는 주어진 조건에 맞는 첫 번째 요소를 반환합니다. findIndex()는 해당 요소의 인덱스를 반환합니다.

예시:

<code>
let arr = [1, 2, 3, 4, 5];
let result = arr.find((item) => {
  return item % 2 === 0;
});
console.log(result); // 2

let userList = [
  { name: 'Mike', age: 30 },
  { name: 'Jane', age: 27 },
  { name: 'Tom', age: 10 }
];
const result = userList.find((user) => {
  return user.age < 19;
});
console.log(result); // { name: 'Tom', age: 10 }
</code>

8. reverse()

reverse() 메소드는 배열을 역순으로 재정렬합니다.

예시:

<code>
let arr = [1, 2, 3, 4, 5];
arr.reverse(); // [5, 4, 3, 2, 1]
</code>

9. map()

map() 메소드는 배열의 모든 요소에 대해 주어진 함수를 호출하고, 새로운 배열을 반환합니다.

예시:

<code>
let userList = [
  { name: 'Mike', age: 30 },
  { name: 'Jane', age: 27 },
  { name: 'Tom', age: 10 }
];

let newUserList = userList.map((user, index) => {
  return { ...user, isAdult: user.age > 19 };
});
console.log(newUserList);
// { name: 'Mike', age: 30, isAdult: true },
// { name: 'Jane', age: 27, isAdult: true },
// { name: 'Tom', age: 10, isAdult: false }
</code>

10. join()과 split()

join() 메소드는 배열의 요소를 문자열로 합치고, split() 메소드는 문자열을 배열로 분할합니다.

예시:

<code>
let arr = ["안녕", "나는", "철수야"];
let result = arr.join();
console.log(result); // "안녕,나는,철수야"
</code>

이렇게 다양한 JavaScript Array 메소드를 적절히 활용하면 데이터를 다루는데 편리하고 효율적인 코드를 작성할 수 있습니다. 자바스크립트에서 배열을 다룰 때 유용한 이러한 메소드들을 잘 활용하여 더 나은 개발을 할 수 있기를 바랍니다.

[javascript array 공식 문서]

[wooyung’s IT 블로그]

5. JavaScript – 숫자와 수학 메소드

JavaScript

JavaScript는 다양한 숫자와 수학 관련 메소드를 제공하여 숫자 데이터를 다룰 수 있습니다. 이번 글에서는 toString(), Math 객체의 메소드들, 그리고 parseFloat(), isNaN(), parseInt() 등의 개념과 예제를 통해 자세히 알아보겠습니다.

1. toString() 메소드

toString() 메소드는 숫자를 다른 진법의 문자열로 변환할 때 사용됩니다. 예를 들어, 10진수 숫자를 2진수나 16진수로 변환하는 것이 가능합니다.

<code>
let num = 10;
num.toString(); // "10"
num.toString(2); // "1010"

let num2 = 255;
num2.toString(16); // "ff"
</code>

2. Math 객체

Math.PI: 원주율(π) 값을 제공합니다.

Math.ceil(): 주어진 숫자를 올림하여 반환합니다.

Math.floor(): 주어진 숫자를 내림하여 반환합니다.

Math.round(): 주어진 숫자를 반올림하여 반환합니다.

<code>
let num1 = 5.1;
let num2 = 5.7;

Math.ceil(num1); // 6
Math.ceil(num2); // 6

Math.floor(num1); // 5
Math.floor(num2); // 5

Math.round(num1); // 5
Math.round(num2); // 6
</code>

3. 소수점 자릿수 표현

toFixed() 메소드를 사용하면 소수점 자릿수를 지정하여 숫자를 표현할 수 있습니다.

<code>
let userRate = 30.1234;

userRate.toFixed(2); // "30.12"
userRate.toFixed(0); // "30"
userRate.toFixed(6); // "30.123400"
</code>

4. isNaN() 메소드

isNaN() 메소드는 주어진 값이 숫자인지 여부를 확인하여 true 또는 false를 반환합니다.

<code>
let x = Number('x');

isNaN(x); // true
isNaN(3); // false
</code>

5. parseInt()와 parseFloat()

parseInt()는 문자열을 정수로 변환하고, parseFloat()는 문자열을 부동소수점 숫자로 변환합니다.

<code>
let margin = '10px';
parseInt(margin); // 10
parseFloat(margin); // 10

let redColor = 'f3';
parseInt(redColor); // NaN
parseInt(redColor, 16); // 243
</code>

6. Math.random() 메소드

Math.random() 메소드는 0부터 1 사이의 무작위 숫자를 생성합니다. 이를 활용하여 특정 범위의 임의의 숫자를 뽑을 수 있습니다.

<code>
// 1 ~ 100 사이 임의의 숫자
Math.floor(Math.random() * 100) + 1;
</code>

JavaScript 숫자와 수학 메소드: toString(), Math, parseFloat(), isNaN(), parseInt()

JavaScript에서 숫자를 다루는 다양한 메소드를 살펴보았습니다. toString() 메소드를 이용하여 숫자를 2진수나 16진수로 변환할 수 있으며, Math 객체의 ceil(), floor(), round() 메소드를 활용하여 숫자를 올림, 내림, 반올림할 수 있습니다.

toFixed() 메소드를 이용하여 소수점 자릿수를 지정하여 숫자를 표현할 수 있으며, isNaN() 메소드를 이용하여 주어진 값이 숫자인지 여부를 확인할 수 있습니다.

또한, parseInt()와 parseFloat() 메소드를 사용하여 문자열을 정수나 부동소수점 숫자로 변환할 수 있습니다. Math.random() 메소드를 활용하면 0부터 1 사이의 무작위 숫자를 생성할 수 있으며, 이를 활용하여 특정 범위의 임의의 숫자를 뽑아낼 수 있습니다.

[javascript 공식 문서]

[wooyung’s IT 블로그]

4. JavaScript Symbol을 이해하고 사용하는 방법

JavaScript Symbol

JavaScript의 데이터 타입 중 하나인 심볼(Symbol)에 대해 알아보겠습니다. JavaScript Symbol은 유일하고 변경 불가능한 데이터 타입이며, 주로 충돌 위험이 없는 객체 속성의 키로 사용됩니다.

1. JavaScript Symbol 생성

JavaScript에서 심볼은 Symbol() 함수를 통해 생성할 수 있습니다. 심볼은 각각 유일하므로, 같은 함수로 여러 심볼을 생성하더라도 서로 다릅니다.

javascript

<code>const a = Symbol();
const b = Symbol();
console.log(a === b); // false
</code>

위의 예에서는 두 개의 심볼 ‘a’와 ‘b’를 생성하고 비교하였습니다. 두 심볼이 동일한 Symbol() 함수로 생성되었음에도 불구하고, 두 심볼은 서로 다르기 때문에 결과는 ‘false’입니다.

2. JavaScript Symbol과 속성 키

심볼은 객체 속성의 키로 사용할 수 있습니다. 이런 경우, 해당 속성은 심볼을 통해 만들어진 고유의 속성이 되며, 일반적인 방법으로는 접근할 수 없습니다.

javascript

<code>const id = Symbol('id');
const user = {
  name: 'Mike',
  age: 30,
  [id]: 'myId'
}
console.log(Object.keys(user)); // ["name", "age"]
</code>

이 예에서 Object.keys() 함수는 객체의 속성 키를 배열로 반환하지만, 심볼 키는 무시됩니다.

3. 전역 심볼과 Symbol.for()

전역 심볼 레지스트리는 특정 키와 연결된 심볼을 생성하고 재사용하는 기능을 제공합니다. Symbol.for(key) 함수는 주어진 키를 갖는 심볼을 반환합니다. 키에 해당하는 심볼이 이미 있으면 그 심볼을 반환하고, 그렇지 않으면 새로운 심볼을 생성합니다.

javascript

<code>const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
console.log(id1 === id2); // true
</code>

이 예에서 Symbol.for() 함수는 ‘id’라는 키를 갖는 심볼을 두 번 요청했지만, 동일한 심볼을 반환했습니다. 따라서 두 심볼은 동일합니다.

4. JavaScript Symbol 활용 예제

심볼은 객체의 속성을 숨기는 데 유용하게 사용할 수 있습니다. 이는 심볼로 생성된 속성이 일반적인 속성 열거에서 제외되기 때문입니다.

javascript

<code>// 다른 개발자가 만들어 놓은 객체
const user = {
  name: 'Mike',
  age: 30
}

// 내가 작업
const showName = Symbol("showName");
user[showName] = function() {
  console.log(this.name);
};

// 사용자가 접속하면 보는 메세지
for (let key in user) {
  console.log(`His ${key} is ${user[key]}.`);
}

user[showName](); // Mike
</code>

이 예에서 showName 심볼을 키로 가지는 속성은 객체를 순회하는 반복문에서 무시되므로, 이 메소드를 호출하려면 명시적으로 user[showName]()와 같이 호출해야 합니다.

심볼은 JavaScript에서 강력한 도구입니다. 유일한 속성 키를 생성하여 객체를 안전하게 확장하거나, 충돌 없이 객체를 조작하는 데 사용할 수 있습니다. [공식문서]

이러한 심볼의 기능을 이해하고 잘 활용하면 JavaScript 코드를 더욱 효율적으로 작성할 수 있습니다. 다음 번에는 다른 JavaScript의 주요 기능에 대해 더 깊이 있게 살펴보도록 하겠습니다.[블러그]

3. JavaScript에서 계산된 프로퍼티(Computed property)와 객체 메소드 활용하기

JavaScript는 동적인 언어로서, 그 구조와 구현 방식이 다양하고 유연합니다. 이번 포스트에서는 JavaScript 객체의 ‘계산된 프로퍼티(Computed property)’와 ‘객체 메소드’에 대해 자세히 알아보겠습니다.

1. 계산된 프로퍼티 (Computed property)

객체를 생성할 때 객체 속성의 키를 동적으로 생성하거나 계산하고 싶을 때가 있습니다. 이럴 때 사용하는 것이 계산된 프로퍼티입니다. 이는 대괄호([]) 내에 표현식을 사용하여 객체의 속성 키를 동적으로 생성하는 방법입니다.

Computed property

위 예제에서 user 객체의 age 속성은 변수 key에 의해 동적으로 생성되었습니다. key 변수의 값이 변하면 해당 값에 대응하는 속성 이름이 생성됩니다.

다음 예제에서는 표현식을 사용하여 속성 이름을 계산합니다.

Computed property

2. 객체 메소드

JavaScript 객체에는 다양한 내장 메소드가 있습니다. 이들 메소드를 이용하면 객체를 효과적으로 다룰 수 있습니다.

2.1 Object.assign(): 객체 복제 및 병합

Object.assign() 메소드는 하나 이상의 소스 객체로부터 모든 열거 가능한 속성을 타겟 객체로 복사하는 데 사용됩니다. 소스 객체의 같은 키를 가진 속성은 타겟 객체의 속성을 덮어씁니다.

Computed property

이 예제에서는 빈 객체를 첫 번째 인자로 주고, user 객체를 두 번째 인자로 주어 user 객체를 복제합니다. 이때 첫 번째 인자의 객체에 이미 존재하는 속성은 두 번째 인자의 객체 속성으로 덮어씌워집니다.

2.2 Object.keys(), Object.values(), Object.entries()

Object.keys() 메소드는 객체의 모든 열거 가능한 속성 키를 배열로 반환합니다. Object.values() 메소드는 객체의 모든 열거 가능한 속성 값들을 배열로 반환합니다. Object.entries() 메소드는 객체의 모든 열거 가능한 속성의 [키, 값] 쌍의 배열을 반환합니다.

const user = { name: 'Mike', age: 30, gender: 'm' };
console.log(Object.keys(user)); // ["name", "age", "gender"]
console.log(Object.values(user)); // ["Mike", 30, "m"]
console.log(Object.entries(user)); // [["name", "Mike"], ["age", 30], ["gender", "m"]]

2.3 Object.fromEntries()

Object.fromEntries() 메소드는 [키, 값] 쌍의 배열을 객체로 변환합니다.

Computed property

위 예제에서는 [키, 값] 쌍의 배열을 Object.fromEntries() 메소드를 통해 객체로 변환했습니다.

이번 포스트에서는 JavaScript의 계산된 프로퍼티(Computed property)와 객체 메소드에 대해 알아보았습니다. 계산된 프로퍼티를 통해 동적으로 속성 키를 생성할 수 있고, 객체 메소드를 통해 객체를 효과적으로 다룰 수 있습니다. 이러한 기능들은 JavaScript에서 코드를 더욱 효율적이고 동적으로 작성하는 데 큰 도움이 됩니다.[공식문서]

다음 번에는 다른 JavaScript의 주요 기능에 대해 더 깊이 있게 살펴보도록 하겠습니다. 오늘도 좋은 하루 되세요! 블로그

2. JavaScript 생성자 함수의 이해와 사용법

JavaScript 생성자 함수

JavaScript에서 객체를 생성하는 주요 방법 중 하나는 ‘생성자 함수’를 이용하는 것입니다. 이 포스트에서는 JavaScript의 생성자 함수에 대해 자세히 살펴보고, 어떻게 이를 사용하는지 실제 코드 예제를 통해 살펴보겠습니다.

1. JavaScript 생성자 함수란?

생성자 함수는 JavaScript에서 객체를 생성하고 초기화하는 역할을 합니다. 함수 이름의 첫 글자는 대문자로 시작하는 것이 일반적입니다. new 연산자와 함께 사용되어 객체를 생성하고 초기화하는데, 이때 해당 함수는 생성자 함수로 동작합니다.

<code>function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

const car1 = new Car('Tesla', 'Model S', 2023);
console.log(car1);
</code>

이 코드는 Car라는 생성자 함수를 정의하고, 새로운 Car 객체인 car1를 생성합니다. Car 생성자 함수는 3개의 매개변수를 받아, 새로 생성된 객체의 속성을 초기화합니다.

2. JavaScript 생성자 함수의 특징

생성자 함수는 일반 함수와 마찬가지로 작동하지만, 몇 가지 중요한 차이점이 있습니다.

  1. 생성자 함수는 대문자로 시작합니다: 이는 JavaScript 개발자 사이에서의 관습이며, 일반 함수와 구별하기 위한 방법입니다.
  2. 생성자 함수는 new 연산자와 함께 사용됩니다: new 연산자를 통해 생성자 함수를 호출하면 새로운 객체가 생성되고, 이 객체를 초기화하는 데 사용됩니다.
  3. this 키워드는 생성된 객체를 가리킵니다: 생성자 함수 내에서 this 키워드를 사용하면, 생성된 객체를 참조합니다. 이를 통해 객체의 속성을 설정하거나 메소드를 정의할 수 있습니다.

3. JavaScript 생성자 함수의 사용

이제 생성자 함수를 어떻게 사용하는지 실제 코드를 통해 살펴보겠습니다.

<code>function Employee(name, position, yearHired) {
  this.name = name;
  this.position = position;
  this.yearHired = yearHired;

  this.yearsExperience = function() {
    const currentYear = new Date().getFullYear();
    return currentYear - this.yearHired;
  }
}

const emp1 = new Employee('John Doe', 'Software Engineer', 2019);
console.log(emp1.yearsExperience());
</code>

위의 코드는 Employee라는 생성자 함수를 정의하고, 새로운 Employee 객체 emp1을 생성하며, 객체의 yearsExperience 메소드를 호출하는 과정을 보여줍니다. Employee 생성자 함수는 세 개의 매개변수를 받고, 이를 통해 객체의 속성을 초기화합니다. 또한 yearsExperience라는 메소드를 통해 재직 기간을 계산할 수 있습니다.

생성자 함수는 JavaScript에서 객체를 생성하고 초기화하는 데 사용되는 효과적인 방법입니다. new 키워드와 함께 사용되며, 객체의 속성과 메소드를 초기화하는 데 this 키워드를 사용합니다. 이를 통해 동일한 속성을 가진 여러 객체를 손쉽게 생성할 수 있으며, 코드의 재사용성을 높일 수 있습니다.

하지만 생성자 함수만이 JavaScript에서 객체를 생성하는 유일한 방법은 아닙니다. Object.create 메소드, 클래스, 리터럴 방식 등도 있으니, 각 방식의 장단점을 이해하고 상황에 맞게 선택하는 것이 중요합니다.

오늘의 포스트에서는 JavaScript 생성자 함수[공식문서]에 대해 알아보았습니다. JavaScript의 다양한 객체 생성 방법 중 하나를 배우셨기를 바랍니다. 다음 번에는 다른 객체 생성 방법에 대해 더 자세히 알아보겠습니다[블로그]. 끝까지 읽어주셔서 감사합니다.

1. JavaScript – 변수, 호이스팅, TDZ 그리고 var, let, const

호이스팅

안녕하세요! 오늘은 웹 개발의 필수 언어인 JavaScript의 기본 요소 중 하나인 ‘변수’에 대해 이야기해볼까 합니다. 특히 JavaScript에서 제공하는 세 가지 변수 선언 방식인 var, let, const의 특성에 초점을 맞추어 볼 것입니다.

1. JavaScript와 변수의 세계

JavaScript는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어로, 웹 개발에 있어 핵심적인 역할을 합니다. 이 중 변수는 프로그래밍의 기본 구조를 이루는 요소로, 데이터를 저장하고 참조하는데 필요한 고유한 이름을 가지고 있습니다.

그렇다면, JavaScript에서 제공하는 var, let, const 중 어떤 것을 사용해야 할까요? 상황에 따라 적절하게 선택하여 사용하면 됩니다. 값이 변경되지 않는 상수를 선언할 때는 const를, 값이 변할 수 있는 변수를 선언할 때는 let을, 호이스팅을 이용해야 할 때는 var를 사용합니다.

2. 변수 선언: var, let, const

그럼 이제 JavaScript에서 제공하는 각 변수 선언 방식에 대해 좀 더 자세히 살펴보겠습니다.

2.1 var와 호이스팅

var 키워드를 사용하여 변수를 선언하면, ‘호이스팅(hoisting)’이라는 현상이 발생합니다. 호이스팅은 JavaScript에서 var로 변수를 선언하면, 그 변수의 선언부가 현재 스코프의 최상단으로 끌어올려지는 현상을 말합니다.

<code>console.log(name); // undefined
var name = "JavaScript";
console.log(name); // "JavaScript"
</code>

위 코드에서 볼 수 있듯이, var로 선언된 변수는 선언되기 전에 접근할 수 있지만, 그 값은 undefined입니다.

2.2 let과 TDZ

다음으로 let에 대해 알아보겠습니다. let 키워드를 사용하여 변수를 선언하면, ‘Temporal Dead Zone(TDZ)’라는 개념이 등장합니다. 이는 let으로 선언된 변수가 초기화되기 전까지의 구간을 말하며, 이 시간 동안 변수에 접근하려고 하면 ReferenceError가 발생합니다.

<code>console.log(name); // ReferenceError
let name = "JavaScript";
console.log(name); // "JavaScript"
</code>

2.3 const의 특징

마지막으로 const에 대해 살펴보겠습니다. const는 상수를 선언하는 키워드로, 한 번 값이 할당된 후에는 그 값을 변경할 수 없습니다. 정말로 값을 변경할 수 없을까요? 네, 그렇습니다. const 키워드로 선언된 변수는 한 번 값이 할당된 후에는 그 값을 변경할 수 없습니다.

<code>const name = "JavaScript";
name = "JS"; // TypeError
console.log(name); // "JavaScript"
</code>

const로 선언된 변수에 다른 값을 재할당하려고 하면, TypeError가 발생합니다.

3. 마무리: 변수 선언의 best practice

JavaScript에서 변수를 사용할 때 주의해야 할 점은 무엇일까요? 변수를 선언할 때는 해당 변수가 어떤 목적으로 사용되는지, 그리고 그 변수의 값이 변경될 수 있는지를 먼저 고려해야 합니다. 또한, var, let, const 각각의 특징을 잘 이해하고 사용하는 것이 중요합니다.

오늘은 JavaScript의 변수와 그 선언 방식인 var, let, const에 대해 알아보았습니다. 개발을 하면서 이러한 개념을 이해하고 활용하는 것은 매우 중요하므로, 잘 기억해두시기 바랍니다.

추가적으로 더 알고 싶은 내용이 있으면 문서를 확인해보시고 다른 개발에 대한 내용을 보고 싶으시면 제 블로그 글을 확인 해주세요~!

다음 시간에는 JavaScript의 다른 주제에 대해 다루도록 하겠습니다. 감사합니다!

2023 JavaScript Promise를 깊이 있게 이해하기

JavaScript Promise
Banner about Programming or coding course neural network and artificial intelligence or AI online on computer languages. Software develop technology learning. Creation code process on distance lesson.

JavaScript Promise: JavaScript는 비동기 처리에 대한 여러 가지 패턴을 제공합니다. 그 중 하나인 Promise는 매우 특별한 객체로, 비동기 작업의 결과를 미리 약속(promising)하는 역할을 합니다. 여기서 약속이라는 것은 일정한 시점에 결과값이나 실패 이유를 제공하는 것을 의미합니다.

1. JavaScript Promise란 무엇인가요?

비동기 작업을 추상화한 객체로, 비동기 작업의 최종 완료(또는 실패) 및 그 결과 값을 나타내는 객체가 바로 Promise입니다. 이것은 즉시 계산되지 않고 나중에 계산될 수 있는 값을 나타냅니다.

2. JavaScript Promise객체 생성하기

Promise 객체는 ‘new Promise’ 키워드를 사용하여 생성합니다. 이를 통해 비동기 연산을 수행할 수 있고, 그 연산의 성공, 실패 여부에 따라 결과를 다르게 처리할 수 있습니다. 이런 처리는 각각 resolve와 reject라는 두 개의 콜백 함수를 통해 이루어집니다. 아래는 Promise 객체를 생성하는 기본적인 방법입니다.

<code>
const pr = new Promise ((resolve, reject) => {
   // code
});
</code>

3. JavaScript Promise의 상태 이해하기

Promise 객체는 세 가지 상태를 가집니다: ‘pending’, ‘fulfilled’, 그리고 ‘rejected’.

  1. 처음 Promise 객체가 생성되면 그 상태는 ‘pending'(대기중)입니다. 이 상태에서는 Promise의 결과 값이 아직 결정되지 않았습니다.
  2. 비동기 작업이 성공적으로 완료되면 ‘resolve’ 함수를 호출하여 Promise의 상태를 ‘fulfilled'(이행됨)로 변경합니다. 이 상태에서는 비동기 작업의 결과 값을 가지게 됩니다.
  3. 반대로 비동기 작업이 실패하면 ‘reject’ 함수를 호출하여 Promise의 상태를 ‘rejected'(거부됨)으로 변경합니다. 이 상태에서는 작업 중 발생한 에러를 가지게 됩니다.

4. JavaScript Promise이용하기

Promise 객체는 ‘then’ 메소드를 이용하여 비동기 작업이 완료된 후 실행할 코드를 정의할 수 있습니다. ‘then’ 메소드는 Promise의 상태가 ‘fulfilled’로 변경될 때 호출되는 콜백 함수를 인자로 받습니다. 즉, 이 메소드를 통해 비동기 작업이 성공적으로 완료된 경우의 처리를 정의할 수 있습니다.

5. JavaScript Promise체이닝

Promise의 또 다른 중요한 특징은 체이닝입니다. Promise는 그 결과를 이용해 연속적인 작업을 실행할 수 있는 방법을 제공하는데, 이를 ‘Promise 체이닝’이라고 합니다. 이를 통해 여러 개의 비동기 작업을 순서대로 처리할 수 있습니다.

6. 에러 핸들링

JavaScript Promise에서는 ‘catch’ 메소드를 이용하여 에러를 처리합니다. 비동기 작업 중에 에러가 발생할 경우, ‘catch’ 메소드는 Promise의 상태가 ‘rejected’로 변경될 때 호출되는 콜백 함수를 인자로 받습니다. 이를 통해 비동기 작업이 실패한 경우의 처리를 정의할 수 있습니다.

7. 추가 개념과 사용법

이전에 우리는 JavaScript의 Promise에 대한 기본적인 이해를 획득했습니다. 이번에는 Promise의 추가적인 개념과 사용법에 대해 살펴보도록 하겠습니다. 이를 통해 비동기 처리의 복잡성을 다루는 데 더욱 효율적인 방법을 찾을 수 있습니다.

Promise.all

Promise.all은 여러 개의 Promise를 병렬로 처리할 때 사용합니다. 이 메소드는 Promise 객체들의 배열을 인자로 받아, 모든 Promise가 성공적으로 이행되었을 때만 ‘fulfilled’ 상태가 되고, 그 결과값들을 배열로 반환합니다. 만약 하나라도 실패하면, Promise.all 자체가 ‘rejected’ 상태가 됩니다.

<code>
Promise.all([promise1, promise2, promise3])
.then((results) => {
  console.log(results); // 모든 promise의 결과값 배열
})
.catch((error) => {
  console.log(error);
});
</code>

Promise.race

Promise.race 메소드는 여러 개의 Promise 중 가장 먼저 완료되는 Promise의 결과 또는 에러를 반환합니다.

<code>
Promise.race([promise1, promise2, promise3])
.then((value) => {
  console.log(value); // 가장 먼저 완료된 promise의 결과값
})
.catch((error) => {
  console.log(error);
});
</code>

Promise.allSettled

Promise.allSettled는 Promise.all과 유사하게 여러 개의 Promise를 동시에 처리하지만, 모든 Promise가 settled(완료)될 때까지 기다립니다. 이는 ‘fulfilled’ 상태뿐만 아니라 ‘rejected’ 상태에도 해당됩니다. 따라서 이 메소드를 사용하면, 모든 비동기 작업이 완료된 후에 어떤 작업이 성공했고, 어떤 작업이 실패했는지 확인할 수 있습니다.

<code>
Promise.allSettled([promise1, promise2, promise3])
.then((results) => {
  results.forEach((result) => {
    console.log(result.status); // 'fulfilled' 또는 'rejected'
    console.log(result.value);  // fulfilled 상태일 때의 결과값
    console.log(result.reason); // rejected 상태일 때의 에러
  });
});
</code>

Promise.catch와 Promise.finally

Promise.catch는 앞선 비동기 작업 중 하나라도 에러가 발생했을 때 이를 처리합니다. 이는 각각의 Promise에서 별도로 catch를 설정하는 것이 아니라, 한 곳에서 모든 에러를 관리하도록 돕습니다.

Promise.finally는 Promise가 성공하든 실패하든 항상 실행되는 코드를 정의할 수 있습니다. 이를 통해 자원을 정리하는 등의 작업을 할 수 있습니다.

<code>
myPromise
.then((value) => {
  // 작업 수행
})
.catch((error) => {
  // 에러 처리
})
.finally(() => {
  // 항상 실행할 작업
});
</code>

이렇게 Promise는 JavaScript에서 비동기 처리를 다루는 강력한 도구입니다. 여러 가지 메소드를 이용하면 복잡한 비동기 작업도 효율적으로 관리할 수 있습니다. 따라서 이러한 메소드들에 대해 잘 알아두고, 적절히 활용하는 것이 중요합니다.

Promise는 JavaScript에서 비동기 처리를 위한 강력한 도구입니다. 이를 잘 활용하면 비동기 코드를 효율적으로 관리할 수 있습니다. 프로그래밍에서 비동기 처리는 매우 중요한 주제이므로, Promise를 깊이 이해하고 잘 활용하는 것이 중요합니다.

javascript promise에 대한 추가적인 내용은 문서를 확인하시기 바랍니다.

개발에 대해 많은 정보들이 제 블로그에 방문하시면 확인할 수 있습니다.