JavaScript 강의

2-2 (중요)일급 객체로서의 함수

kagan-draca 2024. 8. 13. 12:11

 

일급 객체란 ? 다른 객체에 적용 가능한 연산을 모두 지원하는 객체이다.

 

함수가 일급 객체로 취급되기 때문에, 함수를 매우 유연하게 사용할 수 있다.

 

 

종류

 

1.(중요)변수에 함수를 할당 가능하다.

 

위의 같이 변수에 함수를 할당하면

이렇게 생성 가능하다.

 

사용 이유 :

1. 함수를 마치 값으로 취급 가능하다.

2. 함수가 나중에 사용될 수 있도록 조치가 된다.

 

2. (중요)함수를 다른 함수의 매개변수로 전달

1을 활용하면 함수를 다른 함수의 매개변수로 전달 할 수 있다.

 

callFunction이 sayHello와 sayBye 함수를

호출해 sayHello와 sayBye의 로직이

동작하는 것을 볼 수 있다.

 

함수를 다른 함수의 매개변수로 전달이 가능해서

 

콜백 함수고차함수라는 개념이 생긴다.

 

콜백 함수 : 매개변수로써 쓰이는 함수

(고차함수의 일부)

 

고차함수 : 함수를 인자로 받거나 return 하는 함수

 

(향후 4주차에 추가 학습할 예정)

 

(중요)return 하는 함수를 만들어보면

먼저 addFive = createAdder(5)

createAdder 함수가 호출되고

매개변수 값으로 5가 전달 된다.

그 후 매개변수 num(5)fuction(x)

함수가 addFive 변수에 저장된다.

 

console.log(addFive(10)) 호출에서

addFive에 저장 됐던 매개변수 값

num(5)fuction(x)호출되고

매개변수 x에 10이 저장된다.

 

그 후 return x + num결과가 출력된다.

 

3. (중요)객체의 value에 함수 주기

 

객체에서 key에 따른 value가 함수일 경우

 

key : function()

{

로직

}

 

으로 작성 가능하다.

 

로직 안에서 객체 본인의 key에 따른 value를

사용하고 싶으면, this 연산자를 사용해야한다.

this.key 이름

 

만약, this를 넣지 않을 경우

위와 같은 오류 메시지가 출력 된다.

(this를 생략할 수 없다!!)

 

함수 내부 로직을 템플릿 리터럴로 표현하면

 

`

~~~~

`

가능했다. 그리고 본인 객체의 key에 따른 value에

접근하는 방법으로는 ${this.name}으로 사용 가능했다.

(this. 생략 불가능)

 

그리고 함수를 간략하게 화살표 함수로 표현하면

 

(중요)화살표 함수로 표현

 

 

key : () =>

{
        console.log
        (
            `
            Hello,
            my name
            is ${this.name}`
        )

}

,

key : () => console.log

        (

          `

             ~~~

          `

        )

 

로 표현 가능했다.

 

그런데, 결과로

(중요)

${this.name}을 해준 부분이

"undefined"로 출력 되는걸 볼 수 있다.

 

4. (중요)배열의 요소로 함수 주기

 

사용 방법 : 

 

배열 안에 함수를 만들어 넣는 방식으로 사용 가능하다.

 

함수 호출 방법으로는

 

변수명[함수 해당 index](input 값)

 

으로 배열 안의 함수호출 가능했다.

 

ex)

 

 

문제

어떻게 동작될 것이라 생각 하는가?

 

multiplyByTwo = return function(x)

                           {

                                return x * 2

                           }

 

multiplyByThree = return function(x)

                           {

                                return x * 3

                           }

 

이 있을 것 같다.

 

으로 함수가 들어가 있다는 사실은 알 수 있는 상황이다.

(함수의 재사용(Refactoring))

 

이제

 

multiplayByTwo(2)

multiplayByTwo(3)

 

을 주면

 

multiplyByTwo = return function(2)

                           {

                                return 2 * 2

                           }

 

multiplyByThree = return function(3)

                           {

                                return 3 * 3

                           }

 

과정을 거쳐서 

 

multiplyByTwo = 4

multiplyByThree  = 9

 

가 변수에 저장될 것이다.

 

만약 여기에서 약간 변화를 준

result에 어떤 과정과 결과가 나오는지 풀어보아라.

 

위의 동작 방식처럼

 

multiplayByTwo(2) = 4

multiplayByThree(3) = 9

 

을 가지게 될 것이고,

 

function add(4, 9)

{

    return 4 + 9

}

 

add 함수에 의해

4와 9가 더해진

13이 반환될 것이다.

 

const result = 13