๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Dev/Language

[JavaScript] ํ•จ์ˆ˜ | ๋ฐฐ์—ด | ๊ฐ์ฒด

by haerr 2024. 9. 30.

๋ชฉ์ฐจ!

๐Ÿ˜Š ํ•จ์ˆ˜

1. ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹

function ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ

function square(number) {
  return number * number;
}
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’ ๋ณ€๊ฒฝ์€ ์ „์—ญ์ ์œผ๋กœ ์ ์šฉ๋˜์ง€ ์•Š์Œ.
  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ์—๋Š” ์ „์—ญ์ ์œผ๋กœ ์ ์šฉ

2. ํ•จ์ˆ˜ ํ‘œํ˜„์‹

๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ํ• ๋‹น

const square = function (number) {
  return number * number;
};
const x = square(4); // `x` ์˜ ๊ฐ’์€ 16 ์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ๋„ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
};

console.log(factorial(3));

3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

(ES6์—์„œ ์ถ”๊ฐ€)

๊ฐ„๊ฒฐํ•œ ํ•จ์ˆ˜ ๋ฌธ๋ฒ•์œผ๋กœ, function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , => (ํ™”์‚ดํ‘œ)๋ฅผ ์‚ฌ์šฉํ•ด ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค.

const ํ•จ์ˆ˜๋ช… = (๋งค๊ฐœ๋ณ€์ˆ˜) => {
  // ํ•จ์ˆ˜ ๋ณธ๋ฌธ
};

์˜ˆ์‹œ:

const add = (a, b) => {
  return a + b;
};

console.log(add(2, 3)); // ์ถœ๋ ฅ: 5

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ผ ๋•Œ ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

const square = x => x * x;
console.log(square(4)); // ์ถœ๋ ฅ: 16

๋ฐ˜ํ™˜๊ฐ’์ด ํ•œ ์ค„์ผ ๋•Œ ์ค‘๊ด„ํ˜ธ์™€ return ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

const multiply = (a, b) => a * b;
console.log(multiply(2, 3)); // ์ถœ๋ ฅ: 6

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” this๊ฐ€ ์ •์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค. ์ฆ‰, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ์™ธ๋ถ€ ์Šค์ฝ”ํ”„์˜ this ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ๋Š” ํ˜ธ์ถœ ์‹œ์ ์— ๋”ฐ๋ผ this๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€๋งŒ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์„ ์–ธ๋  ๋•Œ์˜ this๋ฅผ ๊ณ ์ •ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

// this ๋™์ž‘ ์ฐจ์ด

