[JavaScript] 함수 활용


1. 함수 기본형


{
  function greeting(){
    return "굿모닝"
  }

  function printmessage(anfunction){
    console.log(anfunction());
  }

  printmessage(greeting);
}

=> 결과값

[Running] node "/workspaces/codespaces-blank/index.js"
굿모닝

[Done] exited with code=0 in 0.048 seconds
{
  function greeting(){
    return function(){
      return "굿모닝";
    }
  }

  let anFunction = greeting();
  let message = anFunction();

  console.log(message);
}

=>결과값

[Running] node "/workspaces/codespaces-blank/index.js"
굿모닝

[Done] exited with code=0 in 0.183 seconds

2. 고차함수 활용

함수를 매개변수로 받거나 함수를 반환하는 함수

{
  let numbers = [1,2,3,4];
  return console.log(numbers.map(number=>number*10));
}

=>결과값
[Running] node "/workspaces/codespaces-blank/index.js"
[ 10, 20, 30, 40 ]

[Done] exited with code=0 in 0.048 seconds

//Map함수도 number라는 매개변수값을 사용하므로 고차함수

3. 함수구성의 활용 (1)

{
  let username = "   abel  ";

  const trim = name => name.trim(); // username에 공백제거
  const generateMessage = name => `Hello ${name} 굿모닝` //매개변수로 출력

  const convertToUpper = name=> name.toUpperCase(); // 대문자로 변환

  const result = generateMessage(convertToUpper(trim(username)));
  console.log(result);
}

=> 결과값

[Running] node "/workspaces/codespaces-blank/index.js"
Hello ABEL 굿모닝

[Done] exited with code=0 in 0.045 seconds

////단점은 함수가 여러개 존재할 시 복잡한 부모구조를 갖게됨

------------------- 해결방법 -------------------

import compose from 'lodash/fp/compose.js';
import pipe from 'lodash/fp/pipe.js';

{
  let username = "   abel  ";

  const trim = name => name.trim(); // username에 공백제거
  const generateMessage = name => `Hello ${name} 굿모닝` //매개변수로 출력
  const convertToUpper = name=> name.toUpperCase(); // 대문자로 변환

  const newFunc = pipe(trim,convertToUpper,generateMessage);

  //lodash로 왼쪽에서 함수 실행 시 compose , 오른쪽에서 함수 실행 시 pipe
  const result = newFunc(username);
  console.log(result);
}

//lodash를 이용하여 부모구조를 묶음


4. 함수구성의 활용 (2)

커링함수 활용하기

f(a, b, c)처럼 단일 호출로 처리하는 함수를 f(a)(b)(c)와 같이 각각의 인수가 호출 가능한 프로세스로 호출된 후 병합되도록 변환하는 것

커링은 함수를 호출하지 않음. 단지 변환할 뿐.

import compose from 'lodash/fp/compose.js';
import pipe from 'lodash/fp/pipe.js';

{
  let username = "   abel  ";
  let message = "hello"+username.trim()+"굿모닝";

  const trim = (name) => name.trim();
  const generateMessage = message => name => `Hello ${name} ${message}`

  /* generateMessage에 첫번째 매개변수 message로 "굿모닝"을 전달 후 name을 인수로 사용하는 함수를 반환함  */
  const convertToUpper = (name)=> name.toUpperCase();

  const newFunc = pipe(trim,convertToUpper,generateMessage("굿모닝"));


  const result = newFunc(username);
  console.log(result);
}

=> 결과값

[Done] exited with code=1 in 0.113 seconds

[Running] node "/workspaces/codespaces-blank/index.js"
Hello ABEL 굿모닝

[Done] exited with code=0 in 0.257 seconds