[React] 리액트 컴포넌트(Component)란?

이룸·2026년 3월 29일

위클리페이퍼

목록 보기
11/15

1. 컴포넌트(Component)란?

컴포넌트는 UI를 구성하는 독립적이고 재사용 가능한 블록이다. 웹 페이지를 만들 때 헤더, 사이드바, 본문, 버튼 등을 각각 하나의 '블록'처럼 만들고, 이 블록들을 조립하여 전체 화면을 완성하는 방식이다.

  • 재사용성: 한 번 만들어둔 컴포넌트는 다른 페이지나 프로젝트에서 쉽게 가져다 쓸 수 있다.
  • 유지보수성: UI를 독립적인 단위로 나누기 때문에, 특정 부분에 에러가 발생하면 해당 컴포넌트만 수정하면 된다.
  • 독립성: 각 컴포넌트는 각자의 상태(State)와 속성(Props)을 가지며 독립적으로 동작한다.

React에서 컴포넌트를 선언하는 방식에는 크게 클래스형(Class)함수형(Functional) 두 가지가 있다.


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

과거 React에서 상태(State) 관리와 라이프사이클(Lifecycle) 기능을 사용하기 위해 필수적으로 사용했던 방식이다.

주요 특징

  • class 키워드를 사용하며, React.Component를 상속(extends) 받아야 한다.
  • UI를 렌더링하기 위해 반드시 render() 메서드가 필요하다.
  • 상태 관리(this.state)와 라이프사이클 메서드(componentDidMount, componentDidUpdate 등)를 사용할 수 있다.

코드 예시

import React, { Component } from 'react';

class Counter extends Component {
  constructor(props) {
    super(props);
    // State 초기화
    this.state = {
      count: 0
    };
  }

  render() {
    return (
      <div>
        <h1>카운트: {this.state.count}</h1>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          증가
        </button>
      </div>
    );
  }
}

export default Counter;

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

현재 React 개발의 표준이자 대세로 자리 잡은 방식이다.

주요 특징

  • 일반 함수나 화살표 함수(=>) 문법을 사용하여 선언한다.
  • 클래스형보다 선언이 훨씬 간결하고 메모리 자원도 덜 사용한다.
  • 과거에는 상태 관리나 라이프사이클을 다룰 수 없었으나, React 16.8에서 Hooks(훅)이 도입되면서 클래스형의 모든 기능을 대체할 수 있게 되었다.

코드 예시 (Hooks 사용)

import React, { useState } from 'react';

const Counter = () => {
  // useState Hook을 통한 상태 관리
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>카운트: {count}</h1>
      <button onClick={() => setCount(count + 1)}>
        증가
      </button>
    </div>
  );
};

export default Counter;

4. 간단 요약 정리

구분클래스형 컴포넌트 (Class)함수형 컴포넌트 (Functional)
선언 방식class 키워드, React.Component 상속 필요일반 함수 또는 화살표 함수 사용
렌더링render() 메서드 필수return 문으로 바로 JSX 반환
상태(State) 관리this.statethis.setState 사용useState Hook 사용
라이프사이클componentDidMount 등의 라이프사이클 메서드useEffect Hook 하나로 통합 관리
코드 길이 / 가독성길고 복잡함 (this 바인딩 등 주의 필요)짧고 간결함, 로직 파악이 쉬움
profile
내 꿈은 풀스택 개발자

0개의 댓글