const person = {
  name: "Alice",
  sayName: function() {
    console.log(this.name); // 'this'๋Š” person ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  }
};

person.sayName(); // ์ถœ๋ ฅ: "Alice"

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์‹œ:
const person2 = {
  name: "Bob",
  sayName: () => {
    console.log(this.name); // 'this'๋Š” ์™ธ๋ถ€ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  }
};

person2.sayName(); // ์ถœ๋ ฅ: undefined (๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด์˜ 'this' ์‚ฌ์šฉ)

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŠนํžˆ ์œ ์šฉํ•˜๋ฉฐ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ๋•Œ this๋ฅผ ๋”ฐ๋กœ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์˜ˆ์‹œ:

// ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
const numbers = [1, 2, 3, 4, 5];
const squared = numbers.map(num => num * num);
console.log(squared); // ์ถœ๋ ฅ: [1, 4, 9, 16, 25]
// ๊ฐ„๋‹จํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜
setTimeout(() => {
  console.log("1์ดˆ ํ›„์— ์‹คํ–‰");
}, 1000);

 

๐Ÿ“ฉ ๋ฐฐ์—ด(Array)

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

1. ๋ฐฐ์—ด ์„ ์–ธ

1.1 ๋Œ€๊ด„ํ˜ธ ์‚ฌ์šฉ(๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•)

let arr = [1, 2, 3, 4, 5];

1.2 Array ๊ฐ์ฒด ์‚ฌ์šฉ

let arr = new Array(1, 2, 3, 4, 5);

 

2. ๋ฐฐ์—ด์˜ ํŠน์ง•

์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•œ๋‹ค.

let arr = ["Apple", "Banana", "Orange"];
console.log(arr[0]); // ์ถœ๋ ฅ: "Apple"
console.log(arr[1]); // ์ถœ๋ ฅ: "Banana"

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ๋™์ ์ด๋‹ค.

arr[3] = "Grape"; // ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€
console.log(arr); // ์ถœ๋ ฅ: ["Apple", "Banana", "Orange", "Grape"]

๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

let mixedArray = [1, "Hello", true, null];

 

3. ๋ฐฐ์—ด์˜ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

3.1 ๋ฐฐ์—ด ์ถ”๊ฐ€/์‚ญ์ œ

push: ๋ฐฐ์—ด์˜ ๋์— ์š”์†Œ ์ถ”๊ฐ€.

let arr = [1, 2, 3];
arr.push(4);
console.log(arr); // ์ถœ๋ ฅ: [1, 2, 3, 4]

pop: ๋ฐฐ์—ด์˜ ๋์—์„œ ์š”์†Œ ์ œ๊ฑฐ.

arr.pop();
console.log(arr); // ์ถœ๋ ฅ: [1, 2, 3]

shift: ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ

arr.shift();
console.log(arr); // ์ถœ๋ ฅ: [2, 3]

unshift: ๋ฐฐ์—ด์˜ ์•ž์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€

arr.unshift(0);
console.log(arr); // ์ถœ๋ ฅ: [0, 2, 3]

3.2 ๋ฐฐ์—ด ์ˆœํšŒ

forEach: ๋ฐฐ์—ด ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ•จ์ˆ˜ ์‹คํ–‰

let arr = [1, 2, 3];
arr.forEach(element => console.log(element));

3.3 ๋ฐฐ์—ด ๋ณ€ํ˜•

map: ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜.

let arr = [1, 2, 3];
let squaredArr = arr.map(x => x * x);
console.log(squaredArr); // ์ถœ๋ ฅ: [1, 4, 9]

filter: ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๋“ค๋กœ๋งŒ ์ƒˆ ๋ฐฐ์—ด ์ƒ์„ฑ.

let arr = [1, 2, 3, 4, 5];
let evenArr = arr.filter(x => x % 2 === 0);
console.log(evenArr); // ์ถœ๋ ฅ: [2, 4]

reduce: ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ•์•ฝ.

let arr = [1, 2, 3, 4];
let sum = arr.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // ์ถœ๋ ฅ: 10

3.4 ๋ฐฐ์—ด ๊ฒ€์ƒ‰

indexOf(): ํŠน์ • ๊ฐ’์ด ๋ฐฐ์—ด์˜ ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ (์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜)

let arr = ["Apple", "Banana", "Orange"];
console.log(arr.indexOf("Banana")); // ์ถœ๋ ฅ: 1

find(): ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜

let arr = [1, 2, 3, 4, 5];
let firstEven = arr.find(x => x % 2 === 0);
console.log(firstEven); // ์ถœ๋ ฅ: 2

includes(): ๋ฐฐ์—ด์— ํŠน์ • ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜

let arr = [1, 2, 3];
console.log(arr.includes(2)); // ์ถœ๋ ฅ: true

3.5 ์ •๋ ฌ

sort(): ๋ฐฐ์—ด์„ ์ •๋ ฌ (๊ธฐ๋ณธ์ ์œผ๋กœ ์š”์†Œ๋“ค์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ)

let arr = [3, 1, 4, 1, 5, 9];
arr.sort();
console.log(arr); // ์ถœ๋ ฅ: [1, 1, 3, 4, 5, 9]
// ์ˆซ์ž๋ฅผ ์ œ๋Œ€๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด ๋น„๊ตํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ
arr.sort((a, b) => a - b);
console.log(arr); // ์ถœ๋ ฅ: [1, 1, 3, 4, 5, 9]

 

4. ๋‹ค์ฐจ์› ๋ฐฐ์—ด

let matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
console.log(matrix[1][1]); // ์ถœ๋ ฅ: 5

5. ๋ฐฐ์—ด์˜ ๊ธธ์ด

length

let arr = [1, 2, 3, 4, 5];
console.log(arr.length); // ์ถœ๋ ฅ: 5

 

๐ŸŽŠ ๊ฐ์ฒด(Object)

ํ‚ค-๊ฐ’ ์Œ์˜ ์ง‘ํ•ฉ์œผ๋กœ, ๋‹ค์–‘ํ•œ ์†์„ฑ(property)๊ณผ ๋ฉ”์„œ๋“œ(method)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

 

1. ๊ฐ์ฒด ์ƒ์„ฑ

  1. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

์ค‘๊ด„ํ˜ธ {} ์•ˆ์— ์†์„ฑ์„ ์ •์˜

let person = {
  name: "Alice",
  age: 25,
  isStudent: true
};

 

2. new Object() ์‚ฌ์šฉ

new Object()๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

let person = new Object();
person.name = "Alice";
person.age = 25;
person.isStudent = true;

2. ๊ฐ์ฒด์˜ ์†์„ฑ

๊ฐ์ฒด๋Š” ์†์„ฑ(property)์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ‚ค(key)์™€ ๊ฐ’(value)์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ

์†์„ฑ ์ ‘๊ทผ ๋ฐฉ๋ฒ•:

  • ์  ํ‘œ๊ธฐ๋ฒ• (dot notation):
  • console.log(person.name); // "Alice" console.log(person.age); // 25
  • ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ• (bracket notation): ๋™์ ์œผ๋กœ ์†์„ฑ๋ช…์„ ์ •์˜ํ•  ๋•Œ ์œ ์šฉ 
  • let key = "name";
    console.log(person[key]); // "Alice"
    
  • console.log(person["name"]); // "Alice" console.log(person["age"]); // 25

์†์„ฑ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ:

  • ์†์„ฑ ์ถ”๊ฐ€/์ˆ˜์ •:
  • person.gender = "female"; // ์ƒˆ๋กœ์šด ์†์„ฑ ์ถ”๊ฐ€ person.age = 26; // ๊ธฐ์กด ์†์„ฑ ์ˆ˜์ •
  • ์†์„ฑ ์‚ญ์ œ:
  • delete person.isStudent; console.log(person); // { name: "Alice", age: 26, gender: "female" }

 

3. ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ

๊ฐ์ฒด๋Š” ๋ฉ”์„œ๋“œ(method)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ•จ์ˆ˜ ํฌํ•จ → ๊ฐ์ฒด์˜ ๋™์ž‘(๊ธฐ๋Šฅ)์„ ์ •์˜

let person = {
  name: "Alice",
  age: 25,
  greet: function() {
    console.log(`Hello, my name is ${this.name}.`);
  }
};

person.greet(); // ์ถœ๋ ฅ: Hello, my name is Alice.

  • this ํ‚ค์›Œ๋“œ: ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฉ”์„œ๋“œ์—์„œ this๋Š” ํ•ด๋‹น ๊ฐ์ฒด → this.name์€ person.name์„ ์ฐธ์กฐ

 

4. ๊ฐ์ฒด ๋ฐ˜๋ณต

๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ฐ˜๋ณต(iterate)ํ•˜๋ ค๋ฉด for...in ๋ฌธ ์‚ฌ์šฉ

let person = {
  name: "Alice",
  age: 25,
  isStudent: true
};

for (let key in person) {
  console.log(`${key}: ${person[key]}`);
}
// ์ถœ๋ ฅ:
// name: Alice
// age: 25
// isStudent: true

 

5. ๊ฐ์ฒด ๊ด€๋ จ ๋ฉ”์„œ๋“œ

  1. Object.keys()

๊ฐ์ฒด์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

let person = { name: "Alice", age: 25, gender: "female" };
console.log(Object.keys(person)); // ์ถœ๋ ฅ: ["name", "age", "gender"]

 

2. Object.values()

๊ฐ์ฒด์˜ ๋ชจ๋“  ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

console.log(Object.values(person)); // ์ถœ๋ ฅ: ["Alice", 25, "female"]

 

3. Object.entries()

๊ฐ์ฒด์˜ ํ‚ค-๊ฐ’ ์Œ์„ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜

console.log(Object.entries(person));
// ์ถœ๋ ฅ: [["name", "Alice"], ["age", 25], ["gender", "female"]]

 

4. Object.assign()

ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์†์„ฑ์„ ๋ณต์‚ฌ

let additionalInfo = { city: "Seoul", country: "South Korea" };
Object.assign(person, additionalInfo);
console.log(person);
// ์ถœ๋ ฅ: { name: "Alice", age: 25, gender: "female", city: "Seoul", country: "South Korea" }

 

7. ๊ฐ์ฒด ๋ณต์‚ฌ

๊ฐ์ฒด๋Š” ์ฐธ์กฐ ํƒ€์ž… → ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๋ณต์‚ฌ

  • ์–•์€ ๋ณต์‚ฌ (shallow copy):
    • *Object.assign()*์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์–•์€ ๋ณต์‚ฌ
    let obj1 = { a: 1, b: 2 };
    let obj2 = Object.assign({}, obj1);  // ๋˜๋Š” let obj2 = { ...obj1 };
    obj2.a = 3;
    console.log(obj1.a); // ์ถœ๋ ฅ: 1 (์›๋ณธ์€ ๋ณ€ํ•˜์ง€ ์•Š์Œ)
    
    
  • ๊นŠ์€ ๋ณต์‚ฌ (deep copy):
    • ๊นŠ์€ ๋ณต์‚ฌ๋Š” ๊ฐ์ฒด์˜ ์ค‘์ฒฉ๋œ ๊ฐ’๋“ค๊นŒ์ง€ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋‚˜ JSON ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ
    let obj1 = { a: 1, b: { c: 2 } };
    let obj2 = JSON.parse(JSON.stringify(obj1));
    obj2.b.c = 3;
    console.log(obj1.b.c); // ์ถœ๋ ฅ: 2 (๊นŠ์€ ๋ณต์‚ฌ๋กœ ์›๋ณธ์€ ๋ณ€ํ•˜์ง€ ์•Š์Œ)