ํฌ์ŠคํŠธ

[JavaScript] - ๊ธฐ๋ณธ ๋ฌธ๋ฒ• (4)

๐Ÿš€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ / ํ”„๋กœํ† ํƒ€์ž…

์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ•จ์ˆ˜

  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์—์„œ this๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋  ๊ฐ์ฒด์˜ ์†์„ฑ ์ •์˜
  • ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž„
    • ๋ชจ๋“  ๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์† ๋ฐ›์Œ
1
2
3
4
5
6
7
8
9
10
11
12
function Bellingham(born, height, club) {
  this.born = born;
  this.height = height;
  this.club = club;
}

Bellingham.prototype.getPersonInfo = function() {
  return `${this.born} ${this.height} ${this.club}`;
}

let myBellingham = new Car(`England`, `186cm`, `Real-Madrid`);
console.log(MyBellingham.getPersonInfo()); // England 186cm Real-Madrid

๐Ÿš€ ํด๋ž˜์Šค

ํด๋ž˜์Šค๋Š” ES6๋ถ€ํ„ฐ ๋„์ž…ํ•˜์˜€๊ณ , ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

1๏ธโƒฃ ํด๋ž˜์Šค ์„ ์–ธ

1
2
3
4
5
6
7
8
9
10
11
12
13
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log('Hello, ' + this.name);
  }
}

let ronaldo = new Person('Ronaldo', 40);
ronaldo.greet(); // Hello, Ronaldo
  • โœ”๏ธ constructor๋Š” ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผํ•จ

2๏ธโƒฃ ํด๋ž˜์Šค ์„ ์–ธ์€ ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ๋‹ฌ๋ฆฌ ํ˜ธ์ด์ŠคํŒ… โŽ

1
2
3
4
5
6
7
8
const bellingham = new Person('Bellingham', 22); // ReferenceError: Cannot access 'Person' before initialization

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

3๏ธโƒฃ ์ƒ์†

ํด๋ž˜์Šค๋Š” extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํด๋ž˜์Šค ์ƒ์† ๊ฐ€๋Šฅ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Employee extends Person {
  constructor(name, age, job) {
    super(name, age);
    this.job = job;
  }

  work() {
    console.log(this.name + ' is working as a ' + this.job);
  }
}

let kane = new Employee('Kane', 32, 'soccer-player');
kane.greet(); // Hello, kane
kane.work();  // kane is working as a soccer-player

4๏ธโƒฃ static

static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค ์ž์ฒด์— ์†ํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class UserService {
  static async login(email, password) {
        const isLogin(email, password){
          console.log("๋กœ๊ทธ์ธํ•˜์…จ์Šต๋‹ˆ๋‹ค")
        }
        return { email, password };
    }

    // ํšŒ์›๊ฐ€์ž…
    static async signup(userData) {
        const isSignup(userData){
          console.log("ํšŒ์›๊ฐ€์ž…ํ•˜์…จ์Šต๋‹ˆ๋‹ค")
        }
        return userData;
    } 
}

console.log(UserService.login("kanekane", 1234)); // ๋กœ๊ทธ์ธํ•˜์…จ์Šต๋‹ˆ๋‹ค
console.log(UserService.signup({ name: "Bellingham", age: 22 })); // ํšŒ์›๊ฐ€์ž…ํ•˜์…จ์Šต๋‹ˆ๋‹ค

5๏ธโƒฃ getter / setter

ํด๋ž˜์Šค ๋‚ด ์†์„ฑ์— ์ ‘๊ทผ ๋ฐ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ์Œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Person {
  constructor(name) {
    this._name = name;
  }

  get name() {
    return this._name;
  }

  set name(newName) {
    if (newName) {
      this._name = newName;
    }
  }
}

let person = new Person('Messi');
console.log(person.name); // Messi
person.name = 'Walker';
console.log(person.name); // Walker

6๏ธโƒฃ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

์ƒ์œ„ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์— ์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ) ๊ฐ€๋Šฅ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Club {
  name() {
    console.log('Club Name');
  }
}

class Soccer extends Club {
  name() {
    console.log('Manchester UTD');
  }
}

let myClub = new Soccer();
myClub.name(); // Manchester UTD

๐Ÿš€ ๋‚ด์žฅ ๊ฐ์ฒด

1๏ธโƒฃ ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด

