React.js 를 배워보자/2. React.js 기본 개념

React 함수형 컴포넌트와 클래스형 컴포넌트

_Blue_Sky_ 2024. 10. 1. 18:43
728x90
728x90

React 함수형 컴포넌트와 클래스형 컴포넌트: 심층 비교 및 최신 트렌드

React 개발을 시작하거나, 기존 프로젝트를 리팩토링하려는 개발자라면 함수형 컴포넌트와 클래스형 컴포넌트라는 용어를 자주 접하게 됩니다. 두 가지 형태의 컴포넌트는 각각 고유한 특징과 장단점을 가지고 있으며, 어떤 컴포넌트를 선택해야 할지 고민하는 경우가 많습니다. 이 글에서는 React 컴포넌트의 두 가지 유형에 대한 심층적인 비교를 통해 각 컴포넌트의 특징, 장단점, 그리고 최신 트렌드에 대해 자세히 알아보겠습니다.

1. 함수형 컴포넌트 (Functional Component)

함수형 컴포넌트는 간단히 말해 JavaScript 함수입니다. props를 인자로 받아 JSX를 반환하는 순수 함수 형태로, 클래스 기반의 복잡성 없이 간결하게 UI를 구성할 수 있습니다.

  • 특징:
    • 함수 선언 방식으로 간단하고 직관적
    • 상태 관리에 Hook 사용 (useState, useEffect 등)
    • 라이프사이클 메서드 대신 Hook 활용
    • 순수 함수적 특성으로 테스트하기 용이
  • 장점:
    • 간결하고 가독성이 좋음
    • 더 적은 코드로 동일한 기능 구현 가능
    • Hook을 통해 유연하고 재사용 가능한 로직 구현 가능
    • 메모리 효율성이 좋음
  • 단점:
    • 복잡한 로직의 경우 Hook 조합이 어려울 수 있음
    • 클래스형 컴포넌트에 비해 생소한 개념이 많을 수 있음
728x90

2. 클래스형 컴포넌트 (Class Component)

클래스형 컴포넌트는 React.Component를 상속받아 생성하는 객체 지향적인 방식의 컴포넌트입니다.

  • 특징:
    • 클래스 기반으로 상태 관리 (this.state)
    • 라이프사이클 메서드 (componentDidMount, componentWillUnmount 등)
    • 메서드 바인딩 필요
  • 장점:
    • 복잡한 로직 구현에 유리
    • 라이프사이클 메서드를 통해 다양한 이벤트 처리 가능
  • 단점:
    • 코드가 길어지고 복잡해질 수 있음
    • this 바인딩 문제 발생 가능성
    • Hook에 비해 유연성이 떨어짐

3. 함수형 컴포넌트와 클래스형 컴포넌트 비교


선언 방식 함수 클래스
상태 관리 useState Hook this.state
라이프사이클 useEffect Hook componentDidMount, componentWillUnmount 등
메서드 화살표 함수 일반 함수
가독성 높음 낮음
유연성 높음 낮음
테스트 용이성 높음 낮음
 

4. 최신 트렌드와 선택 기준

React 팀은 함수형 컴포넌트와 Hook을 적극적으로 권장하고 있으며, 실제로 많은 개발자들이 함수형 컴포넌트를 선호하는 추세입니다.

  • 함수형 컴포넌트를 선택해야 하는 경우:
    • 간결하고 가독성 좋은 코드를 원할 때
    • 상태 관리와 부수 효과를 Hook으로 효율적으로 관리하고 싶을 때
    • 테스트하기 쉽고 유지보수가 용이한 코드를 작성하고 싶을 때
  • 클래스형 컴포넌트를 선택해야 하는 경우:
    • 복잡한 로직을 구현해야 할 때
    • 기존 클래스형 컴포넌트를 유지보수해야 할 때

5. 결론

함수형 컴포넌트와 클래스형 컴포넌트는 각각 장단점이 있으므로, 개발 상황에 맞게 적절한 컴포넌트를 선택하는 것이 중요합니다. 일반적으로 새로운 프로젝트를 시작하거나 간단한 컴포넌트를 개발하는 경우에는 함수형 컴포넌트를, 복잡한 로직을 구현하거나 기존 클래스형 컴포넌트를 유지보수해야 하는 경우에는 클래스형 컴포넌트를 선택하는 것이 좋습니다.

 

728x90
728x90

'React.js 를 배워보자 > 2. React.js 기본 개념' 카테고리의 다른 글

이벤트 처리  (2) 2024.10.01
렌더링  (0) 2024.10.01
JSX (JavaScript XML)  (0) 2024.10.01
라이프 사이클 메서드  (0) 2024.10.01
props와 state  (0) 2024.10.01