7. 함수, 프로그래밍의 시작

연우·2023년 1월 7일
0

드림코딩

목록 보기
4/15
post-thumbnail

함수란?

  • 특정한 일을 수행하는 코드의 집합
  • 재사용 가능, 높은 가독성, 유지보수성 좋음
  • function 함수이름(매개변수, 인자){결과값 반환;}
    function add(a,b){return a+b;}
// 사용예제 
function sum(a, b) { // 함수 정의
  console.log('function');
  return a + b;
}
const result = sum(1, 2); // 함수 호출

함수와 메모리

  • 함수 이름 자체는 함수를 가르키고 있는 변수와 동일
  • 함수의 이름을 어딘가에 할당하는 것은 메모리주소를 복사해서 할당하는 것과 동일
function add(a, b) {
  return a + b;
}
const sum = add; // add가 가르키고 있는 메모리 주소를 가지게 됨

console.log(sum(1, 2)); // 3
console.log(add(1, 2)); // 3

return이란?

  • 함수를 호출 했을 때 특정한 값을 반환(return)하기 위해 사용
  • return을 명시적으로 하지 않으면 자동으로 undefined이 반환됨
    return = undefined
  • return을 함수 중간에 하게 되면 함수가 종료됨
    사용예: 조건이 맞지 않는 경우 함수 도입부분에서 함수를 일찍이 종료함!
function print(num) {
  if (num < 0) {
    return; // 즉시종료
  }
  console.log(num);
}
print(12);
print(-12);

함수의 인자

함수 파라미터(=매개변수)

  • 매개변수의 기본값은 무조건 undefined
  • 매개변수의 정보는 함수 내부에서 접근이 가능한 arguments 객체에 저장됨
  • 매개변수 기본값 Default Parameter 정할 수 있음
function add(a = 1, b = 1) { // 매개변수 기본값 a = 1, b = `
  console.log(a); // 1
  console.log(b); // 2
  console.log(arguments); //[Arguments] { '0': 1, '1': 2, '2': 3 }
  console.log(arguments[1]); // 2
  return a + b;
}
add(1, 2, 3);

나머지 매개변수(Rest Parametres)

  • 몇개의 인자가 전달 될 지 모를 때
  • 모든 것들을 배열로 받고 싶을 때
function sum(a, b, ...numbers) {
  console.log(a); // 1
  console.log(b); // 2
  console.log(numbers); //[3 , 4, 5, 6, 7, 8]
}
sum(1, 2, 3, 4, 5, 6, 7, 8);

함수 표현식

  • 함수 선언문 function name() { }
  • 함수 표현식 const name = function () { }
let add = function (a, b) {
  return a + b;
};
console.log(add(1, 2));

// 화살표 함수 const name = () => { }
add = (a, b) => a + b;

console.log(add(1, 2));

// 생성자 함수 
const object = new Function(); // 뒤 객체편에서 다룸

콜백 함수

일급함수 (first-class fucntion)

  • 함수가 일반 객체처럼 모든 연산이 가능한것
  • 함수의 매개변수로 전달
  • 함수의 반환값
  • 할당 명령문
  • 동일 비교 대상

고차함수(Higher-oder fucntion)

  • 인자로 함수를 받거나(콜백함수)
  • 함수를 반환하는 함수를 고차함수

콜백함수

  • 함수의 외부로부터 레퍼런스만 전달 받아서 호출
const add = (a, b) => a + b;
const multiply = (a, b) => a * b;

// 전달된 action은 콜백함수이다.
// 전달될 당시에 함수를 바로 호출해서 반환된 값을 전달하는 것이 아니라
// 함수를 가리키고 있는 함수의 레퍼런스(참조값)가 전달된다.
// 그래서 함수는 고차함수(calculator)안에서 필요한 순간에 호출이 나중에 됨
function calculator(a, b, action) { //
  if (a < 0 || b < 0) {
    return;
  }
  let result = action(a, b);
  console.log(result);
  return result;
}

calculator(1, 1, add);
calculator(1, 2, multiply);

코딩할때 중요한 컨셉✨

불변성(Immutability)

  • 함수내부에서 외부로부터 주어진 인자의 값을 변경하는 것은 💩
  • 상태변경이 필요한 경우에는, 새로운 상태를(오브젝트, 값) 만들어서 반환해야 함 ✨
  • 원시값 - 값에 의한 복사
  • 객체값 - 참조에 의한 복사 (메모리주소)
function display(num) {
  num = 5; // ❌
  console.log(num);
}
const value = 4;
display(value);
console.log(value);

function displayObj(obj) {
  obj.name = 'Bob'; // ❌❌❌❌❌❌ 외부로 부터 주어진 인자(오브젝트)를 내부에서 변경 ❌
  console.log(obj);
}
const ellie = { name: 'Ellie' };
displayObj(ellie);
console.log(ellie);

function changeName(obj) {
  return { ...obj, name: 'Bob' };
}

0개의 댓글