ํ‘œ์ค€ย ๋‚ด์žฅย ๊ฐ์ฒด๋Š”ย ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธย ์—”์ง„์—ย ๊ธฐ๋ณธ์œผ๋กœย ๋‚ด์žฅ๋˜์–ด์žˆ๊ณ , ๋ณ„๋„ ์„ ์–ธ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • Object
  • Function
  • Array
  • String
  • Boolean
  • Number
  • Math
  • Date
  • RegEXP

2๏ธโƒฃ ๋ฐฐ์—ด ๋‚ด์žฅ ๊ฐ์ฒด

์ฃผ์š” ๋ฉ”์„œ๋“œ

  • push() โžก๏ธ ๋ฐฐ์—ด ๋์— ์š”์†Œ ์ถ”๊ฐ€
  • pop() โžก๏ธ ๋ฐฐ์—ด ๋์— ์š”์†Œ ์ œ๊ฑฐ
  • shift() โžก๏ธ ๋ฐฐ์—ด ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ
  • unshift() โžก๏ธ ๋ฐฐ์—ด ์•ž์— ์š”์†Œ ์ถ”๊ฐ€
  • join() โžก๏ธ ๋ฐฐ์—ด์„ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์กฐํ•ฉํ•˜์—ฌ ํ•ฉ์นจ
  • sort โžก๏ธ ๋ฐฐ์—ด ์ •๋ ฌ
  • reverse() โžก๏ธ ๋ฐฐ์—ด ์—ญ์ˆœ์œผ๋กœ ๋’ค์ง‘์Œ
  • mpa(), filter(), reduce() โžก๏ธ ๋ฐฐ์—ด ์ˆœํšŒํ•˜์—ฌ ์ž‘์—… ์ˆ˜ํ–‰

3๏ธโƒฃ ๋ฌธ์ž ๋‚ด์žฅ ๊ฐ์ฒด

