본문 바로가기
React

React의 주요 특징

by 굿센스굿 2024. 12. 9.
반응형

 

React는 페이스북에서 개발하고 유지 관리하는 JavaScript 라이브러리로, 웹 애플리케이션의 사용자 인터페이스(UI)를 구축하는 데 널리 사용됩니다. 그 주요 특징은 웹 애플리케이션의 성능을 향상시키고 개발의 효율성을 극대화하는 데 초점을 맞추고 있습니다. 이 글에서는 React의 주요 특징을 자세히 살펴보겠습니다.

1. 컴포넌트 기반 아키텍처

React의 가장 큰 특징 중 하나는 컴포넌트 기반 아키텍처입니다. React 애플리케이션은 다양한 컴포넌트로 구성됩니다. 각 컴포넌트는 독립적으로 UI를 구성하며, 다른 컴포넌트와 결합되어 최종 사용자 인터페이스를 형성합니다.

  • 컴포넌트 재사용성: React에서는 각 UI 요소를 독립적인 컴포넌트로 작성하고, 이를 재사용할 수 있습니다. 예를 들어, 버튼, 입력 필드, 카드 등과 같은 UI 요소들을 하나의 컴포넌트로 만들고 이를 여러 곳에서 재사용할 수 있습니다.
  • 상태와 props: 컴포넌트는 자신의 상태(state)와 부모로부터 전달받은 props를 통해 동작합니다. 상태는 컴포넌트 내에서 변경할 수 있는 데이터이며, props는 부모 컴포넌트가 자식 컴포넌트에 전달하는 데이터입니다.

예시:

// 버튼 컴포넌트
function Button(props) {
  return <button>{props.label}</button>;
}

// 상위 컴포넌트
function App() {
  return <Button label="클릭하세요" />;
}

이 예시에서 Button 컴포넌트는 label이라는 prop을 받아 버튼을 렌더링하며, App 컴포넌트는 Button 컴포넌트를 호출하면서 해당 prop을 전달합니다.

2. Virtual DOM

React는 Virtual DOM을 사용하여 웹 애플리케이션의 성능을 최적화합니다. Virtual DOM은 실제 DOM의 가벼운 복사본으로, DOM 조작을 최소화하여 페이지 렌더링 성능을 크게 향상시킵니다.

  • 렌더링 최적화: React는 상태(state)가 변경될 때마다 Virtual DOM을 업데이트한 후, 실제 DOM과 비교하여 변경된 부분만 최소화하여 업데이트합니다. 이를 통해 DOM 조작에 드는 비용을 절감하고 애플리케이션의 반응 속도를 개선할 수 있습니다.
  • 효율적인 업데이트: React는 "diffing" 알고리즘을 사용하여 Virtual DOM과 실제 DOM을 비교합니다. 이 알고리즘은 두 DOM 트리의 차이점을 빠르게 계산하고, 변경이 필요한 부분만 실제 DOM에 반영하여 성능을 최적화합니다.

예시:

