React 컴포넌트: 클래스 대 함수형 컴포넌트 설명.

작성일 :

React 컴포넌트: 클래스 대 함수형 컴포넌트 설명

React는 사용자 인터페이스를 구축하기 위한 라이브러리로서, 컴포넌트를 사용하여 UI를 구성합니다. 컴포넌트에는 두 가지 주요 유형이 있습니다: 클래스 컴포넌트와 함수형 컴포넌트입니다. 이 글에서는 두 컴포넌트 유형의 차이점, 장단점, 그리고 실제 사용 사례에 대해 자세히 설명합니다.

클래스 컴포넌트

클래스 컴포넌트는 ES6 클래스 문법을 사용하여 정의됩니다. 이들은 상태를 보유하고, 생명 주기 메서드를 활용할 수 있으며, stateful 컴포넌트로 불리기도 합니다.

특징

  • 상태 관리: 클래스 컴포넌트는 state 객체를 통해 상태를 관리합니다. 상태는 this.state로 접근하며, 상태를 업데이트하려면 this.setState() 메서드를 사용합니다.
  • 생명 주기 메서드: 클래스 컴포넌트는 생명 주기 메서드를 통해 컴포넌트의 특정 시점에 동작을 취할 수 있습니다. 예를 들어 componentDidMount(), componentDidUpdate(), componentWillUnmount() 등이 있습니다.
  • this 키워드: 클래스 컴포넌트에서는 this 키워드를 다루는 것이 중요합니다. 메서드를 호출할 때 this를 정확히 바인딩 하는 것이 필수적입니다.

예제

javascript
import React, { Component } from 'react';

class MyClassComponent extends Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  componentDidMount() {
    console.log('Component mounted');
  }

  componentDidUpdate() {
    console.log('Component updated');
  }

  componentWillUnmount() {
    console.log('Component will unmount');
  }

  increment = () => {
    this.setState({ count: this.state.count + 1 });
  };

  render() {
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <button onClick={this.increment}>Increment</button>
      </div>
    );
  }
}

export default MyClassComponent;

함수형 컴포넌트

함수형 컴포넌트는 단순히 함수를 사용하여 정의됩니다. 초기에는 상태와 생명 주기 메서드를 지원하지 않았으나, React 16.8에서 Hooks가 도입되면서 이 제약이 해소되었습니다.

특징

  • 간단한 정의: 함수형 컴포넌트는 함수로 정의되며, state와 생명 주기 메서드를 직접적으로 사용하지 않습니다. Hooks를 활용하여 상태 관리와 생명 주기 메서드를 사용할 수 있습니다.
  • Hooks 사용: useState, useEffect와 같은 Hooks를 사용하여 상태와 생명 주기를 관리할 수 있습니다. 이러한 기능은 함수형 컴포넌트를 더 강력하게 만듭니다.
  • this 키워드 없음: 함수형 컴포넌트에서는 this 키워드를 사용하지 않습니다. 이로 인해 코드를 작성하고 유지보수하는 것이 더 쉬워집니다.

예제

javascript
import React, { useState, useEffect } from 'react';

const MyFunctionalComponent = () => {
  const [count, setCount] = useState(0);

  useEffect(() => {
    console.log('Component mounted');
    return () => {
      console.log('Component will unmount');
    };
  }, []);

  useEffect(() => {
    console.log('Component updated');
  }, [count]);

  const increment = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increment}>Increment</button>
    </div>
  );
};

export default MyFunctionalComponent;

클래스 컴포넌트 vs 함수형 컴포넌트 비교

  • 문법의 간결성: 함수형 컴포넌트는 클래스 컴포넌트보다 문법이 간결하고 읽기 쉽습니다. 클래스 컴포넌트는 constructor, 생명 주기 메서드, this 바인딩 등을 추가로 작성해야 합니다.
  • 성능: 초기에는 클래스 컴포넌트가 성능 상의 이점을 가질 수 있었으나, React의 최신 버전에서는 함수형 컴포넌트와 Hooks를 사용하는 것이 성능 면에서도 유의미합니다.
  • 유지보수: 함수형 컴포넌트는 코드가 간결하여 유지보수가 용이합니다. 에러가 발생할 가능성도 더 낮습니다.
  • Hooks: Hooks의 도입으로 함수형 컴포넌트에서도 상태 관리와 생명 주기를 사용할 수 있게 되어, 함수형 컴포넌트의 선호도가 높아지고 있습니다.

결론

React 컴포넌트를 사용할 때, 클래스 컴포넌트와 함수형 컴포넌트 각각의 특성과 장단점을 이해하는 것이 중요합니다. 일반적으로 함수형 컴포넌트가 더 간단하고 유지보수하기 쉽기 때문에, 많이 사용되고 있습니다. 그러나 특정 상황에서는 클래스 컴포넌트가 더욱 적합할 수 있으므로, 두 접근 방식을 모두 숙지하는 것이 필요합니다.