모던 리액트 Deep Dive - 함수

2025. 9. 15. 21:54·Study/모던 리액트 Deep Dive

⚡리액트 개발을 위해 꼭 알아야할 자바스크립트 - 1.2 함수

함수의 다양한 형태와 이러한 함수의 차이점이 무엇인지 살펴보자!

1.2.1 함수란 무엇인가?

🌚자바스크립트에서 함수란?

  • 작업을 수행하거나 값을 계산하는 동의 과정을 표현하고, 하나의 블록으로 감싸서 실행 단위로 만들어 놓은 것

💡리액트에서 컴포넌트를 만드는 함수 형태

function Component(props){
	return <div>{props.hello}</div>
}

1.2.2 함수를 정의하는 4가지 방법

1. 함수 선언문

  • 표현식이 아닌 일반 문(statement)으로 분류됨
    • 표현식: 무언가 값을 산출하는 구문. 즉, 함수 선언으로는 어떠한 값도 표현되지 않았으므로 표현식이 아닌 일반 문으로 분류

2. 함수 표현식

  • 함수는 다른 함수의 매개변수가 될 수도 있고, 반환값이 될수도 있으며, 할당도 가능하므로 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체
  • 함수를 변수에 할당하는것도 가능
const sum = function add(a, b) {
  // 함수 몸통에서 현재 실행 중인 함수를 참조하는 데 사용할 수 있음
  // 실제 프로덕션 코드에서 절대로 사용해선 안 됨!
  console.log(arguments.callee.name)
  return a + b
}

sum(10, 24)
// add
add(10, 24) // Uncaught TypeError: add is not defined

💡함수 표현식과 선언식의 차이

  • 함수 표현식과 선언식의 차이점 → 호이스팅 여부
    • 호이스팅 : 함수 선언문이 마치 코드 맨 앞단에 작성된 것처럼 작동하는 자바스크립트의 특징 
hello() // hello

function hello() {
  console.log('hello')
}

hello() // hello
  • 함수를 선언한 hello는 코드 중간에 있음에도 불구하고, 맨 앞에서 호출한 hello()는 어떠한 에러도 없이, 정상적인 hello 함수의 작동을 수행하는 것을 알 수 있다.
  • 함수의 호이스팅 특징으로 함수 선언문이 미리 메모리에 등록됐고, 코드의 순서에 상관없이 정상적으로 함수 호출 가능
console.log(typeof hello === 'undefined') // true

hello() // Uncaught TypeError: hello is not a function

var hello = function () {
  console.log('hello')
}

hello()
  • 함수 선언문과 다르게 정상적으로 호출되지 않고, undefined로 남아있다.
  • 함수와 다르게 변수는 런타임 이전에 undefined로 초기화되고, 할당문이 실행되는 시점, 즉 런타임 시점에 함수가 할당되어 작동한다는 것을 알 수 있다.

3. Function 생성자

  • 자바스크립트 오래 사용했다 하더라도 거의 사용해 본 적 없을 만한 함수 선언 방식
const add = new Function('a', 'b', 'return a + b')

add(10, 24) // 34

4. 화살표 함수

  • ES6에서 새롭게 추가된 함수 생성 방식
  • function이라는 키워드 대신 =>라는 화살표 활용
  • constructor을 사용할 수 없다 즉, 생성자 함수로 화살표 함수를 사용하는 것은 불가능하다.
  •  arguments가 존재하지 않는다.
const add = (a, b) => {
  return a + b
}

const add = (a, b) => a + b

💡화살표 함수와 일반 함수의 가장 큰 차이점→ this 바인딩

  • 클래스형 컴포넌트에서 이벤트에 바인딩할 메서드 선언 시 화살표 함수로 했을 때와 일반 함수로 했을 때 다르게 작동함
  • this :  자신이 속한 객체나 자신이 생성할 인스턴스를 가리키는 값

1.2.3 다양한 함수 살펴보기

리액트에서 자주 쓰이는 형태에 대해 알아보자!

1. 즉시 실행 함수 (Immediately Invoked Function Expression, IIFE)

  • 함수를 정의하고 그 순간 즉시 실행되는 함수
  • 단 한번만 호출되고, 다시 호출할수 없는 함수(재사용되지 않는 함수)
(function (a, b) {
  return a + b
})(10, 24); // 34

((a, b) => {
  return a + b
  },
)(10, 24) // 34

2. 고차함수 (Higher Order Function)

  • 함수형 컴포넌트를 인수로 받아 새로운 함수형 컴포넌트를 반환하는 함수
// 함수를 매개변수로 받는 대표적인 고차 함수, Array.prototype.map
const doubleArray = [1, 2, 3].map((item) => item * 2)

doubleArray // [2, 4, 6]

// 함수를 반환하는 고차 함수의 예
const add = function (a) {
  // a가 존재하는 클로저를 생성
  return function (b) {
    // b를 인수로 받아 두 합을 반환하는 또 다른 함수를 생성
    return a + b
  }
}

add(1)(3) // 4

1.2.4 함수를 만들때 주의해야 할 사항

1. 함수의 부수 효과(side-effect)를 최대한 억제하라

  • 함수 내의 작동으로 함수가 아닌 함수 외부에 영향을 끼치는 것을 최소화하고, 함수의 실행과 결과를 최대한 예측 가능하도록 설계해야 한다.

2. 가능한 한 함수를 작게 만들어라

  • 하나의 함수에서 너무 많은 일을 하지 않게 한다.
  • 구체적인 함수의 길이,크기를 정의하는 것은 불필요하지만, 가능한 함수의 크기를 작게 하는 것이 좋다.

3. 누구나 이해할 수 있는 이름을 붙여라

  • 함수이름은 간결하고 이해하기 쉽게 붙이는 것이 좋다.

 

'Study > 모던 리액트 Deep Dive' 카테고리의 다른 글

모던 리액트 Deep Dive - 이벤트 루프와 비동기 통신의 이해  (0) 2025.09.23
모던 리액트 Deep Dive - 클로저  (1) 2025.09.15
모던 리액트 Deep Dive - 클래스  (0) 2025.09.15
모던 리액트 Deep Dive - 자바스크립트의 동등 비교  (0) 2025.09.15
모던 리액트 Deep Dive - 들어가기 전  (0) 2025.09.15
'Study/모던 리액트 Deep Dive' 카테고리의 다른 글
  • 모던 리액트 Deep Dive - 클로저
  • 모던 리액트 Deep Dive - 클래스
  • 모던 리액트 Deep Dive - 자바스크립트의 동등 비교
  • 모던 리액트 Deep Dive - 들어가기 전
happy_dev
happy_dev
복사하고 붙여넣기 잘하고 싶어요
  • happy_dev
    happy의 개발일지
    happy_dev
  • 전체
    오늘
    어제
    • 전체 (43)
      • Java (0)
      • React (1)
      • DB (1)
      • Study (41)
        • 친절한 SQL 튜닝 (9)
        • 모던 리액트 Deep Dive (18)
        • 젠킨스로 배우는 CI,CD 파이프라인 구축 (14)
        • Studyd (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    SQL
    인덱스의기본
    젠킨스
    DB
    조인
    toad
    Jenkins
    oracle
    리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
happy_dev
모던 리액트 Deep Dive - 함수
상단으로

티스토리툴바