함수 정의 방식 & 배열/객체

2025. 5. 18. 23:36·Javascript

자바스크립트 함수 정의 방식 & 배열/객체 처리 기초 정리

1. 함수 정의 방법

① 함수 선언문


function add(x, y) {
    return x + y;
}

const result = add(10, 20);
console.log(result);  // 30

② 함수 표현식


let add = function (x, y) { return x + y; };

let sum = add;
console.log(add(10, 20));   // 30
console.log(sum(10, 20));   // 30

③ 기명 함수 표현식


let sum1 = function add1(x, y) { return x + y; };
let sum2 = sum1;

console.log(sum1(10, 20));  // 30
console.log(sum2(10, 20));  // 30
console.log(add1(10, 20));  // ReferenceError

④ 재귀 함수(기명 표현식 내부)


const myFactorial = function factorial(n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
};

console.log(myFactorial(10));

2. 화살표 함수


const add1 = function (x, y) { return x + y; };
const add2 = (x, y) => { return x + y; };
const add3 = (x, y) => x + y;
const add4 = x => x + 4;

const add5 = (x, y) => { return { result: x + y }; };
const add6 = (x, y) => ({ result: x + y });

console.log(add3(10, 20));  // 30

3. 배열 출력 방식


let values = ["빨강", true, 20];

console.log("방법1.");
console.log(values[0], values[1], values[2]);

console.log("방법2.");
for (let i = 0; i < values.length; i++) {
    console.log(values[i]);
}

console.log("방법3.");
for (let idx in values) {
    console.log(values[idx]);
}

console.log("방법4.");
for (let value of values) {
    console.log(value);
}

console.log("방법5-1.");
function printArrayItem(item) {
    console.log(item);
}
values.forEach(printArrayItem);

console.log("방법5-2.");
const printArrayItem2 = function (item) {
    console.log(item);
};
values.forEach(printArrayItem2);

console.log("방법5-3.");
values.forEach(function (item) {
    console.log(item);
});

console.log("방법5-4.");
values.forEach((item) => {
    console.log(item);
});

console.log("방법5-5.");
values.forEach(item => console.log(item));

console.log("방법5-6.");
values.forEach((item, index) => console.log(index, item));

4. 객체의 속성 접근


const person = {
    name: "홍길동",
    age: 23,
    isMarried: false,
    "favorite colors": ["빨강", "파랑"],
    hello: function () {
        return `안녕, 나는 "${this.name}" 입니다.`;
    }
};

for (let key in person) {
    console.log(`${key} => ${person[key]}`);
}

console.log(Object.keys(person));
Object.keys(person).forEach(key => console.log(person[key]));

5. 단축 속성명 (Shorthand Property Names)


let name = "John";
const person1 = {
    name: name,
    getName: function getName() {
        return this.name;
    }
};

const person2 = {
    name,
    getName() {
        return this.name;
    }
};

console.log(person1);
console.log(person2);

사용 예1: 함수에서 객체 반환


function returnObj1(age, name) {
    return { age: age, name: name };
}

function returnObj2(age, name) {
    return { age, name };
}

사용 예2: 로그 출력 시


const email = "hong@test.com";
const address = "서울시 독산동";

console.log("email", email);
console.log("address", address);
console.log(`email: ${email}, address: ${address}`);
console.log({ email, address });

6. 계산된 속성명 (Computed Property Names)


// 속성 이름(key)과 값(value)을 받아 객체 반환
function returnObject1(key, value) {
    return { [key]: value };
}

console.log(returnObject1("name", "John"));  // { name: "John" }
console.log(returnObject1("age", 23));       // { age: 23 }

// 속성 이름이 일련번호 형태를 가지는 객체 반환
function returnObject2(key, value, no) {
    return { [key + no]: value };
}

console.log(returnObject2("name", "John", 1));  // { name1: "John" }
console.log(returnObject2("name", "Jane", 2));  // { name2: "Jane" }

※ 대괄호 [] 안에 변수나 연산식을 사용해 동적으로 키 생성

7. 전개 연산자 (Spread Operator)


// Math.max는 개별 숫자만 받음
console.log(Math.max(3, 21, 1, 98, 7));       // 98
console.log(Math.max([3, 21, 1, 98, 7]));     // NaN

const numbers = [3, 21, 1, 98, 7];
console.log(Math.max(...numbers));           // 98

※ ...를 사용해 배열 요소를 개별 값으로 전달


// 사용 예1: 배열 복사
let a = 10;
let b = a;
a = 20;
console.log(a, b);  // 20 10

let c = [1, 2, 3];
let d = c;
c[1] = 20;
console.log(c, d);  // [1, 20, 3] [1, 20, 3]

let x = [1, 2, 3];
let y = [...x];
x[1] = 20;
console.log(x, y);  // [1, 20, 3] [1, 2, 3]

※ 전개 연산자는 배열 복사 시 참조를 끊고 새로운 배열 생성


// 사용 예2: 객체 복사
let a = { name: '홍길동', age: 23 };
let b = a;
a.age = 230;
console.log(a, b);  // 동일 객체