function Counter() {
  const [count, setCount] = React.useState(0);

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

Counter 컴포넌트는 버튼을 클릭할 때마다 상태가 변경되고, React는 상태가 변경된 부분만 업데이트하여 빠르게 화면을 갱신합니다.

3. 단방향 데이터 흐름

React는 단방향 데이터 흐름(unidirectional data flow)을 사용합니다. 이는 애플리케이션의 데이터가 부모 컴포넌트에서 자식 컴포넌트로 흐르며, 자식 컴포넌트에서 부모 컴포넌트로 데이터가 변경되는 방식은 props와 콜백 함수를 통해 이루어진다는 의미입니다.

  • 명확한 데이터 흐름: 데이터가 한 방향으로만 흐르기 때문에, 애플리케이션의 상태 변화가 어디에서 일어나는지 추적하기 쉽습니다. 이로 인해 디버깅이나 유지보수도 용이합니다.
  • Props와 이벤트 처리: 자식 컴포넌트는 부모로부터 전달받은 props를 사용하고, 부모 컴포넌트는 자식 컴포넌트의 이벤트 핸들러를 통해 데이터를 업데이트합니다.

예시:

// 부모 컴포넌트
function Parent() {
  const [message, setMessage] = React.useState("안녕하세요!");

  const changeMessage = () => {
    setMessage("React를 배우고 있습니다!");
  };

  return (
    <div>
      <Child message={message} onChangeMessage={changeMessage} />
    </div>
  );
}

// 자식 컴포넌트
function Child(props) {
  return (
    <div>
      <p>{props.message}</p>
      <button onClick={props.onChangeMessage}>메시지 변경</button>
    </div>
  );
}

여기서 부모 컴포넌트는 Child 컴포넌트에 message를 전달하고, 버튼 클릭 시 부모의 onChangeMessage 메서드를 호출하여 상태를 업데이트합니다.

4. React Hooks

React 16.8에서 도입된 React Hooks는 함수형 컴포넌트에서 상태와 생명주기 기능을 사용할 수 있게 해주는 기능입니다. Hooks는 클래스 컴포넌트를 대체할 수 있는 매우 중요한 요소로, 코드가 간결하고 이해하기 쉽게 만듭니다.

  • useState: 함수형 컴포넌트에서 상태를 관리할 수 있게 해주는 훅입니다.
  • useEffect: 컴포넌트의 생명주기 메서드 역할을 하는 훅으로, 컴포넌트가 마운트, 업데이트 또는 언마운트될 때 실행되는 코드를 작성할 수 있습니다.
  • useContext, useReducer, useCallback 등 다양한 훅이 제공되어, 복잡한 상태 관리나 성능 최적화 등을 쉽게 처리할 수 있습니다.

예시:

// 상태 관리 예시
function Counter() {
  const [count, setCount] = React.useState(0);

  React.useEffect(() => {
    document.title = `현재 카운트: ${count}`;
  }, [count]); // count가 변경될 때마다 문서 제목을 업데이트

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

useEffect 훅을 사용하여 상태가 변경될 때마다 문서 제목을 갱신하는 예시입니다.

5. JSX (JavaScript XML)

React에서는 JSX를 사용하여 JavaScript 코드 안에서 HTML-like 문법을 사용할 수 있습니다. JSX는 HTML과 비슷하지만, 실제로는 JavaScript 코드로 변환됩니다. JSX는 React에서 컴포넌트를 정의할 때 매우 유용하고, 코드가 더 직관적이고 읽기 쉽습니다.

  • HTML처럼 작성: JSX는 HTML과 매우 비슷한 문법을 사용하므로, 개발자는 HTML을 작성하듯이 UI를 정의할 수 있습니다.
  • JavaScript 코드와 결합: JSX는 JavaScript 표현식을 {}로 감싸서 사용할 수 있습니다. 이를 통해 동적인 데이터를 쉽게 렌더링할 수 있습니다.

예시:

function Greeting(props) {
  return <h1>안녕하세요, {props.name}님!</h1>;
}

위 코드에서 props.name은 JavaScript 표현식이고, JSX 문법 내에서 {}를 사용하여 동적으로 값을 출력합니다.

6. React의 생태계와 도구들

React는 매우 활발한 커뮤니티와 함께 다양한 도구와 라이브러리를 제공합니다. React 생태계에는 다양한 개발 도구, 상태 관리 라이브러리, 라우팅 라이브러리 등이 포함되어 있습니다.

  • React Router: 클라이언트 사이드에서 라우팅을 관리할 수 있는 라이브러리입니다.
  • Redux / Zustand: 상태 관리 라이브러리로, React의 상태를 보다 효율적으로 관리할 수 있습니다.
  • Next.js: 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 지원하는 React 기반의 프레임워크입니다.

결론

React는 그 효율성과 직관적인 설계 덕분에 현대 웹 개발에서 널리 사용되고 있습니다. 컴포넌트 기반 아키텍처, Virtual DOM, 단방향 데이터 흐름 등은 React를 매우 강력한 도구로 만들어 주며, React Hooks와 JSX는 개발자의 생산성을 높이고 코드를 간결하게 만듭니다. 다양한 라이브러리와 도구들 덕분에 React는 복잡한 웹 애플리케이션을 효율적으로 개발할 수 있는 이상적인 선택이 됩니다.

반응형