2023-01-19

객체와 함수

자바스크립트 필수 개념인 객체와 함수에 대해 자세히 알아보자!

객체

객체는 key, value로 구성되어 있는 프로퍼티의 집합이다.
자바스크립트는 객체 기반 언어이며 원시 값을 제외한 모든 값들이 객체다.

속성(property)

객체의 속성 즉, key는 문자열 또는 symbol 타입으로 구성할 수 있고, value는 모든 자료형을 할당할 수 있다.
넘버 타입이 키로 저장될 때 내부적으로 toString()을 호출해 문자열로 변환한다.
백준에서 알고리즘 문제를 풀다 보면 넘버 타입을 키로 저장하게 될 때, 수행 시간이 다소 증가하는 것을 볼 수 있다.
객체에 값이 함수일 경우 일반 함수와 비교하기 위해 메소드라고 부른다.

속성 정렬

객체는 속성에 순서를 보장하지 않는다.
단, 정수 프로퍼티(integer property)는 자동으로 정렬되고, 문자열은 추가된 순서로 정렬된다.

const user = {}
user[3] = 3
user[1] = 1
user[2] = 2
console.log(user)
// {
// 1: 1,
// 2: 2,
// 3: 3
//}

정수 프로퍼티란 변형 없이 정수와 문자열을 왔다 갔다 할 수 있는 것을 말한다. 예로 “30” → 30, 30 → “30”

프로퍼티 접근

객체의 프로퍼티 접근은 크게 두 가지 대괄호, 점 표기법이 있다.
점 표기법은 프로퍼티 key에 공백이 있다면 참조할 수 없고, 대괄호를 사용해 접근할 수 있다.

const user = {"hello lol": true};
console.log(user.hello lol) // error
console.log(user["hello lol"]) // good

객체 생성 방법

let user = {} // '객체 리터럴' 문법
const person = new Object()
function Person(name, age, email) {
this.name = name
this.age = age
this.email = email
}

let person = new Person('John', 30, 'john@example.com')

객체의 종류

함수

작업 수행 문들이 코드 블록에 감싸 하나의 실행 단위로 정의한 것이다.
함수를 사용하는 이유는 코드의 재사용과 가독성 이점에 있다.
함수는 일급 객체지만 일반 객체와 다르게 호출이 가능하다.

일급 객체

일급 객체의 조건은 아래와 같다.

// 함수는 리터럴 생성이 가능하다.
const increase = function (num) {
return ++num
}

// 함수는 자료구조에 저장할 수 있다.
const object = { increase }

// 함수의 매개변수에 전달 할 수 있다.
increaser(increase)

// 함수의 반환 값으로 사용할 수 있다.
const increaser = (fn) => {
return fn
}

함수 생성 방법

const myFn = () => {} // 익명 arrow function
const myFn = function () {} // 익명 함수(anonymous function)
function myFn() {}
new Function(arg1, arg2, ...argN, functionBody)
var square = new Function('number', 'return number * number')
console.log(square(10)) // 100

매개변수(parameter)와 인수(argument)

매개변수는 함수 내에서 변수와 동일하게 메모리 공간을 확보하며, 함수에 전달한 인수는 매개변수에 할당된다.
만약 인수를 전달하지 않으면 매개변수는 undefined로 초기화된다.

function printName(name) {
// 매개변수
console.log(name)
}

printName('guk') // 인수

콜백 함수(call back function)

함수의 매개변수로 전달되어 내부에서 실행되는 함수를 말한다.
매개변수로 전달 받은 함수는 고차함수, 내부에서 호출되는 함수가 콜백 함수다.
아래 예제로 설명하면 filter는 고차함수, 내부에서 수행되는 화살표 함수는 콜백 함수다.

const arr = [].filter((i) => i === name)

화살표 함수와 일반 함수 차이

화살표 함수는 일반 함수와는 아래와 같은 차이가 있다.

순수 함수와 비순수 함수

const increase = (n) => {
return n + 1
}
let n = 0
const increase = () => {
return ++n
}

참조

모던 자바스크립트 Deep Dive - 위키북스