let c = { name: "홍길동", age: 23 };
let d = {};
for (key in c) {
    d[key] = c[key];
}
c.age = 230;
console.log(c, d);  // d는 영향 없음

let x = { name: "홍길동", age: 23 };
let y = { ...x };
x.age = 230;
console.log(x, y);  // y는 영향 없음

※ 객체 복사에도 전개 연산자를 사용하면 독립된 객체 생성


// 사용 예3: 복사하면서 속성 수정 또는 추가
let a = { name: "홍길동", age: 23 };
let b = { ...a, age: 230, email: "hong@test.com" };
console.log(b);

// 사용 예4: 배열 또는 객체 결합

// 배열 결합
const a = [1, 2, 3, 5];
const b = [5, 7, 8, 9];
const ab = [...a, ...b];
const ba = [...b, ...a];
console.log(ab);
console.log(ba);

// 객체 결합
const x = { name: "홍길동", age: 23 };
const y = { name: "고길동", address: "서울시 도봉구" };

const xy = { ...x, ...y };  // y의 name으로 덮어씀
const yx = { ...y, ...x };  // x의 name으로 덮어씀
console.log(xy);
console.log(yx);

※ 객체 병합 시 동일 키는 나중 값으로 덮어짐

8. 비구조화 할당 (Destructuring)

1) 배열 비구조화


// 배열 구조화
const arr = [1, 2, 3, 4, 5];

let a = arr[0];
let b = arr[1];
console.log(a, b);

// 배열 비구조화
let [c, d, e, f] = arr;
console.log({ c, d, e, f });

// 값 교환 (임시 변수)
let x = 10;
let y = 20;
let temp = x;
x = y;
y = temp;

// 값 교환 (비구조화 사용)
[x, y] = [y, x];

※ 배열 요소를 변수에 간편하게 할당하거나 값 교환 가능


// 변수 개수가 더 많을 경우
const arr = [1, 2];
let [x, y, z] = arr;
console.log({ x, y, z }); // { x: 1, y: 2, z: undefined }

// 기본값 설정
const arr2 = [1, 2];
let [a1, b1 = 20, c1 = 30] = arr2;
console.log({ a1, b1, c1 }); // { a1: 1, b1: 2, c1: 30 }

// 위치 건너뛰기
const arr3 = [1, 2, 3];
const [a, , c] = arr3;
console.log({ a, c }); // { a: 1, c: 3 }

// 나머지 요소를 배열로
const arr4 = [1, 2, 3, 4, 5, 6];
const [first, ...rest] = arr4;
console.log(first); // 1
console.log(rest);  // [2, 3, 4, 5, 6]

※ 쉼표 건너뛰기, 기본값, 나머지 배열 추출 가능

2) 객체 비구조화


const obj1 = { name: "홍길동", age: 23 };
const obj2 = { name: "고길동", age: 43, grade: "A" };

// 일반 할당
const age1 = obj1.age;
const name1 = obj1.name;

// 비구조화 할당
const { age, name } = obj1;

// 없는 키
const { newAge, newName } = obj1;
console.log({ newAge, newName }); // undefined

// 변수 이름 변경
const { age: newAge2, name: newName2 } = obj1;
console.log({ newAge2, newName2 });

// 기본값 설정
const { age: newAge3, email = "default" } = obj1;
console.log({ newAge3, email });

// 나머지 속성 추출
const { age: age2, ...restObj } = obj2;
console.log({ age2, restObj });
// { age2: 43, restObj: { name: '고길동', grade: 'A' } }

// 객체 출력 함수 비교
const person = {
    name: "홍길동",
    age: 23,
    email: "hong@test.com"
};

// 방식 1: 객체를 직접 활용
function print1(obj) {
    console.log(`${obj.name} ${obj.age} ${obj.email}`);
}

// 방식 2: 비구조화로 지역 변수에 저장
function print2(obj) {
    const { name, age, email } = obj;
    console.log(`${name} ${age} ${email}`);
}

// 방식 3: 매개변수에서 직접 비구조화
function print3({ name, age, email }) {
    console.log(`${name} ${age} ${email}`);
}

print1(person);
print2(person);
print3(person);

※ 키 이름 기준으로 추출하며, 별칭 및 기본값, 나머지 속성 추출 가능. 함수에서의 비구조화도 유용하게 사용 가능

'Javascript' 카테고리의 다른 글

Axios  (0) 2025.05.20
Array 메서드 - map(), filter(), reduce()  (0) 2025.05.19
'Javascript' 카테고리의 다른 글
  • Axios
  • Array 메서드 - map(), filter(), reduce()
jaeon.cloud
jaeon.cloud
  • jaeon.cloud
    JEONG JAE ON
    jaeon.cloud
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Docker (8)
      • Cloud (7)
      • AWS (14)
      • Network (9)
      • Linux (1)
      • Python (7)
      • Javascript (3)
      • React (5)
      • Project (3)
      • Kubernetes (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    네트워크
    AWS
    http
    react
    클라우드
    Python
    kubernetes
    cors
    docker
    3-tier Architecture
    lambda
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jaeon.cloud
함수 정의 방식 & 배열/객체
상단으로

티스토리툴바