React 컴포넌트: 클래스 대 함수형 컴포넌트 설명.
작성일 :
React 컴포넌트: 클래스 대 함수형 컴포넌트 설명
React는 사용자 인터페이스를 구축하기 위한 라이브러리로서, 컴포넌트를 사용하여 UI를 구성합니다. 컴포넌트에는 두 가지 주요 유형이 있습니다: 클래스 컴포넌트와 함수형 컴포넌트입니다. 이 글에서는 두 컴포넌트 유형의 차이점, 장단점, 그리고 실제 사용 사례에 대해 자세히 설명합니다.
클래스 컴포넌트
클래스 컴포넌트는 ES6 클래스 문법을 사용하여 정의됩니다. 이들은 상태를 보유하고, 생명 주기 메서드를 활용할 수 있으며, stateful 컴포넌트로 불리기도 합니다.
특징
- 상태 관리: 클래스 컴포넌트는
state
객체를 통해 상태를 관리합니다. 상태는this.state
로 접근하며, 상태를 업데이트하려면this.setState()
메서드를 사용합니다. - 생명 주기 메서드: 클래스 컴포넌트는 생명 주기 메서드를 통해 컴포넌트의 특정 시점에 동작을 취할 수 있습니다. 예를 들어
componentDidMount()
,componentDidUpdate()
,componentWillUnmount()
등이 있습니다. this
키워드: 클래스 컴포넌트에서는this
키워드를 다루는 것이 중요합니다. 메서드를 호출할 때this
를 정확히 바인딩 하는 것이 필수적입니다.
예제
javascriptimport 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
키워드를 사용하지 않습니다. 이로 인해 코드를 작성하고 유지보수하는 것이 더 쉬워집니다.
예제
javascriptimport 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 컴포넌트를 사용할 때, 클래스 컴포넌트와 함수형 컴포넌트 각각의 특성과 장단점을 이해하는 것이 중요합니다. 일반적으로 함수형 컴포넌트가 더 간단하고 유지보수하기 쉽기 때문에, 많이 사용되고 있습니다. 그러나 특정 상황에서는 클래스 컴포넌트가 더욱 적합할 수 있으므로, 두 접근 방식을 모두 숙지하는 것이 필요합니다.