์ฃผ์š” ๋ฉ”์„œ๋“œ

  • charAt() โžก๏ธ ํŠน์ • ์ธ๋ฑ์Šค ๋ฌธ์ž ๋ฐ˜ํ™˜
  • split() โžก๏ธ ๋ฌธ์ž์—ด์„ separator ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐฐ์—ด ๋งŒ๋“ฌ
  • concat() โžก๏ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด์ง„ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์นจ
  • indexOf() โžก๏ธ ํŠน์ • ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜
  • includes() โžก๏ธ ๋ฌธ์ž์—ด์— ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
  • slice() โžก๏ธ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋ถ„์„ ์ถ”์ถœ
  • toUpperCase(), toLowerCase(() โžก๏ธ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜
  • substring() โžก๏ธ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

4๏ธโƒฃ Math ๊ฐ์ฒด

์ฃผ์š” ๋ฉ”์„œ๋“œ

  • Math.abs() โžก๏ธ ์ ˆ๋Œ€๊ฐ’ ๋ฐ˜ํ™˜
  • Math.ceil(), Math.floor() โžก๏ธ ์˜ฌ๋ฆผ, ๋‚ด๋ฆผ
  • Math.max(), Math.min() โžก๏ธ ์ตœ๋Œ€๊ฐ’, ์ตœ์†Œ๊ฐ’ ๋ฐ˜ํ™˜
  • Math.random() โžก๏ธ 0๊ณผ 1 ์‚ฌ์ด์˜ ๋‚œ์ˆ˜ ์ƒ์„ฑ
  • Math.min() โžก๏ธ ์ฃผ์–ด์ง„ ์ˆซ์ž ์ค‘ ์ œ์ผ ๋‚ฎ์€ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜
  • Math.round() โžก๏ธ ์†Œ์ˆ˜์ ์„ ๋ฐ˜์˜ฌ๋ฆผ
  • Math.floor() โžก๏ธ ์†Œ์ˆ˜์ ์„ ๋‚ด๋ฆผ
  • Math.ceil() โžก๏ธ ์†Œ์ˆ˜์ ์„ ์˜ฌ๋ฆผ
  • Math.abs() โžก๏ธ ์ ˆ๋Œ€๊ฐ’์„ ๋ฐ˜ํ™˜
  • Math.pow(x, y) โžก๏ธ x์˜ y ์ œ๊ณฑ์„ ๋ฐ˜ํ™˜

๐Ÿš€ ๋™๊ธฐ / ๋น„๋™๊ธฐ

๋™๊ธฐ : ์ฝ”๋“œ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰, ์ด์ „ ์ฝ”๋“œ ์™„๋ฃŒ์ „ ๊นŒ์ง€ ๋‹ค์Œ ์ฝ”๋“œ ์‹คํ–‰ X
๋น„๋™๊ธฐ : ์ฝ”๋“œ๊ฐ€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰, ๋‹ค๋ฅธ ์ฝ”๋“œ ์‹คํ–‰ ๋ฐฉํ•ด X

1๏ธโƒฃ ์ฝœ๋ฐฑํ•จ์ˆ˜

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜

  • ๋™๊ธฐ์‹ ์ฝœ๋ฐฑ(synchronous callback)
    • ํ˜ธ์ถœ๋˜๋Š” ์ฆ‰์‹œ ์‹คํ–‰๋˜๊ณ , ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ โŽ
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    function syncCallback(callback) {
      console.log("์ฝœ๋ฐฑ ์ „");
      callback();
      console.log("์ฝœ๋ฐฑ ํ›„");
    }
    
    syncCallback(() => {
      console.log("๋‚ด๋ถ€ ์ฝœ๋ฐฑ");
    });
    
    // ์ถœ๋ ฅ:
    // ์ฝœ๋ฐฑ ์ „
    // ๋‚ด๋ถ€ ์ฝœ๋ฐฑ
    // ์ฝœ๋ฐฑ ํ›„
    
  • ๋น„๋™์‹ ์ฝœ๋ฐฑ(asynchromous callback)
    • ๋น„๋™๊ธฐ์‹ ์ฝœ๋ฐฑ์€ ํ˜ธ์ถœ๋œ ํ›„ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„์— ์‹คํ–‰
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    function asyncCallback(callback) {
      console.log("์ฝœ๋ฐฑ ์ „");
      setTimeout(() => {
        callback();
        console.log("๋‚ด๋ถ€ ์ฝœ๋ฐฑ");
      }, 1000);
      console.log("์ฝœ๋ฐฑ ํ›„");
    }
    
    asyncCallback(() => {
      console.log("์ฝœ๋ฐฑ ์‹คํ–‰๋จ");
    });
    
    // ์ถœ๋ ฅ:
    // ์ฝœ๋ฐฑ ์ „
    // ์ฝœ๋ฐฑ ํ›„
    // 1์ดˆ ํ›„
    // ์ฝœ๋ฐฑ ์‹คํ–‰๋จ
    // ๋‚ด๋ถ€ ์ฝœ๋ฐฑ
    

2๏ธโƒฃ Promise Then

Promise๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์™„๋ฃŒ ๋˜๋Š” ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด, then ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ •์˜

Promise๋Š” 3๊ฐœ์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง

  • ๋Œ€๊ธฐ : ์ดˆ๊ธฐ์ƒํƒœ
  • ์ดํ–‰ : ์—ฐ์‚ฐ ์™„๋ฃŒ
  • ๊ฑฐ๋ถ€ : ์—ฐ์‚ฐ ์‹คํŒจ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  let promise = new Promise((resolve, reject) => {
  let success = true; // ์ž‘์—… ์„ฑ๊ณต ์—ฌ๋ถ€

    setTimeout(() => {
      if (success) {
        resolve('Data fetched successfully'); // ์ดํ–‰ ์ƒํƒœ
      } else {
        reject('Error in fetching data'); // ๊ฑฐ๋ถ€ ์ƒํƒœ
      }
    }, 2000);
  });

  >> then ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹
  - ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ดํ–‰๋œ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
  - ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ๊ฑฐ๋ถ€๋œ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
  - ๊ฐ then์€ ์ƒˆ๋กœ์šด ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ฒด์ด๋‹์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ 
  promise
    .then((data) => {
      console.log(data); // Data fetched successfully
    })
    .catch((error) => {
      console.error(error); // Error in fetching data
    });

3๏ธโƒฃ async await

async await๋Š” Promise Then์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์คŒ

  • async๋Š” ํ•ญ์ƒ Promise๋ฅผ ๋ฐ˜ํ™˜
1
2
3
4
5
6
  async function fetchData() {
    // ์ด ํ•จ์ˆ˜๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜
    return 'Data fetched';
  }

  fetchData().then(data => console.log(data)); // Data fetched
  • await๋Š” Promise๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜ ์‹คํ–‰์„ ์ค‘์ง€์‹œ์ผœ์คŒ
1
2
3
4
5
6
7
8
9
10
  async function fetchData() {
    let data = await new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('Data fetched');
      }, 2000); 2์ดˆ ์ค‘์ง€ ์‹œ์ผœ์คŒ
    });
    console.log(data); // Data fetched
  }

  fetchData();
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ยฉ Minddo. ์ผ๋ถ€ ๊ถŒ๋ฆฌ ๋ณด์œ 

Powered by Jekyll with Chirpy theme