React와 TypeScript 사용하기, Props와 State에 타입 적용하기

현대 웹 개발에서 React는 매우 인기 있는 라이브러리이며, TypeScript는 정적 타이핑이 가능한 언어로서 자바스크립트의 다양한 문제점을 보완합니다. 이 글에서는 React와 TypeScript를 함께 사용하는 방법, 특히 Props와 State에 타입을 적용하는 방법에 대해 자세히 알아보겠습니다.

1. TypeScript란?

TypeScript는 자바스크립트를 기반으로 한 프로그래밍 언어로, 정적 타이핑을 지원합니다. 이는 소스 코드를 작성할 때 변수의 유형을 명확히 정의할 수 있게 해주며, 코드의 가독성을 높이고 디버깅을 용이하게 만듭니다.

TypeScript는 자바스크립트로 컴파일되며, 기존의 자바스크립트 코드와 호환됩니다. 이를 통해 개발자들은 자바스크립트의 유연성과 TypeScript의 강력한 타입 시스템을 함께 활용할 수 있습니다.

2. React와 TypeScript를 함께 사용하기

React 프로젝트에서 TypeScript를 사용하기 위해서는 먼저 TypeScript가 설치된 React 프로젝트를 생성해야 합니다. 다음 명령어를 사용하여 TypeScript 템플릿이 포함된 새로운 React 애플리케이션을 생성할 수 있습니다.

npx create-react-app my-app --template typescript

위 명령어를 실행하면 my-app이라는 이름의 디렉토리에 TypeScript 설정이 완료된 React 애플리케이션이 생성됩니다.

3. Props와 State 정의하기

React 컴포넌트는 Props와 State를 사용하여 상태와 데이터를 관리합니다. TypeScript를 사용하면 이러한 Props와 State의 타입을 명확하게 정의할 수 있습니다.

3.1 Props 정의하기

Props는 컴포넌트에 데이터를 전달해주는 방법입니다. TypeScript를 사용하여 Props의 타입을 정의하는 방법은 다음과 같습니다.

import React from 'react';

interface GreetingProps {
    name: string;
    age: number;
}

const Greeting: React.FC = ({ name, age }) => {
    return 

안녕하세요, 제 이름은 {name}이고, 나이는 {age}세입니다.

; }; export default Greeting;

위의 코드에서 GreetingProps라는 인터페이스를 정의하여 nameage의 타입을 지정하였습니다. React.FC는 함수형 컴포넌트의 타입을 의미하며, 강력한 타입 정의를 제공합니다.

3.2 State 정의하기

State는 컴포넌트가 관리하는 데이터이며, 사용자 상호작용 등에 따라 변할 수 있습니다. TypeScript에서 State의 타입을 정의하는 방법은 다음과 같습니다.

import React, { useState } from 'react';

interface CounterState {
    count: number;
}

const Counter: React.FC = () => {
    const [state, setState] = useState({ count: 0 });

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

    return (
        

현재 카운트: {state.count}

); }; export default Counter;

위의 예제에서 CounterState 인터페이스를 사용하여 count의 타입을 정의했습니다. useState 훅을 사용할 때 이 타입을 주어 안전하게 상태를 관리할 수 있습니다.

4. Props와 State에 타입 적용하기 예제

이제 Props와 State에 타입을 적용하는 종합적인 예제를 살펴보겠습니다. 다음 컴포넌트는 사용자 정보를 입력받고, 해당 정보를 화면에 표시하는 기능을 합니다.

import React, { useState } from 'react';

// 사용자 정보를 위한 Props 인터페이스 정의
interface User {
    name: string;
    age: number;
}

// Props의 타입 정의
interface UserFormProps {
    onSubmit: (user: User) => void;
}

// 사용자 정보 입력 폼 컴포넌트
const UserForm: React.FC = ({ onSubmit }) => {
    const [name, setName] = useState('');
    const [age, setAge] = useState(0);

    const handleSubmit = (event: React.FormEvent) => {
        event.preventDefault();
        onSubmit({ name, age });
    };

    return (
        
setName(e.target.value)} />
setAge(Number(e.target.value))} />
); }; // 사용자 정보를 표시하는 컴포넌트 const UserInfo: React.FC<{ user: User }> = ({ user }) => { return

사용자 정보: {user.name}, {user.age}세

; }; // 메인 애플리케이션 컴포넌트 const App: React.FC = () => { const [user, setUser] = useState(null); const handleUserSubmit = (newUser: User) => { setUser(newUser); }; return (

사용자 정보 입력

{user && }
); }; export default App;

설명

위 코드는 사용자가 이름과 나이를 입력할 수 있는 폼을 제공합니다. 사용자가 정보를 입력하고 제출하면, handleUserSubmit 함수가 호출되어 user 상태가 업데이트 됩니다. 이 상태를 UserInfo 컴포넌트로 전달하여 사용자 정보를 화면에 표시합니다.

5. TypeScript를 사용할 때 장점

  • 정적 타이핑: 코드 작성 시 점검을 통해 오류를 사전에 방지할 수 있습니다.
  • IDE 지원: 훌륭한 자동 완성과 코드 탐색 기능으로 생산성을 높일 수 있습니다.
  • 가독성: 명확한 타입 정의를 통해 코드의 가독성을 향상시킬 수 있습니다.
  • 협업: 다수의 개발자가 참여하는 프로젝트에서 타입 정보가 소통을 원활하게 도와줍니다.

6. TypeScript ESLint 설정

TypeScript를 사용할 때 ESLint 설정으로 코드 품질을 높일 수 있습니다. TypeScript 전용 ESLint를 설정하는 방법은 다음과 같습니다.

npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin

설치 후 .eslintrc.js 파일을 생성하고 다음과 같이 설정합니다.

module.exports = {
    parser: '@typescript-eslint/parser',
    extends: [
        'plugin:react/recommended',
        'plugin:@typescript-eslint/recommended',
    ],
    parserOptions: {
        ecmaFeatures: {
            jsx: true,
        },
        ecmaVersion: 2020,
        sourceType: 'module',
    },
    settings: {
        react: {
            version: 'detect',
        },
    },
    rules: {
        // 필요에 따라 규칙 추가
    },
};

7. 결론

TypeScript와 React를 결합하여 개발하면 더 안전하고 효율적인 코드를 작성할 수 있습니다. Props와 State에 타입을 명확히 정의함으로써 코드의 가독성을 높이고 오류를 줄일 수 있습니다. 이번 강좌에서는 TypeScript의 기본적인 사용법과 React 컴포넌트에서 Props와 State에 타입을 적용하는 방법에 대해 알아보았습니다.

React와 TypeScript를 함께 사용하는 것은 저마다의 장점을 가지고 있습니다. 이 조합을 통해 보다 미래 지향적인 프로젝트를 만들어보세요!