<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>일상에서 개발하기</title>
    <link>https://dev1023.tistory.com/</link>
    <description>강의와 책, 검색을 통해 얻은 내용을 기록해 보자</description>
    <language>ko</language>
    <pubDate>Sat, 13 Jun 2026 10:52:57 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dev-in-daily-life</managingEditor>
    <image>
      <title>일상에서 개발하기</title>
      <url>https://tistory1.daumcdn.net/tistory/4826965/attach/a0970526da7d4b76b381e8431d0c661f</url>
      <link>https://dev1023.tistory.com</link>
    </image>
    <item>
      <title>[Spring Security] 인가(Authorization) 설정하기</title>
      <link>https://dev1023.tistory.com/123</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;인가(Authorization) 설정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 단계에서는&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;hasRole() vs hasAuthority() 차이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;URL 기반 권한 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;메서드 기반 권한(@PreAuthorize)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;다중 권한 처리&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;를 정리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;4-1. hasRole() vs hasAuthority() 차이&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #c5e0b3; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;메서드&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #c5e0b3; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;내부 동작&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #c5e0b3; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;예시&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;hasRole(&quot;ADMIN&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;내부적으로 &quot;ROLE_ADMIN&quot; 권한이 있는지 검사&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;roles(&quot;ADMIN&quot;) 로 만든 계정만 통과&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;hasAuthority(&quot;ROLE_ADMIN&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&quot;ROLE_ADMIN&quot; 권한이 있는지 그대로 검사&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;DB에서 ROLE_ 접두사 포함한 권한 직접 체크&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;중요&lt;/span&gt;: hasRole() 은 자동으로 &quot;ROLE_&quot; prefix를 붙입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 DB에 ROLE_ADMIN을 저장했다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hasRole(&quot;ADMIN&quot;) 또는 hasAuthority(&quot;ROLE_ADMIN&quot;) 둘 다 가능하지만 혼용 시 주의해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;4-2. URL 기반 권한 설정 예시&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일명&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; SecurityConfig.java&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1755519310293&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security;


import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;


@Configuration
@RequiredArgsConstructor
public class SecurityConfig {


    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }


    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -&amp;gt; auth
                .requestMatchers(&quot;/&quot;, &quot;/public/**&quot;).permitAll()
                .requestMatchers(&quot;/admin/**&quot;).hasRole(&quot;ADMIN&quot;)      // ROLE_ADMIN 필요
                .requestMatchers(&quot;/manager/**&quot;).hasAnyRole(&quot;ADMIN&quot;, &quot;MANAGER&quot;) // ROLE_ADMIN 또는 ROLE_MANAGER
                .requestMatchers(&quot;/api/**&quot;).hasAuthority(&quot;ROLE_API&quot;) // ROLE_ 접두사까지 명시
                .anyRequest().authenticated()
            )
            .formLogin(form -&amp;gt; form.permitAll())
            .logout(logout -&amp;gt; logout.permitAll())
            .csrf(csrf -&amp;gt; csrf.disable());


        return http.build();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;4-3. 메서드 보안(@PreAuthorize) 사용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 시큐리티는 URL 보안뿐만 아니라, &lt;span style=&quot;background-color: #ffff00;&quot;&gt;메서드 호출 시점&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;에서도 권한 체크&lt;/span&gt;를 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 Controller, Service, Repository 메서드에 권한을 걸 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;1. 설정 클래스에 &lt;/span&gt;&lt;span&gt;@EnableMethodSecurity&lt;/span&gt;&lt;span&gt; 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755519353329&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;


@Configuration
@EnableMethodSecurity // 메서드 보안 활성화
public class SecurityConfig {
    // ... 기존 설정
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;2. 컨트롤러 예시&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755519364773&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.controller;


import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class AdminController {


    @PreAuthorize(&quot;hasRole('ADMIN')&quot;) // ROLE_ADMIN 필요
    @GetMapping(&quot;/admin/data&quot;)
    public String adminData() {
        return &quot;관리자 전용 데이터&quot;;
    }


    @PreAuthorize(&quot;hasAnyRole('ADMIN', 'MANAGER')&quot;)
    @GetMapping(&quot;/admin/manager/data&quot;)
    public String adminOrManagerData() {
        return &quot;관리자 또는 매니저 데이터&quot;;
    }


    @PreAuthorize(&quot;hasAuthority('ROLE_API')&quot;)
    @GetMapping(&quot;/api/data&quot;)
    public String apiData() {
        return &quot;API 전용 데이터&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;4-4. 다중 권한 처리&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;URL 방식&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755519385796&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.requestMatchers(&quot;/reports/**&quot;).hasAnyRole(&quot;ADMIN&quot;, &quot;MANAGER&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;@PreAuthorize 방식&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755519398093&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@PreAuthorize(&quot;hasAnyAuthority('ROLE_ADMIN', 'ROLE_MANAGER')&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;4-5. 정리&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;hasRole()&lt;/span&gt;&lt;span&gt; : 내부적으로 ROLE_ prefix를 붙이므로 &quot;ADMIN&quot;만 적어도 &quot;ROLE_ADMIN&quot; 권한을 찾음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;hasAuthority()&lt;/span&gt;&lt;span&gt; : 전체 권한 문자열을 그대로 비교 (ex. &quot;ROLE_ADMIN&quot;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;URL 보안과 메서드 보안을 &lt;/span&gt;&lt;span&gt;병행&lt;/span&gt;&lt;span&gt;하면 더 안전한 설계 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실무에서는 API 서버인 경우, URL 기반 보안 + JWT 기반 인가 조합이 일반적&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Spring Security</category>
      <category>hasAuthority</category>
      <category>hasRole</category>
      <category>Spring Security</category>
      <category>권한</category>
      <category>스프링 시큐리티</category>
      <category>시큐리티</category>
      <category>인가</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/123</guid>
      <comments>https://dev1023.tistory.com/123#entry123comment</comments>
      <pubDate>Mon, 18 Aug 2025 21:17:09 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Security] 스프링 시큐리티 사용자 인증 구현하기</title>
      <link>https://dev1023.tistory.com/122</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;메모리 사용자(InMemoryUserDetailsManager)&lt;/span&gt;&lt;span&gt; 와 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;DB 기반 사용자(UserDetailsService)&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 를 순서대로 구현해볼게요.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;(예제는 Spring Security 6.x / Spring Boot 3.x 기준)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;InMemoryUserDetailsManager (빠르게 동작 확인)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;✅&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구성요소&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;PasswordEncoder : 비밀번호 암호화(BCrypt)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;InMemoryUserDetailsManager : 메모리에 사용자 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;SecurityFilterChain : 폼 로그인 켜두고 URL 권한 설정&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; SecurityConfig.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086725850&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;


@Configuration
public class SecurityConfig {


    // ✅ 비밀번호 암호화기 Bean 등록
    @Bean
    public PasswordEncoder passwordEncoder() {
        // BCryptPasswordEncoder: 해시 기반 암호화, 복호화 불가능 (보안에 안전)
        return new BCryptPasswordEncoder();
    }


    // ✅ 메모리 기반 사용자 저장소 Bean 등록
    @Bean
    public UserDetailsService userDetailsService(PasswordEncoder encoder) {
        // User.withUsername(): username, password, roles 지정 가능
        // roles(&quot;USER&quot;) &amp;rarr; 내부적으로 &quot;ROLE_USER&quot;로 매핑됨
        UserDetails user = User.withUsername(&quot;user&quot;)
                .password(encoder.encode(&quot;1234&quot;)) // 비밀번호 암호화 필수
                .roles(&quot;USER&quot;) // ROLE_USER
                .build();


        UserDetails admin = User.withUsername(&quot;admin&quot;)
                .password(encoder.encode(&quot;1234&quot;)) // 비밀번호 암호화 필수
                .roles(&quot;ADMIN&quot;) // ROLE_ADMIN
                .build();


        // InMemoryUserDetailsManager: 메모리에 사용자 저장
        return new InMemoryUserDetailsManager(user, admin);
    }


    // ✅ SecurityFilterChain Bean 등록
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // URL별 접근 권한 설정
            .authorizeHttpRequests(auth -&amp;gt; auth
                .requestMatchers(&quot;/&quot;, &quot;/public/**&quot;, &quot;/css/**&quot;, &quot;/js/**&quot;, &quot;/images/**&quot;).permitAll() // 인증 없이 허용
                .requestMatchers(&quot;/admin/**&quot;).hasRole(&quot;ADMIN&quot;) // ROLE_ADMIN 필요
                .anyRequest().authenticated() // 나머지는 인증 필요
            )
            // 폼 로그인 설정
            .formLogin(form -&amp;gt; form
                .loginPage(&quot;/login&quot;) // 커스텀 로그인 페이지 지정
                .permitAll() // 로그인 페이지는 인증 없이 접근 가능
            )
            // 로그아웃 설정
            .logout(logout -&amp;gt; logout.permitAll())
            // 개발 편의를 위해 CSRF 비활성화 (실무에서는 활성 유지)
            .csrf(csrf -&amp;gt; csrf.disable());


        // 최종 SecurityFilterChain 반환
        return http.build();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태로 애플리케이션 실행 후:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;/login에서 user/1234, admin/1234 로 로그인 테스트 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;/admin/**는 admin만 접근 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;DB 기반 사용자 인증 (실무 기본)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;✅&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구성요소&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;UserDetails 구현체: 내 엔티티 &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스프링&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보안&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용자로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;UserDetailsService 구현체: username으로 사용자 조회&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;PasswordEncoder: BCrypt&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;(선택) DaoAuthenticationProvider 등록&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;1) 테이블 스키마(예시, JPA 기준)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DDL 예시&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086750309&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(100) NOT NULL,
    role VARCHAR(30) NOT NULL,      -- 예: ROLE_USER, ROLE_ADMIN
    enabled BOOLEAN NOT NULL DEFAULT TRUE
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;❗️&lt;/span&gt;&lt;span&gt;팁&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;role을 DB에는 &lt;/span&gt;&lt;span&gt;&quot;ROLE_USER&quot;&lt;/span&gt;&lt;span&gt; 형태로 저장하면 코드에서 매핑이 명확합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미 &quot;USER&quot;만 저장한다면, 매핑 시 &quot;ROLE_&quot; prefix를 붙여주세요.&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;2) 엔티티 &amp;amp; 레포지토리&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; UserAccount.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086783491&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security.user; // 사용자 엔티티 패키지


import jakarta.persistence.*; // JPA 어노테이션
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;


@Entity // JPA 엔티티 클래스
@Table(name = &quot;users&quot;) // 매핑할 테이블명 지정
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserAccount {


    @Id // PK 지정
    @GeneratedValue(strategy = GenerationType.IDENTITY) // AUTO_INCREMENT
    private Long id;


    @Column(nullable=false, unique=true, length=50) // NOT NULL, UNIQUE 제약조건
    private String username;


    @Column(nullable=false, length=100) // NOT NULL, 최대 길이 100
    private String password;


    @Column(nullable=false, length=30) // ROLE_USER / ROLE_ADMIN
    private String role;


    @Column(nullable=false) // 계정 활성 여부
    private boolean enabled = true;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; UserAccountRepository.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086791815&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security.user;


import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;


// JpaRepository 상속 &amp;rarr; CRUD 메서드 자동 제공
public interface UserAccountRepository extends JpaRepository&amp;lt;UserAccount, Long&amp;gt; {


    // username으로 사용자 조회
    Optional&amp;lt;UserAccount&amp;gt; findByUsername(String username);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;3) UserDetails 구현체&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; CustomUserDetails.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086804253&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security.auth;


import java.util.Collection;
import java.util.List;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;


import com.example.security.user.UserAccount;


// UserDetails 구현 &amp;rarr; Spring Security에서 사용할 사용자 객체
public class CustomUserDetails implements UserDetails {


    private final UserAccount account; // DB 사용자 정보


    public CustomUserDetails(UserAccount account) {
        this.account = account;
    }


    @Override
    public Collection&amp;lt;? extends GrantedAuthority&amp;gt; getAuthorities() {
        // DB role 값 그대로 사용 (예: ROLE_USER)
        return List.of(new SimpleGrantedAuthority(account.getRole()));
    }


    @Override
    public String getPassword() { return account.getPassword(); }


    @Override
    public String getUsername() { return account.getUsername(); }


    @Override
    public boolean isAccountNonExpired() { return true; } // 계정 만료 여부


    @Override
    public boolean isAccountNonLocked() { return true; } // 계정 잠금 여부


    @Override
    public boolean isCredentialsNonExpired() { return true; } // 비밀번호 만료 여부


    @Override
    public boolean isEnabled() { return account.isEnabled(); } // 계정 활성화 여부
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;4) UserDetailsService 구현&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; CustomUserDetailsService.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086821630&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security.auth;


import com.example.security.user.UserAccount;
import com.example.security.user.UserAccountRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;


@Service // 서비스 계층 빈 등록
@RequiredArgsConstructor // final 필드 자동 생성자 주입
public class CustomUserDetailsService implements UserDetailsService {


    private final UserAccountRepository userAccountRepository; // DB 접근 레포지토리


    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // username으로 사용자 조회, 없으면 예외 발생
        UserAccount account = userAccountRepository.findByUsername(username)
                .orElseThrow(() -&amp;gt; new UsernameNotFoundException(&quot;사용자를 찾을 수 없습니다: &quot; + username));
        // UserDetails 구현체 반환
        return new CustomUserDetails(account);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;5) 시큐리티 설정 (DB 인증 사용)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; SecurityConfig.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086834006&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security;


import com.example.security.auth.CustomUserDetailsService;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;


@Configuration // Spring 설정 클래스
@RequiredArgsConstructor // final 필드 자동 생성자
public class SecurityConfig {


    private final CustomUserDetailsService customUserDetailsService;


    // ✅ 비밀번호 암호화기
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }


    // ✅ DB 기반 인증 제공자 등록
    @Bean
    public DaoAuthenticationProvider daoAuthenticationProvider(PasswordEncoder encoder) {
        DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
        provider.setUserDetailsService(customUserDetailsService); // DB 조회 서비스
        provider.setPasswordEncoder(encoder); // 비밀번호 인코더
        return provider;
    }


    // ✅ SecurityFilterChain
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http,
                                                   DaoAuthenticationProvider authProvider) throws Exception {
        http
            .authenticationProvider(authProvider) // DB 인증 제공자 적용
            .authorizeHttpRequests(auth -&amp;gt; auth
                .requestMatchers(PathRequest.toH2Console()).permitAll()    // H2 콘솔은 로그인 없이 허용
                .requestMatchers(&quot;/&quot;, &quot;/public/**&quot;, &quot;/css/**&quot;, &quot;/js/**&quot;, &quot;/images/**&quot;).permitAll()
                .requestMatchers(&quot;/admin/**&quot;).hasRole(&quot;ADMIN&quot;) // ROLE_ADMIN 필요
                .anyRequest().authenticated()
            )
            .formLogin(form -&amp;gt; form
                .loginPage(&quot;/login&quot;) // 커스텀 로그인 페이지
                .defaultSuccessUrl(&quot;/&quot;, true) // 로그인 성공 후 이동할 페이지
                .permitAll()
            )
            .logout(logout -&amp;gt; logout.permitAll())
            .csrf(csrf -&amp;gt; csrf.disable()); // 개발 단계에서만 CSRF 비활성화
// ✅ H2 콘솔은 프레임을 사용 &amp;rarr; 동일 출처만 허용
            .headers(headers -&amp;gt; headers
                .frameOptions(frame -&amp;gt; frame.sameOrigin())
            );


        return http.build();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;참고: DaoAuthenticationProvider를 직접 등록하지 않아도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserDetailsService + PasswordEncoder 빈이 있으면 스프링이 &lt;br /&gt;자동 구성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 &lt;span&gt;명시 등록&lt;/span&gt;은 확장(잠금정책, 에러메시지 커스터마이징 등)에 유리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;6) 초기 사용자 데이터(비밀번호는 반드시 BCrypt)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;테스트용 INSERT (스프링 환경에서 인코딩)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086866985&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 임시 실행 코드 또는 CommandLineRunner에서
var encoder = new BCryptPasswordEncoder();
String raw = &quot;1234&quot;;
String encoded = encoder.encode(raw);
// INSERT INTO users(username, password, role, enabled) VALUES ('admin', '{encoded}', 'ROLE_ADMIN', true);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정리 &amp;amp; 팁&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;roles vs authorities&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;PasswordEncoder 필수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;예외 메시지/핸들러&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;테스트&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;1) 의존성 추가&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Maven&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086885573&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- JPA --&amp;gt;
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;spring-boot-starter-data-jpa&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;!-- 개발용 내장 DB (택1) --&amp;gt;
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;com.h2database&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;h2&amp;lt;/artifactId&amp;gt;
  &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;!-- 실DB 드라이버: 사용하는 DB에 맞춰 하나만 추가 --&amp;gt;
&amp;lt;!-- MySQL --&amp;gt;
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;com.mysql&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;mysql-connector-j&amp;lt;/artifactId&amp;gt;
  &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;!-- MariaDB --&amp;gt;
&amp;lt;!--
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.mariadb.jdbc&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;mariadb-java-client&amp;lt;/artifactId&amp;gt;
  &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
--&amp;gt;
&amp;lt;!-- PostgreSQL --&amp;gt;
&amp;lt;!--
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.postgresql&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;postgresql&amp;lt;/artifactId&amp;gt;
  &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
--&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Gradle (Groovy)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086894198&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'                 // 개발용
runtimeOnly 'com.mysql:mysql-connector-j'       // 실DB(예: MySQL)
// 필요 시 교체:
// runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
// runtimeOnly 'org.postgresql:postgresql'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Gradle (Kotlin DSL)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086904060&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation(&quot;org.springframework.boot:spring-boot-starter-data-jpa&quot;)
runtimeOnly(&quot;com.h2database:h2&quot;)                 // dev
runtimeOnly(&quot;com.mysql:mysql-connector-j&quot;)       // prod
// 필요 시 교체:
// runtimeOnly(&quot;org.mariadb.jdbc:mariadb-java-client&quot;)
// runtimeOnly(&quot;org.postgresql:postgresql&quot;)
Spring Boot BOM이 버전 관리를 해주니 별도 버전 명시는 보통 필요 없습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;2) 기본 설정 예시&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;(A) 개발용 H2&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src/main/resources/application.yml&lt;/p&gt;
&lt;pre id=&quot;code_1755086934800&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
  datasource:
    url: jdbc:h2:mem:testdb;MODE=MySQL;DATABASE_TO_LOWER=TRUE
    # jdbc:h2:mem:testdb &amp;rarr; 메모리 DB로 testdb라는 이름 사용
    # MODE=MySQL &amp;rarr; H2 SQL 문법을 MySQL 스타일로 호환
    # DATABASE_TO_LOWER=TRUE &amp;rarr; 대소문자 구분 없이 소문자로 테이블명/컬럼명 처리
    driver-class-name: org.h2.Driver   # H2 전용 드라이버
    username: sa                       # 기본 계정
    password:                          # 비밀번호 없음
  jpa:
    hibernate:
      ddl-auto: update                  # 엔티티 변경 시 DB 스키마 자동 반영 (dev 전용)
    properties:
      hibernate:
        format_sql: true                # SQL을 보기 좋게 포맷팅
    open-in-view: false                 # OSIV(Open Session In View) 비활성화 (권장)
  h2:
    console:
      enabled: true                     # H2 웹 콘솔 활성화
      path: /h2-console                  # 웹 콘솔 접근 경로 (http://localhost:8080/h2-console)


logging:
  level:
    org.hibernate.SQL: debug            # 실행되는 SQL 로그 출력
    org.hibernate.orm.jdbc.bind: trace  # SQL 파라미터 바인딩 값까지 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;(B) 실DB (예: MySQL)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src/main/resources/application.yml&lt;/p&gt;
&lt;pre id=&quot;code_1755086971543&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
  datasource:
    url: jdbc:mysql://localhost:3306/appdb?serverTimezone=Asia/Seoul&amp;amp;characterEncoding=utf8
    # jdbc:mysql:// &amp;rarr; MySQL 프로토콜
    # localhost:3306 &amp;rarr; DB 서버 주소와 포트
    # appdb &amp;rarr; 데이터베이스 이름
    # serverTimezone=Asia/Seoul &amp;rarr; 시간대 설정
    # characterEncoding=utf8 &amp;rarr; 문자 인코딩
    username: appuser                   # DB 사용자명
    password: secret                    # DB 비밀번호
  jpa:
    hibernate:
      ddl-auto: validate                 # 엔티티와 DB 스키마가 일치하는지 검증만 (운영 권장)
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect # MySQL 8 전용 방언(Dialect)
        format_sql: true                # SQL 포맷팅
    open-in-view: false                  # OSIV 비활성화 (트랜잭션 범위 명확하게)


logging:
  level:
    org.hibernate.SQL: debug            # 실행되는 SQL 로그 출력
    org.hibernate.orm.jdbc.bind: trace  # SQL 파라미터 로그 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;각 속성별 설명 요약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #c5e0b3; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;속성&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #c5e0b3; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;설명&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.datasource.url&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;DB 접속 주소 (DB 종류, 서버 위치, 포트, DB명, 옵션 포함)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.datasource.driver-class-name&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;JDBC 드라이버 클래스명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.datasource.username&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;DB 접속 계정명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.datasource.password&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;DB 접속 비밀번호&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.jpa.hibernate.ddl-auto&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;엔티티와 DB 스키마 동기화 전략 (create, update, validate, none)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.jpa.properties.hibernate.dialect&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;사용하는 DB 방언(Dialect)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.jpa.properties.hibernate.format_sql&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;SQL 로그 포맷팅 여부&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.jpa.open-in-view&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;OSIV 활성화 여부 (false 권장)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.h2.console.enabled&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;H2 웹 콘솔 사용 여부&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;spring.h2.console.path&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;H2 웹 콘솔 경로&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;logging.level.org.hibernate.SQL&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;실행되는 SQL 로그 레벨&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;logging.level.org.hibernate.orm.jdbc.bind&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;SQL 바인딩 파라미터 로그 레벨&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;3) JPA 코드 주의점 (Spring Boot 3 / Jakarta)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;import jakarta.persistence.*; (javax 아님)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;엔티티 예:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1755087011304&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import jakarta.persistence.*;

@Entity
@Table(name = &quot;users&quot;)
public class UserAccount {
  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  
@Column(nullable=false, unique=true, length=50)
  private String username;
  
@Column(nullable=false, length=100)
  private String password;
  
@Column(nullable=false, length=30)
  private String role;
  
@Column(nullable=false)
  private boolean enabled = true;
// getters/setters ...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 앞서 드린 &lt;span&gt;DB 인증(UserDetailsService)&lt;/span&gt; 코드가 정상 동작할 준비가 되었습니다.&lt;/p&gt;</description>
      <category>Spring Security</category>
      <category>Spring Security</category>
      <category>userdetail</category>
      <category>UserDetailsService</category>
      <category>사용자 인증</category>
      <category>스프링 시큐리티</category>
      <category>인증</category>
      <category>인증구현</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/122</guid>
      <comments>https://dev1023.tistory.com/122#entry122comment</comments>
      <pubDate>Wed, 13 Aug 2025 21:11:24 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Security] 스프링 시큐리티 적용하기</title>
      <link>https://dev1023.tistory.com/121</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SecurityFilterChain 커스터마이징과 URL 인증 예외 처리를 해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;기본 시큐리티 동작&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Security를 의존성에 추가하면 기본 동작은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;모든 요청 &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인증&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필요&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;기본 로그인 페이지(/login) 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;콘솔에 출력된 랜덤 패스워드로 로그인 가능 (username은 user)&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실무에서는 &lt;span&gt;일부 URL은 인증 없이 접근 가능&lt;/span&gt;하도록 해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) /, /css/**, /js/**, /images/**, /public/** 등 정적 리소스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;특정 요청 인증 예외 처리&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일명&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; SecurityConfig.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086454574&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;


@Configuration // 이 클래스가 스프링의 설정 클래스임을 명시
public class SecurityConfig {


    @Bean // SecurityFilterChain을 Bean으로 등록 (Spring Security 6 방식)
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // ✅ URL별 접근 권한을 설정하는 구간
            .authorizeHttpRequests(auth -&amp;gt; auth
                // requestMatchers(): 특정 경로에 대한 접근 권한 지정
                .requestMatchers(&quot;/&quot;, &quot;/public/**&quot;, &quot;/css/**&quot;, &quot;/js/**&quot;, &quot;/images/**&quot;).permitAll()
                // permitAll(): 인증 없이 누구나 접근 가능
                .anyRequest().authenticated() // 그 외 모든 요청은 인증 필요
            )


            // ✅ 폼 로그인 설정
            .formLogin(form -&amp;gt; form
                // loginPage(): 커스텀 로그인 페이지 경로 지정
                .loginPage(&quot;/login&quot;)
                // permitAll(): 로그인 페이지 접근은 인증 없이 허용
                .permitAll()
            )


            // ✅ 로그아웃 설정
            .logout(logout -&amp;gt; logout
                // logoutUrl(): 로그아웃 요청 URL 지정
                .logoutUrl(&quot;/logout&quot;)
                // permitAll(): 로그아웃 요청은 누구나 가능
                .permitAll()
            )


            // ✅ CSRF 설정
            // 기본적으로 CSRF가 활성화되어 POST/PUT/DELETE 요청 시 토큰 필요
            // 개발&amp;middot;테스트 단계에서는 편의상 비활성화 가능
            .csrf(csrf -&amp;gt; csrf.disable());


        // http.build(): 설정된 SecurityFilterChain 객체를 반환
        return http.build();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span&gt;주요&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정리&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #c5e0b3;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;메서드&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #c5e0b3;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;역할&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;authorizeHttpRequests()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;요청 URL에 따라 인증/인가 규칙을 정의&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;requestMatchers()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;특정 패턴의 URL을 선택&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;permitAll()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;해당 URL은 인증 없이 접근 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;authenticated()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;해당 URL은 인증된 사용자만 접근 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;formLogin()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;폼 기반 로그인 기능 활성화&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;loginPage()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;커스텀 로그인 페이지 경로 지정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;logout()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;로그아웃 기능 활성화 및 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;logoutUrl()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;로그아웃 요청 경로 지정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;csrf().disable()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;CSRF 보호 비활성화 (개발용)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;build()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;SecurityFilterChain 객체 생성&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하면&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어 /admin에 접근하려고 하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;로그인하지 않은 경우 /login으로 리다이렉트되고,&lt;br /&gt;정적 리소스(/css/** 등)는 로그인 없이 접근이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;커스텀 로그인 페이지 만들기&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일명&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; LoginController.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086487605&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
 
@Controller
public class LoginController {
	// 로그인 페이지 매핑
    @GetMapping(&quot;/login&quot;)
    public String loginPage() {
        return &quot;login&quot;; // templates/login.html
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일명&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; src/main/resources/templates/login.html&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086512771&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;

&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;로그인&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h2&amp;gt;로그인 페이지&amp;lt;/h2&amp;gt;
&amp;lt;form th:action=&quot;@{/login}&quot; method=&quot;post&quot;&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;label&amp;gt;아이디: &amp;lt;input type=&quot;text&quot; name=&quot;username&quot;&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;label&amp;gt;비밀번호: &amp;lt;input type=&quot;password&quot; name=&quot;password&quot;&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;button type=&quot;submit&quot;&amp;gt;로그인&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;의존성 설정&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; Maven&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086530171&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-security&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-thymeleaf&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; Gradle (Groovy)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086538898&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; Gradle (Kotlin DSL)&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755086548179&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation(&quot;org.springframework.boot:spring-boot-starter-security&quot;)
implementation(&quot;org.springframework.boot:spring-boot-starter-thymeleaf&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하면 /, /public/** 등은 로그인 없이 접근 가능하고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 페이지에 접근하려 하면 /login 페이지로 리다이렉트됩니다.&lt;/p&gt;</description>
      <category>Spring Security</category>
      <category>authorizeHttpRequests</category>
      <category>RequestMatcher</category>
      <category>SecurityFilterChain</category>
      <category>Spring Security</category>
      <category>스프링 시큐리티</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/121</guid>
      <comments>https://dev1023.tistory.com/121#entry121comment</comments>
      <pubDate>Wed, 13 Aug 2025 21:03:27 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Security] 스프링 시큐리티 기본 개념 익히기</title>
      <link>https://dev1023.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;인증(Authentication) vs 인가(Authorization)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #c5e0b3;&quot;&gt;&lt;span&gt;&lt;span&gt;구분&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #c5e0b3;&quot;&gt;&lt;span&gt;&lt;span&gt;설명&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #c5e0b3;&quot;&gt;&lt;span&gt;&lt;span&gt;예시&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;인증 (Authentication)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;사용자가 누구인지 확인하는 절차&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;&quot;너 진짜 홍길동이 맞아?&quot; &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;로그인&lt;/span&gt;&lt;span&gt; ID/&lt;/span&gt;&lt;span&gt;비번&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;인가 (Authorization)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;인증된 사용자가 무엇을 할 수 있는지 결정&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&quot;홍길동은 /admin 페이지 볼 권한이 있나?&quot;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;➡&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인증이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;먼저&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인가가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;진행됩니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;스프링 시큐리티의 필터 기반 구조&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 시큐리티는 &lt;span style=&quot;background-color: #ffff00;&quot;&gt;FilterChain&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; 기반으로 동작&lt;/span&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 모든 HTTP 요청은 &lt;span style=&quot;background-color: #ffff00;&quot;&gt;DispatcherServlet&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;에 도달하기 전에 &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;SecurityFilterChain&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;을 거칩&lt;/span&gt;니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 59.5349%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Client&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SecurityFilterChain&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;DispatcherServlet&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 다음과 같은 필터들이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;UsernamePasswordAuthenticationFilter &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;폼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;로그인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인증&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;BasicAuthenticationFilter &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; HTTP Basic &lt;/span&gt;&lt;span&gt;인증&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ExceptionTranslationFilter &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인증&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;인가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;예외&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;FilterSecurityInterceptor &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;최종&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;권한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;체크&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;Spring Security 동작 흐름 (폼 로그인 예시)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;사용자가 /login에 POST 요청 (아이디/비밀번호 제출)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;UsernamePasswordAuthenticationFilter에서 인증 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;AuthenticationManager가 UserDetailsService 호출&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; DB &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메모리에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정보&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;로드&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;비밀번호 비교 후 성공 시 Authentication 객체 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;SecurityContext에 인증 정보 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이후 요청 시 SecurityContext에서 인증 정보 확인 후 권한 부여&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;기본 로그인 페이지&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Security를 의존성에 추가하면 /login 페이지가 자동 제공됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;pre id=&quot;code_1755086316735&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Username: user
Password: (콘솔에 랜덤 비번 출력)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;실습 예시 &amp;ndash; SecurityFilterChain 기본 설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일명&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; SecurityConfig.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086231797&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
 
@Configuration // 설정 클래스임을 명시
public class SecurityConfig {
@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // 모든 요청은 인증 필요
            .authorizeHttpRequests(auth -&amp;gt; auth
                .anyRequest().authenticated() // 모든 요청 인증 필요
            )
            // 기본 로그인 폼 사용
            .formLogin(form -&amp;gt; form
                .permitAll() // 로그인 페이지는 누구나 접근 가능
            )
            // 로그아웃 설정
            .logout(logout -&amp;gt; logout
                .permitAll()
            );
return http.build();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;의존성 설정&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; Maven&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086262151&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-security&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; Gradle (Groovy)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086272858&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'org.springframework.boot:spring-boot-starter-security'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; Gradle (Kotlin DSL)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755086282674&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation(&quot;org.springframework.boot:spring-boot-starter-security&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;여기까지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하면 &lt;/span&gt;&lt;span&gt;아무 설정 안 해도 기본 로그인 페이지&lt;/span&gt;&lt;span&gt;가 뜨고, 콘솔에 랜덤 비밀번호가 출력됩니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring Security</category>
      <category>springsecurity</category>
      <category>스프링 시큐리티</category>
      <category>인가</category>
      <category>인증</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/120</guid>
      <comments>https://dev1023.tistory.com/120#entry120comment</comments>
      <pubDate>Wed, 13 Aug 2025 20:59:15 +0900</pubDate>
    </item>
    <item>
      <title>[React] 리액트 이벤트 핸들링</title>
      <link>https://dev1023.tistory.com/119</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;사용자가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;웹&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저에서&lt;/span&gt;&lt;span&gt; DOM &lt;/span&gt;&lt;span&gt;요소들과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상호&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작용하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt;(event)&lt;/span&gt;&lt;span&gt;라고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;마우스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;커서를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;올렸을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; onmouseover &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;클릭했을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; onclick &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행한다&lt;/span&gt;&lt;span&gt;. Form &lt;/span&gt;&lt;span&gt;요소는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바뀔&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; onchange &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;리액트의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;리액트의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;웹&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저의&lt;/span&gt;&lt;span&gt; HTML &lt;/span&gt;&lt;span&gt;이벤트와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인터페이스가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;동일하기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때문에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용법이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;꽤&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비슷하다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 다음 코드를 살펴 보자.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;Say&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickEnter&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;!'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickLeave&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;안녕히 가세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;!'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'black'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickEnter&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입장&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickLeave&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;퇴장&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1 &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;color: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'red'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'red'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;빨간색&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;color: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;초록색&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;color: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'blue'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'blue'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;파란색&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;Say&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;이벤트를&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사항&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1. &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;카멜&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표기법으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; HTML&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; onclick&lt;/span&gt;&lt;span&gt;은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;리액트에서는&lt;/span&gt;&lt;span&gt; onClick&lt;/span&gt;&lt;span&gt;으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- &lt;/span&gt;&lt;span&gt;또&lt;/span&gt;&lt;span&gt; onkeyup&lt;/span&gt;&lt;span&gt;은&lt;/span&gt;&lt;span&gt; onKeyUp&lt;/span&gt;&lt;span&gt;으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;2. &lt;/span&gt;&lt;span&gt;이벤트에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자바스크립트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아니라&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- HTML&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;큰따옴표&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;안에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣었지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;리액트에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- &lt;/span&gt;&lt;span&gt;앞서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;예제에서도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;화살표&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달했다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달해도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;되고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;렌더링&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부분&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;외부에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;미리&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달해도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;color: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;초록색&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;3. DOM &lt;/span&gt;&lt;span&gt;요소에만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- &lt;/span&gt;&lt;span&gt;즉&lt;/span&gt;&lt;span&gt; div, button, input, form, span &lt;/span&gt;&lt;span&gt;등의&lt;/span&gt;&lt;span&gt; DOM &lt;/span&gt;&lt;span&gt;요소에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;우리가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;직접&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자체적으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; MyComponent&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; onClick &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정한다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;클릭할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; doSomething &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;실행하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;것이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;아니라&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;그냥&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;이름이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; onClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;인&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; MyComponent&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;에게&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;전달해&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;줄&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;뿐&lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;doSomething&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- &lt;/span&gt;&lt;span&gt;따라서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자체적으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;하지만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달받은&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부의&lt;/span&gt;&lt;span&gt; DOM &lt;/span&gt;&lt;span&gt;이벤트로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;/* (...) */ &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;종류&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Clipboard&lt;/li&gt;
&lt;li&gt;Touch&lt;/li&gt;
&lt;li&gt;Composition&lt;/li&gt;
&lt;li&gt;UI&lt;/li&gt;
&lt;li&gt;Keyboard&lt;/li&gt;
&lt;li&gt;Wheel&lt;/li&gt;
&lt;li&gt;Focus&lt;/li&gt;
&lt;li&gt;Media&lt;/li&gt;
&lt;li&gt;Form&lt;/li&gt;
&lt;li&gt;Image&lt;/li&gt;
&lt;li&gt;Mouse&lt;/li&gt;
&lt;li&gt;Animation&lt;/li&gt;
&lt;li&gt;Selection&lt;/li&gt;
&lt;li&gt;Transition&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://reactjs.org/docs/events.html&quot;&gt;https://reactjs.org/docs/events.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742906690392&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;SyntheticEvent &amp;ndash; React&quot; data-og-description=&quot;A JavaScript library for building user interfaces&quot; data-og-host=&quot;legacy.reactjs.org&quot; data-og-source-url=&quot;https://reactjs.org/docs/events.html&quot; data-og-url=&quot;https://legacy.reactjs.org/docs/events.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ddzsod/hyYvto6uhl/XkXOYAzNnVBbL7FKji5301/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://reactjs.org/docs/events.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://reactjs.org/docs/events.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ddzsod/hyYvto6uhl/XkXOYAzNnVBbL7FKji5301/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SyntheticEvent &amp;ndash; React&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A JavaScript library for building user interfaces&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;legacy.reactjs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이벤트 핸들링 연습하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. &lt;b&gt;컴포넌트&lt;/b&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- src/EventPractice.js &lt;/span&gt;&lt;span&gt;파일을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;만든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;먼저&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구현한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* EventPractice.js&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;span&gt;App.js&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; EventPractice &lt;/span&gt;&lt;span&gt;렌더링&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;App.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00; color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'./EventPractice'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3. &lt;/span&gt;&lt;span&gt;onChange &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- EventPractice &lt;/span&gt;&lt;span&gt;컴포넌트에&lt;/span&gt;&lt;span&gt; input &lt;/span&gt;&lt;span&gt;요소를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;요소에&lt;/span&gt;&lt;span&gt; onChange &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; EventPractice &lt;/span&gt;&lt;span&gt;컴포넌트의&lt;/span&gt;&lt;span&gt; render &lt;/span&gt;&lt;span&gt;메서드에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;EventPractice.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;retur&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;아무거나 입력해 보세요&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;웹&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;크롬&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개발자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;열어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인풋에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아무&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;입력해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u42wr/btsMW5zlEpG/e8n0k0ls6QHJVey8rITVVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u42wr/btsMW5zlEpG/e8n0k0ls6QHJVey8rITVVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u42wr/btsMW5zlEpG/e8n0k0ls6QHJVey8rITVVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu42wr%2FbtsMW5zlEpG%2Fe8n0k0ls6QHJVey8rITVVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;957&quot; height=&quot;418&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;콘솔에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타났다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* EventPractice.js&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; onChange &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부분&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다시&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 90px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 90px;&quot;&gt;
&lt;td style=&quot;height: 90px;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;여기서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;콘솔에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기록되는&lt;/span&gt;&lt;span&gt; e &lt;/span&gt;&lt;span&gt;객체는&lt;/span&gt;&lt;span&gt; SyntheticEvent&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;웹&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;네이티브&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;감싸는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;네이티브&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인터페이스가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같으므로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;순수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자바스크립트에서&lt;/span&gt;&lt;span&gt; HTML &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다룰&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;똑같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- SyntheicEvent&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;네이티브&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;달리&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;끝나고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초기화되므로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정보를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;참조할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; 0.5&lt;/span&gt;&lt;span&gt;초&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;뒤에&lt;/span&gt;&lt;span&gt; e &lt;/span&gt;&lt;span&gt;객체를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;참조하면&lt;/span&gt;&lt;span&gt; e &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비워지게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;만약&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비동기적으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;참조할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;일이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다면&lt;/span&gt;&lt;span&gt; e.persist() &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;에를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; onChange &lt;/span&gt;&lt;span&gt;이벤트가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;발생할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;앞으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인풋&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값인&lt;/span&gt;&lt;span&gt; e.target.value&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;콘솔에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기록해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* EventPractice.js&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; onChange &lt;/span&gt;&lt;span&gt;코드&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh6UcF/btsMVCSJ7AR/IfbgBx0M7yF5Vg5ptMJIy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh6UcF/btsMVCSJ7AR/IfbgBx0M7yF5Vg5ptMJIy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh6UcF/btsMVCSJ7AR/IfbgBx0M7yF5Vg5ptMJIy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh6UcF%2FbtsMVCSJ7AR%2FIfbgBx0M7yF5Vg5ptMJIy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;961&quot; height=&quot;354&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바뀔&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때마다&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바뀌는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;콘솔에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기록한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; input &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;담기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 이번에는&amp;nbsp;&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; input &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;담아&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 생성자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드인&lt;/span&gt;&lt;span&gt; constructor&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; state &lt;/span&gt;&lt;span&gt;초기값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;핸들링&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부에서&lt;/span&gt;&lt;span&gt; this.setState &lt;/span&gt;&lt;span&gt;메서드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출하여&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;본다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음에는&lt;/span&gt;&lt;span&gt; input&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; value &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* EventPractice.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;아무거나 입력해 보세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;인풋에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아무것이나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;입력해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;오류를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;발생시키지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제대로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;입력할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다면&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;텍스트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;담은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;누를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; comment &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;공백으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;입력한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어갔는지&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;인풋에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제대로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;반영하는지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검증해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- input &lt;/span&gt;&lt;span&gt;요소&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아래쪽에&lt;/span&gt;&lt;span&gt; button&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;클릭&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;발생하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; comment &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메시지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;박스로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;띄운&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후&lt;/span&gt;&lt;span&gt; comment &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;공백으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* EventPractice.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;아무거나 입력해 보세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;확인&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NG4xN/btsMVdMwFIY/ZsCS2odzfpvDJU8dpupB71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NG4xN/btsMVdMwFIY/ZsCS2odzfpvDJU8dpupB71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NG4xN/btsMVdMwFIY/ZsCS2odzfpvDJU8dpupB71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNG4xN%2FbtsMVdMwFIY%2FZsCS2odzfpvDJU8dpupB71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;734&quot; height=&quot;237&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- alert&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; message &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;화면에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표시하게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;했다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;임의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &quot;&lt;/span&gt;&lt;span&gt;이벤트에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행할&lt;/span&gt;&lt;span&gt; JS &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아니라&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달한다&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따라&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;처리할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링을 &lt;/span&gt;&lt;span&gt;하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;동시에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주었다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대신&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;미리&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준비하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;성능상&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;차이는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;가독성은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;훨씬&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;높다&lt;/span&gt;&lt;span&gt;.&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;/span&gt;&lt;span&gt;하지만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상황에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따라&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만드는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;편할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;앞서&lt;/span&gt;&lt;span&gt; onChange&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; onClick&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;빼내서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;임의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;기본&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방식&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;EventPractice.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;constructor&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;아무거나 입력해 보세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;확인&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;함수가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출될&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; this&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출부에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따라&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;결정되므로&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;클래스의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;임의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt; HTML &lt;/span&gt;&lt;span&gt;요소의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등록되는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;과정에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드와&lt;/span&gt;&lt;span&gt; this&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관계가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;끊어져&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버린다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때문에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;임의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등록되어도&lt;/span&gt;&lt;span&gt; this&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자신으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제대로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가리키기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위해서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드를&lt;/span&gt;&lt;span&gt; this&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바인딩&lt;/span&gt;&lt;span&gt;(binding)&lt;/span&gt;&lt;span&gt;하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필요하다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;만약&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바인딩하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경우라면&lt;/span&gt;&lt;span&gt; this&lt;/span&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt; undefined&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가리키게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; constructor &lt;/span&gt;&lt;span&gt;함수에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바인딩하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이루어지고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;Property Initializer Syntax&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;메서드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바인딩은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정석이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;하지만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방식이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불편하다고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;느낄&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;새&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;메서드를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;만들&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;마다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; constructor&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;수정해야&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;하기&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때문&lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;좀&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;간단하게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있으며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;바로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바벨의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; transform-class-properties &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;문법을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용하여&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;화살표&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정의하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;어떻게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변하는지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한번&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* EventPractice.js&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;message&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;아무거나 입력하세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;.&quot; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleChange &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;확인&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;훨씬&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;깔끔해졌다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;input &lt;/span&gt;&lt;span&gt;여러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다루기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;우리는&lt;/span&gt;&lt;span&gt; input &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배웠다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;하지만&lt;/span&gt;&lt;span&gt; input&lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;여러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;어떻게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하는가&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;-&lt;span&gt;&amp;nbsp; &lt;/span&gt;event &lt;/span&gt;&lt;span&gt;객체를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;활용하며&lt;/span&gt;&lt;span&gt;, e.target.name &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- onChange &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;핸들러에서&lt;/span&gt;&lt;span&gt; e.target.name&lt;/span&gt;&lt;span&gt;은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인풋의&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가리킨다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;지금은&lt;/span&gt;&lt;span&gt; message &lt;/span&gt;&lt;span&gt;일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;쉽게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해결할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한번&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;살펴&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드에서는&lt;/span&gt;&lt;span&gt; render &lt;/span&gt;&lt;span&gt;함수에서&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; username&lt;/span&gt;&lt;span&gt;인&lt;/span&gt;&lt;span&gt; input&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주었고&lt;/span&gt;&lt;span&gt;, state &lt;/span&gt;&lt;span&gt;쪽에도&lt;/span&gt;&lt;span&gt; username&lt;/span&gt;&lt;span&gt;이라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추가해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주었다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;그리고&lt;/span&gt;&lt;span&gt; handleChange&lt;/span&gt;&lt;span&gt;도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조금&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변경했다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;*&lt;b&gt; EventPractice.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;username: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;[e.target.name]: e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;': '&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;+ &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;username: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;username&quot; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;사용자명&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleChange &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;message&quot; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;아무거나 입력하세요&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;.&quot; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleChange &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;확인&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHCi1P/btsMWBS4oI3/Hc3a55sZulkP6p0EPTJlIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHCi1P/btsMWBS4oI3/Hc3a55sZulkP6p0EPTJlIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHCi1P/btsMWBS4oI3/Hc3a55sZulkP6p0EPTJlIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHCi1P%2FbtsMWBS4oI3%2FHc3a55sZulkP6p0EPTJlIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;722&quot; height=&quot;235&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;위에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;핵심이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* EventPractice.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;[e.target.name]: e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;객체&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;안에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; [ ]&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;감싸면&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;그&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;안에&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;넣은&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;레퍼런스가&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;가리키는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;실제&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; key &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값으로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용&lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'variantKey'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;] : &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'value'&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;};&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;결과는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;{&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'varianKey'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'value'&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;onKeyPress &lt;/span&gt;&lt;span&gt;이벤트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;핸들링&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이번에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;키를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;눌렀을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;발생하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; KeyPress &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;이벤트&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;처리하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알아보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&amp;gt; &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; onKeyPress&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; deprecated &lt;/span&gt;&lt;span&gt;되었다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;따라서&lt;/span&gt;&lt;span&gt; onKeyDown&lt;/span&gt;&lt;span&gt;으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바꿔&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- comment &lt;/span&gt;&lt;span&gt;인풋에서&lt;/span&gt;&lt;span&gt; [Enter]&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;눌렀을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; handleClick &lt;/span&gt;&lt;span&gt;메서드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출하도록&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;EventPractice.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;username: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;[e.target.name]: e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;': '&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;+ &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;username: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleKeyDown&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #c586c0;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; === &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'Enter'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;username&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;사용자명&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleChange &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;message&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;아무거나 입력하세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;.&quot; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleChange &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onKeyDown&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;handleKeyDown&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;handleClick&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;확인&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;번째&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;텍스트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인풋에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;텍스트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;입력하고&lt;/span&gt;&lt;span&gt; [Enter]&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;눌러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;. handleCLick &lt;/span&gt;&lt;span&gt;메서드가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행되었는가&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vgDRs/btsMXo6vIRb/6J5hbWKKKcXiFlIdkBcIIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vgDRs/btsMXo6vIRb/6J5hbWKKKcXiFlIdkBcIIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vgDRs/btsMXo6vIRb/6J5hbWKKKcXiFlIdkBcIIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvgDRs%2FbtsMXo6vIRb%2F6J5hbWKKKcXiFlIdkBcIIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;723&quot; height=&quot;786&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구현해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;앞&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;페이지에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트로도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;똑같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구현할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;기존&lt;/span&gt;&lt;span&gt; EventPractice &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지우고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;본다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;EventPractice.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setUsername&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; ] = &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onChangeUsername&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setUsername&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onChangeMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;': '&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setUsername&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onKeyDown&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; === &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'Enter'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;username&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;사용자명&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onChangeUsername&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;message&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;아무거나 입력해 보세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onChangeMessage&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onKeyDown&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onKeyDown&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;확인&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;기능이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이전과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작동하는가&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;위&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드에서는&lt;/span&gt;&lt;span&gt; e.target.name&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;활용하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않고&lt;/span&gt;&lt;span&gt; onChange &lt;/span&gt;&lt;span&gt;관련&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주었다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- input&lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개밖에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이런&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나쁘지는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않으나&lt;/span&gt;&lt;span&gt; input&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개수가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;많아질&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같으면&lt;/span&gt;&lt;span&gt; e.target.name&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;활용하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;좋을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이번에는&lt;/span&gt;&lt;span&gt; useState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;상태에&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;문자열이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;아닌&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;객체&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;본다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;본다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;EventPractice.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;form&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setForm&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;username: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;form&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;nextForm&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;form&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt;기존의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt; form &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt;내용을 이 자리에 복사한 뒤&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;[e.target.name]: e&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt;원하는 값을 덮어 씌우기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setForm&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;nextForm&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;': '&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setForm&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;username: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;message: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;})&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onKeyDown&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; === &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'Enter'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;이벤트 연습&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;username&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;사용자명&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;text&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;message&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;placeholder&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;아무거나 입력해 보세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onKeyDown&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onKeyDown&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;확인&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;EventPractice&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작동하는지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- e.target.name &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;활용하려면&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;위와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; useState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;쓸&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; input &lt;/span&gt;&lt;span&gt;값들이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; form &lt;/span&gt;&lt;span&gt;객체를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Javascript/React</category>
      <category>event</category>
      <category>react</category>
      <category>리액트</category>
      <category>리액트 이벤트</category>
      <category>이벤트</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/119</guid>
      <comments>https://dev1023.tistory.com/119#entry119comment</comments>
      <pubDate>Tue, 25 Mar 2025 22:07:53 +0900</pubDate>
    </item>
    <item>
      <title>[React] 리액트 state</title>
      <link>https://dev1023.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;리액트에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;내부에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바뀔&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;수&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;있는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;의미한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트가&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용되는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;과정에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;부모&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트가&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;설정하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;자신은&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;해당&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;읽기&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;전용으로만&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용&lt;/span&gt;&lt;/b&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- props&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바꾸려면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부모&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바꿔&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;줘야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;리액트에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;종류의&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;하나는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지니고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;이고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;다른&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하나는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; useState&lt;/span&gt;&lt;span&gt;라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt; state &lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트의&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;새로운&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들자&lt;/span&gt;&lt;span&gt;. Counter.js &lt;/span&gt;&lt;span&gt;파일을&lt;/span&gt;&lt;span&gt; src &lt;/span&gt;&lt;span&gt;디렉터리에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;Counter.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Counter &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;constructor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;의 초기값 설정하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 조회할 때는&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; this.state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;로 조회한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// onClick&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;을 통해 버튼이 클릭되었을 때 호출할 함수를 지정한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// this.setState&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 사용해&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;에 새로운 값을 넣을 수 있다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Counter&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;위&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;각&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;어떤&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;역할을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하는지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알아&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트에&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;설정할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;다음과&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;같이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; constructor &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;메서드를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;작성하여&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;설정&lt;/span&gt;&lt;/b&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;constructor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;의 초기값 설정하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;};&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메서드인데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;constructor&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;작성할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;반드시&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; super(props)&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;호출&lt;/span&gt;&lt;/b&gt;&lt;span&gt;해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출되면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상속받고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;리액트의&lt;/span&gt;&lt;span&gt; Component &lt;/span&gt;&lt;span&gt;클래스가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지닌&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;그다음에는&lt;/span&gt;&lt;span&gt; this.state &lt;/span&gt;&lt;span&gt;값에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초기값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주었다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;컴포넌트의&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형식이어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- &lt;/span&gt;&lt;span&gt;이제&lt;/span&gt;&lt;span&gt; render &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 조회할 때는&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; this.state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;로 조회한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// onClick&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;을 통해 버튼이 클릭되었을 때 호출할 함수를 지정한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// this.setState&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 사용해&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;에 새로운 값을 넣을 수 있다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;);&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- render &lt;/span&gt;&lt;span&gt;함수에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;현재&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;조회할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; this.state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;조회&lt;/span&gt;&lt;/b&gt;&lt;span&gt;하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;그리고&lt;/span&gt;&lt;span&gt; button &lt;/span&gt;&lt;span&gt;안에&lt;/span&gt;&lt;span&gt; onClick&lt;/span&gt;&lt;span&gt;이라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주었는데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클릭될&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출시킬&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이벤트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정한다고&lt;/span&gt;&lt;span&gt;&amp;nbsp;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이벤트로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;줄&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;화살표&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this.setState&lt;/span&gt;&lt;span&gt;라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용&lt;/span&gt;&lt;span&gt;했는데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수가&lt;/span&gt;&lt;span&gt; state &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바꿀&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;완료&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후&lt;/span&gt;&lt;span&gt; Counter &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; App&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불러와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링하도록&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;App.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Counter &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./Counter'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Counter &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;브라우저에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타났는가&lt;/span&gt;&lt;span&gt;? &lt;/span&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;눌러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자가&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;씩&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;올라갈&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;state &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;안에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;여러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- state &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;안에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;여러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; Counter &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;Counter.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Counter &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;constructor&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;의 초기값 설정하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;fixedNumber: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #899c7f;&quot;&gt;0&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;fixedNumber&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 조회할 때는&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; this.state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;로 조회한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;바뀌지 않는 값&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;fixedNumber&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// onClick&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;을 통해 버튼이 클릭되었을 때 호출할 함수를 지정한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// this.setState&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 사용해&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;에 새로운 값을 넣을 수 있다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Counter&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; state &lt;/span&gt;&lt;span&gt;안에&lt;/span&gt;&lt;span&gt; fixedNumber&lt;/span&gt;&lt;span&gt;라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;또&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다른&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추가했다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;버튼이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클릭될&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; fixedNumber &lt;/span&gt;&lt;span&gt;값은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;그대로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;두고&lt;/span&gt;&lt;span&gt; number &lt;/span&gt;&lt;span&gt;값만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바꿀&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것인데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;그렇다고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해서&lt;/span&gt;&lt;span&gt; this.setState &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인자로&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;전달되는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부에 &lt;/span&gt;&lt;span&gt;fixedNumber&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주지는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않았다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;this.setState &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;인자로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;전달된&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;개체&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;안에&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;들어&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;있는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값만&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바꾸어&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;준다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;열어서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;눌러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;맨&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트되고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하단의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;고정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;돼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; constructor&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;꺼내기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;앞에서&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초깃값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정하기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위해&lt;/span&gt;&lt;span&gt; constructor &lt;/span&gt;&lt;span&gt;메서드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;선언해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주었는데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;또&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다른&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방식으로도&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초기값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;줄&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수정한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;Counter.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Counter &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #899c7f;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;fixedNumber: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #899c7f;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;fixedNumber&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 조회할 때는&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; this.state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;로 조회한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;바뀌지 않는 값&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;fixedNumber&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// onClick&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;을 통해 버튼이 클릭되었을 때 호출할 함수를 지정한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// this.setState&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 사용해&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;에 새로운 값을 넣을 수 있다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; });&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; +1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Counter&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하면&lt;/span&gt;&lt;span&gt; constructor &lt;/span&gt;&lt;span&gt;메서드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;선언하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않고도&lt;/span&gt;&lt;span&gt; state &lt;/span&gt;&lt;span&gt;초기값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcRuF7/btsMTGaf8ot/ERtuPWIlfAQa2B0DAkzuO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcRuF7/btsMTGaf8ot/ERtuPWIlfAQa2B0DAkzuO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcRuF7/btsMTGaf8ot/ERtuPWIlfAQa2B0DAkzuO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcRuF7%2FbtsMTGaf8ot%2FERtuPWIlfAQa2B0DAkzuO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;551&quot; height=&quot;126&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;this.setState&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대신&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;this.setState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용해&lt;/span&gt;&lt;span&gt; state &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상태가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비동기적으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;만약&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; onClick&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부에서&lt;/span&gt;&lt;span&gt; this.setState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;번&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;호출하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;어떻게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;될까&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;Counter.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// onClick&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;을 통해 버튼이 클릭되었을 때 호출할 함수를 지정한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// this.setState&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를 사용해&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;에 새로운 값을 넣을 수 있다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성하면&lt;/span&gt;&lt;span&gt; this.setState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;번&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것임에도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불구하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클릭할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자가&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;씩&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;더해진다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;this.setState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용한다고&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;해서&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; state &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바뀌지는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;않기&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때문&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;위에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해결책은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this.setState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대신에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인자로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것&lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- this.setState&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인자로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;줄&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형식으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;prevState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;업데이트할 내용&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span&gt;})&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;여기서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;prevState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;기존&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;상태이고&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;, props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;현재&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;지니고&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;있는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; props&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가리킨다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;만약&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;과정에서&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필요하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생략해도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;기존&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;Counter.js&lt;/b&gt; - &lt;b&gt;button&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// onClick&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;을 통해 버튼이 클릭되었을 때 호출할 함수를 지정한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;prevState &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: prevState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;위 코드와 아래 코드는 완전히 똑같은 기능을 한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;아래 코드는 함수에서 바로 객체를 반환한다는 의미다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;prevState &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: prevState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;화살표&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;반환하고&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;싶으면&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;코드&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;블록&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; { }&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;생략&lt;/span&gt;&lt;/b&gt;&lt;span&gt;하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;파라미터&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; b&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;받아&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;와서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;합을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;싶다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- onClick&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;두&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;번째로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; this.setState &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;화살표&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;객체를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;반환하도록&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;했기&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때문에&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; prevState =&amp;gt; ({ })&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;와&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;같은&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;형태로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;코드가&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;이루어&lt;/span&gt;&lt;/b&gt;&lt;span&gt;진다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;this.setState&lt;/span&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;끝난&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- setState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;난&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;싶을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;두&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;번째&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;파라미터로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;콜백&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;(callback) &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;등록하여&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;작업을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;처리&lt;/span&gt;&lt;/b&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- onClick &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수정한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;Counter.js&lt;/b&gt; - &lt;b&gt;button&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// onClick&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;을 통해 버튼이 클릭되었을 때 호출할 함수를 지정한다&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number: &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;방금&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt; setState&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;가 호출되었습니다&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;.'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;+1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;콜백&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등록한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;뒤&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;열어서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;누르고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개발자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구의&lt;/span&gt;&lt;span&gt; [Console] &lt;/span&gt;&lt;span&gt;탭을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLoVEq/btsMVTS6uro/1KKWIx7nrutBDnDKRyiOV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLoVEq/btsMVTS6uro/1KKWIx7nrutBDnDKRyiOV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLoVEq/btsMVTS6uro/1KKWIx7nrutBDnDKRyiOV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLoVEq%2FbtsMVTS6uro%2F1KKWIx7nrutBDnDKRyiOV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;957&quot; height=&quot;411&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; useState &lt;/span&gt;&lt;span&gt;사용하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- &lt;/span&gt;&lt;/span&gt;&lt;span&gt;리액트&lt;/span&gt;&lt;span&gt; 16.8 &lt;/span&gt;&lt;span&gt;이전&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버전에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없었지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이후&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버전에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;라는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용하여&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트에서도&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용&lt;/span&gt;&lt;/b&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;되었다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Hooks&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당이라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알아보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비슷하며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;배열&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;안에&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;들어&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;있는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;쉽게&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;추출할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;수&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;있도록&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;해&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;주는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;문법&lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인하자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = [&lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;];&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;one&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;];&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;two&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;];&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- array &lt;/span&gt;&lt;span&gt;안에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; one&lt;/span&gt;&lt;span&gt;과&lt;/span&gt;&lt;span&gt; two&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;담아&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드인데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;위&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표현할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = [&lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;];&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;one&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;two&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;훨씬&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;깔끔하다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;useState &lt;/span&gt;&lt;span&gt;사용하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나면&lt;/span&gt;&lt;span&gt; useState &lt;/span&gt;&lt;span&gt;사용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;쉽게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이해할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;새&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어서&lt;/span&gt;&lt;span&gt; useState&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- src &lt;/span&gt;&lt;span&gt;디렉터리에&lt;/span&gt;&lt;span&gt; Say.js &lt;/span&gt;&lt;span&gt;파일을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* Say.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;Say&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickEnter&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;!'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickLeave&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;안녕히 가세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;!'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickEnter&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입장&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickLeave&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;퇴장&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;Say&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;useState &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;인자에는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;상태의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;초기값&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서의&lt;/span&gt;&lt;span&gt; state &lt;/span&gt;&lt;span&gt;초기값은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배웠는데&lt;/span&gt;&lt;span&gt;, useState&lt;/span&gt;&lt;span&gt;에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;반드시&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아니어도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상관없다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;값의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자유이다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;숫자일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수도&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;문자열일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수도&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;배열일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;useState( ) &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;호출하면&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;배열이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;반환되는데&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;배열의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;첫&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;번째&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;원소는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;현재&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;상태이고&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;두&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;번째&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;원소는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;상태를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바꾸어&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;주는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;세터&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;(Setter)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;라고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;그리고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자유롭게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; message&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; setMessage&lt;/span&gt;&lt;span&gt;라고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정했는데&lt;/span&gt;&lt;span&gt;, text&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; setText&lt;/span&gt;&lt;span&gt;라고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자유롭게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바꾸어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상관없다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Say &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; App&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보고&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;입장&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;버튼과&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;퇴장&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;눌러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* App.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Say &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./Say'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Say &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xFD5P/btsMVguEOc0/hAzFNiWFdU248j52QI9JK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xFD5P/btsMVguEOc0/hAzFNiWFdU248j52QI9JK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xFD5P/btsMVguEOc0/hAzFNiWFdU248j52QI9JK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxFD5P%2FbtsMVguEOc0%2FhAzFNiWFdU248j52QI9JK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;797&quot; height=&quot;226&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; useState &lt;/span&gt;&lt;span&gt;여러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;번&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- useState&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;여러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;번&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용해도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상관없다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;또&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다른&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상태를&lt;/span&gt;&lt;span&gt; useState&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관리해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* Say.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;Say&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickEnter&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;!'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickLeave&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setMessage&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;안녕히 가세요&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;!'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'black'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickEnter&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입장&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;onClickLeave&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;퇴장&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;color: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'red'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'red'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;빨간색&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;color: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;초록색&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;color: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'blue'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;setColor&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'blue'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;파란색&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;Say&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장하고&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;입장&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;눌러서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;텍스트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;띄워&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;그리고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;색상이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표시되어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버튼을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;눌러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;텍스트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;색상이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바뀌는가&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVTVK5/btsMVTr1WM9/nNZNL6HkK4I7p2EDvXdoe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVTVK5/btsMVTr1WM9/nNZNL6HkK4I7p2EDvXdoe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVTVK5/btsMVTr1WM9/nNZNL6HkK4I7p2EDvXdoe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVTVK5%2FbtsMVTr1WM9%2FnNZNL6HkK4I7p2EDvXdoe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;383&quot; height=&quot;214&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;state &lt;/span&gt;&lt;span&gt;사용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주의사항&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트든&lt;/span&gt;&lt;span&gt; state&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주의해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사항이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;state &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바꾸어야&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; setState &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;혹은&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; useState&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;통해&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;전달받은&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;세터&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용&lt;/span&gt;&lt;/b&gt;&lt;span&gt;해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘못된&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;클래스형 컴포넌트에서&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;함수 컴포넌트에서&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;setObject&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;a: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;b: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;배열이나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경우에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;어떻게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할까&lt;/span&gt;&lt;span&gt;? &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이런&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상황에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;배열이나&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;객체&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사본을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;만들고&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;그&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사본에&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;업데이트한&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;후&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;그&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사본의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;상태를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; setState &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;혹은&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;세터&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;함수를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;통해&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;업데이트&lt;/span&gt;&lt;/b&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;사본을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들어서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업데이트하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;예시는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;객체 다루기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;a: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;b: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;c: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;nextObject&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = { ...&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;b: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;사본을 만들어서&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; b &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;값만 덮어 쓰기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;// &lt;/span&gt;&lt;span&gt;배열 다루기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = [&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;id: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value : &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; },&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;id: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value : &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; },&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;id: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value : &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; },&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;let &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;nextArray&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;concat&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;id: &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}); &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;새 항목 추가&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;nextArray&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;item &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; !== &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;); &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// id&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;가&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;인 항목 제거&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;nextArray&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;item &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; === &lt;/span&gt;&lt;span style=&quot;color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; ? { ...&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;value: &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } : &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;)); &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// id&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;가&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;인 항목의&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;로 설정&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;객체에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대한사본을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; spread &lt;/span&gt;&lt;span&gt;연산자라&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불리는&lt;/span&gt;&lt;span&gt; ...&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;처리하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;배열에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사본을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내장&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수들을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;활용한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Javascript/React</category>
      <category>react</category>
      <category>state</category>
      <category>useState</category>
      <category>리액트</category>
      <category>배열 비구조화 할당</category>
      <category>클래스형 state</category>
      <category>함수형 state</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/118</guid>
      <comments>https://dev1023.tistory.com/118#entry118comment</comments>
      <pubDate>Mon, 24 Mar 2025 21:37:34 +0900</pubDate>
    </item>
    <item>
      <title>[React] 리액트 props</title>
      <link>https://dev1023.tistory.com/117</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;Props&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- props&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; properties&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;줄인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표현으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;속성을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;설정할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사용하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;요소&lt;/span&gt;&lt;/b&gt;&lt;span&gt;다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- props &lt;/span&gt;&lt;span&gt;값은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불러와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부모&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;JSX &lt;/span&gt;&lt;span&gt;내부에서&lt;/span&gt;&lt;span&gt; props &lt;/span&gt;&lt;span&gt;렌더링&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- MyComponent&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;이라는&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링하도록&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- props &lt;/span&gt;&lt;span&gt;값은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파라미터로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;받아&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;와서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- props&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt;&amp;nbsp;JSX &lt;/span&gt;&lt;span&gt;내부에서&lt;/span&gt;&lt;span&gt; { } &lt;/span&gt;&lt;span&gt;기호로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;감싸&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* src/MyComponent.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;props &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;컴포넌트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시&lt;/span&gt;&lt;span&gt; props &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- App &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; MyComponent&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; props &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* App.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./MyComponent'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;React&quot; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7dclW/btsMKcMCctW/LV1pZXrqsHiDIVWUz6AgCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7dclW/btsMKcMCctW/LV1pZXrqsHiDIVWUz6AgCk/img.png&quot; data-alt=&quot;결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7dclW/btsMKcMCctW/LV1pZXrqsHiDIVWUz6AgCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7dclW%2FbtsMKcMCctW%2FLV1pZXrqsHiDIVWUz6AgCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;384&quot; height=&quot;158&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;props &lt;/span&gt;&lt;span&gt;기본값&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;span&gt;: defaultProps&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- props &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않았을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;줄&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기본&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하는&lt;/span&gt;&lt;span&gt; defaultProps&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알아&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;App.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;MyComponent&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./MyComponent'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;* MyComponent.js&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;태그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사이의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내용을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보여주는&lt;/span&gt;&lt;span&gt; children&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 리액트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;컴포넌트&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;태그&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;사이의&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;내용을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;보여&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;주는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;가&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;있는데&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;바로&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; children&lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;App.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./MyComponent'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;리액트&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;위&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드에서&lt;/span&gt;&lt;span&gt; MyComponent &lt;/span&gt;&lt;span&gt;태그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사이에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;리액트라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문자열을&lt;/span&gt;&lt;span&gt; MyComponent &lt;/span&gt;&lt;span&gt;내부에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주려면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;props.children &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;children &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;값은 &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTQkeZ/btsMKuM21FX/nkneY6MhsC02vPr8Sc1qRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTQkeZ/btsMKuM21FX/nkneY6MhsC02vPr8Sc1qRK/img.png&quot; data-alt=&quot;children 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTQkeZ/btsMKuM21FX/nkneY6MhsC02vPr8Sc1qRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTQkeZ%2FbtsMKuM21FX%2FnkneY6MhsC02vPr8Sc1qRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;357&quot; height=&quot;198&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;children 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통해&lt;/span&gt;&lt;span&gt; props &lt;/span&gt;&lt;span&gt;내부&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추출하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- MyComponent&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;props &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;값을&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;조회할&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;때마다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; props.name, props.children&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;과&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;같이&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; props. &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;이라는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;키워드를&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;앞에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;붙여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이러한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;편하게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위해&lt;/span&gt;&lt;span&gt; ES6&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추출하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알아본다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; children &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;값은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성하면&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;값과&lt;/span&gt;&lt;span&gt; children &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;짧은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;방금&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용한&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;객&lt;b&gt;체에서&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추출하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할당&lt;/span&gt;&lt;span&gt;(destructing assignment)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이라고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부른다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;분해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문법이라고도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불리며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;함수의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파라미터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부분에서도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;만약&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파라미터가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체라면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;바로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비구조화해서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; children &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;값은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; };&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;propTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통한&lt;/span&gt;&lt;span&gt; props&amp;nbsp;&lt;/span&gt;&lt;span&gt;검증&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;컴포넌트의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span&gt;필수&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정하거나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;props&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;타입&lt;/span&gt;&lt;span&gt;(type)&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정&lt;/span&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; propTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt;사용&lt;/b&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;컴포넌트의&lt;/span&gt;&lt;span&gt; propTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법은&lt;/span&gt;&lt;span&gt; defaultProp&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비슷하다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;우선&lt;/span&gt;&lt;span&gt; propTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하려면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상단에&lt;/span&gt;&lt;span&gt; import &lt;/span&gt;&lt;span&gt;구문을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불러와야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00; color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;PropTypes &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'prop-types'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = ({&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;( ... )&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- PropTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불러왔다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하단에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;입력해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;PropTypes &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'prop-types'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = ({&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; children &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;값은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;propTypes&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name: PropTypes&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;string&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주면&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;값은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무조건&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문자열&lt;/span&gt;&lt;span&gt;(string) &lt;/span&gt;&lt;span&gt;형태로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;의미한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- App &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문자열이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아닌&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;뒤&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개발자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구의&lt;/span&gt;&lt;span&gt; Console &lt;/span&gt;&lt;span&gt;탭을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;본다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;App.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./MyComponent'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #899c7f;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;리액트&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;만약&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정한&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt; propTypes&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;일치하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않는다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개발자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구의&lt;/span&gt;&lt;span&gt; Console &lt;/span&gt;&lt;span&gt;탭에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;결과가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타난다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7UKjh/btsMIDrln6R/1KiMyBukz8LS93k2HAsg8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7UKjh/btsMIDrln6R/1KiMyBukz8LS93k2HAsg8K/img.png&quot; data-alt=&quot;타입이 일치하지 않은 props&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7UKjh/btsMIDrln6R/1KiMyBukz8LS93k2HAsg8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7UKjh%2FbtsMIDrln6R%2F1KiMyBukz8LS93k2HAsg8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1148&quot; height=&quot;358&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;타입이 일치하지 않은 props&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- &lt;/span&gt;&lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타나기는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;했지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;콘솔에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메시지를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;출력하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개발자에게&lt;/span&gt;&lt;span&gt; propTypes&lt;/span&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘못되었다는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알려&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;오류&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메시지를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인했다면&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제대로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;App.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./MyComponent'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;&quot;React&quot;&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;리액트&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;isRequired&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필수&lt;/span&gt;&lt;span&gt; propTypes &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- propTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않았을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메시지를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;띄워&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해보자&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;propTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;뒤에&lt;/span&gt;&lt;span&gt; isRequired&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;붙여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이번에는&lt;/span&gt;&lt;span&gt; favoriteNumber&lt;/span&gt;&lt;span&gt;라는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필수&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;PropTypes &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'prop-types'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = ({&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;favoriteNumber&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;}) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; children &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;값은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;제가 좋아하는 숫자는 &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;favoriteNumber&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;propTypes&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: PropTypes&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;favoriteNumber: PropTypes&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;isRequired&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다시&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개발자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구의&lt;/span&gt;&lt;span&gt; Console&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;아직&lt;/span&gt;&lt;span&gt; favoriteNumber&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않았기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때문에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경고가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타날&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czQX3s/btsMKttQsKS/vYNeSYKzvICY81FgHMTz2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czQX3s/btsMKttQsKS/vYNeSYKzvICY81FgHMTz2K/img.png&quot; data-alt=&quot;필수 값 누락 시 발생하는 경고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czQX3s/btsMKttQsKS/vYNeSYKzvICY81FgHMTz2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczQX3s%2FbtsMKttQsKS%2FvYNeSYKzvICY81FgHMTz2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1232&quot; height=&quot;222&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;필수 값 누락 시 발생하는 경고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;경고를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인했다면&lt;/span&gt;&lt;span&gt; MyComponent&lt;/span&gt;&lt;span&gt;에게&lt;/span&gt;&lt;span&gt; favoriteNumber &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제대로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전달해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;App.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'./MyComponent'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = () &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;&quot;React&quot; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;favortieNumber&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #899c7f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;리액트&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;많은&lt;/span&gt;&lt;span&gt; PropTypes &lt;/span&gt;&lt;span&gt;종류&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- PropTypes&lt;/span&gt;&lt;span&gt;에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;여러&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;종류를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #d8d8d8; width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;종류&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #d8d8d8; width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;설명&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;array&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;배열&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;arrayOf(&lt;/span&gt;&lt;span&gt;다른&lt;/span&gt;&lt;span&gt; PropType)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt; PropType&lt;/span&gt;&lt;span&gt;으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이루어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;의미한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;예를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;들어&lt;/span&gt;&lt;span&gt; arrayOf(PropTypes.number)&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;숫자로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이루어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;true &lt;/span&gt;&lt;span&gt;혹은&lt;/span&gt;&lt;span&gt; false &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;func &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;함수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;number &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;숫자&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;object &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;객체&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;string &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;문자열&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;symbol &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;ES6&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; Symbol&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;node&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;렌더링할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;숫자&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;문자열&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;혹은&lt;/span&gt;&lt;span&gt; JSX &lt;/span&gt;&lt;span&gt;코드&lt;/span&gt;&lt;span&gt;. children&lt;/span&gt;&lt;span&gt;도&lt;/span&gt;&lt;span&gt; note PropType&lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;instanceOf(&lt;/span&gt;&lt;span&gt;클래스&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클래스의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인스턴스&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;예&lt;/span&gt;&lt;span&gt;: instanceOf(MyClass))&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;oneOf(['dog', 'cat'])&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;주어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;요소&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하나&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;oneOfType([React.PropTypes.string, PropTypes.number])&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;주어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;안의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;종류&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하나&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;objectOf(React.PropTypes.number)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;객체의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;키&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인자로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어진&lt;/span&gt;&lt;span&gt; PropType&lt;/span&gt;&lt;span&gt;인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;shape({ name: PropTypes.string, num: PropTypes.number})&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;주어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 51.6279%;&quot;&gt;&lt;span&gt;&lt;span&gt;any&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2558%;&quot;&gt;&lt;span&gt;&lt;span&gt;아무&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;종류&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자세한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정보는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/facebook/prop-types&quot;&gt;https://github.com/facebook/prop-types&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;확인할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; props &lt;/span&gt;&lt;span&gt;사용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; props&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; render &lt;/span&gt;&lt;span&gt;함수에서&lt;/span&gt;&lt;span&gt; this.props&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조회하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;그리고&lt;/span&gt;&lt;span&gt; defaultProps&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; propTypes&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;똑같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방식으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- MyComponent&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변환해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보자&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;PropTypes &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'prop-types'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;favoriteNumber&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #6a9955;&quot;&gt;비구조화 할당&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;children &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;값은 &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;제일 좋아하는 숫자는 &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;favoriteNumber&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;propTypes&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;name: PropTypes&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;favoriteNumber: PropTypes&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;isRequired&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;클래스형&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서&lt;/span&gt;&lt;span&gt; defaultProps&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; propTypes&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;내부에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;지정하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;방법&lt;/span&gt;&lt;span&gt;도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;b&gt;MyComponent.js&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'react'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import &lt;/span&gt;&lt;span style=&quot;color: #72a1ba;&quot;&gt;PropTypes &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from &lt;/span&gt;&lt;span style=&quot;color: #cb8f76;&quot;&gt;'prop-types'&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;Component&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;static &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;defaultProps&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name: &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;기본 이름&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #cb8f76;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #569cd6;&quot;&gt;static &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;propTypes&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;name: PropTypes&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;favoriteNumber: PropTypes&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #4ab4ee;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #72a1ba;&quot;&gt;isRequired&lt;/span&gt;&lt;span style=&quot;background-color: #ffff00; color: #979797;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background-color: #ffff00;&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #989875;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;favoriteNumber&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; } = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;비구조화 할당&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt; (&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;안녕하세요&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제 이름은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; children &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;값은 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;br &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;제일 좋아하는 숫자는 &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #4ab4ee;&quot;&gt;favoriteNumber&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;입니다&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;export default &lt;/span&gt;&lt;span style=&quot;color: #47b7a0;&quot;&gt;MyComponent&lt;/span&gt;&lt;span style=&quot;color: #979797;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;</description>
      <category>Javascript/React</category>
      <category>children</category>
      <category>defaultProps</category>
      <category>isrequired</category>
      <category>PROPS</category>
      <category>propTypes</category>
      <category>react</category>
      <category>리액트</category>
      <category>비구조화 할당</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/117</guid>
      <comments>https://dev1023.tistory.com/117#entry117comment</comments>
      <pubDate>Thu, 13 Mar 2025 21:27:42 +0900</pubDate>
    </item>
    <item>
      <title>[React] 스타일링</title>
      <link>https://dev1023.tistory.com/116</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;인라인 스타일링&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;리액트에서&lt;/span&gt;&lt;span&gt; DOM &lt;/span&gt;&lt;span&gt;요소에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스타일을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;적용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문자열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아니라&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;객체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;형태로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;스타일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중에서&lt;/span&gt;&lt;span&gt; background-color &lt;/span&gt;&lt;span&gt;처럼&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;문자가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;포함되는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는데&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이러한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름은&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제거하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;카멜&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표기법으로&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;작성해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;. (backgroundColor)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1741264645680&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';

function App() {
    const name = '리액트';
    const style = {
        backgroundColor : 'black',
        color : 'aqua',
        fontSize: '48px',       // font-size -&amp;gt; fontSize
        fontWeight: 'bold',     // font-weight -&amp;gt; fontWeight
        padding: 16             // 단위 생략 시 px로 지정된다.
    };
    return &amp;lt;div style={style}&amp;gt;{name}&amp;lt;/div&amp;gt;;
}
export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 위는 style 객체를 미리 선언하고 div의 style 값으로 지정했는데, 미리 선언하지 않고 바로 style 값을 지정하고 싶다면 다음과 같이 작성하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #979797;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1741264727429&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';
function App() {
    const name = '리액트';
    return &amp;lt;div style={{
        backgroundColor : 'black',
        color : 'aqua',
        fontSize: '48px',
        fontWeight: 'bold',
        padding: 16
    }}&amp;gt;{name}&amp;lt;/div&amp;gt;;
}
export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwVrqc/btsMB8ktgeo/fsGNNcEGEvrklXMGtsZyi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwVrqc/btsMB8ktgeo/fsGNNcEGEvrklXMGtsZyi1/img.png&quot; data-alt=&quot;스타일링 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwVrqc/btsMB8ktgeo/fsGNNcEGEvrklXMGtsZyi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwVrqc%2FbtsMB8ktgeo%2FfsGNNcEGEvrklXMGtsZyi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;399&quot; height=&quot;111&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스타일링 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;className&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;일반&lt;/span&gt;&lt;span&gt; HTML&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; CSS &lt;/span&gt;&lt;span&gt;클래스를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; &amp;lt;div class=&quot;myclass&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;라는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;속성을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;하지만&lt;/span&gt;&lt;span&gt; JSX&lt;/span&gt;&lt;span&gt;에서는&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아닌&lt;/span&gt;&lt;span&gt; className&lt;/span&gt;&lt;span&gt;으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- JSX&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; CSS &lt;/span&gt;&lt;span&gt;클래스를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;과정에서&lt;/span&gt;&lt;span&gt; className&lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아닌&lt;/span&gt;&lt;span&gt; class &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정해도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스타일이&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;적용되기는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;그러나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;그렇게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;브라우저&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개발자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구의&lt;/span&gt;&lt;span&gt; Console &lt;/span&gt;&lt;span&gt;탭에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경고가&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;나타난다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTZIZ3/btsMF2o9KY3/H0xqUnPQKfEJpZ6i7xoj4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTZIZ3/btsMF2o9KY3/H0xqUnPQKfEJpZ6i7xoj4K/img.png&quot; data-alt=&quot;class 사용 시 나타나는 경고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTZIZ3/btsMF2o9KY3/H0xqUnPQKfEJpZ6i7xoj4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTZIZ3%2FbtsMF2o9KY3%2FH0xqUnPQKfEJpZ6i7xoj4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;72&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;class 사용 시 나타나는 경고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;이전에는&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt; CSS &lt;/span&gt;&lt;span&gt;클래스를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;오류가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;발생하고&lt;/span&gt;&lt;span&gt; CSS &lt;/span&gt;&lt;span&gt;클래스가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;적용되지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않았는데&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;리액트&lt;/span&gt;&lt;span&gt; v16 &lt;/span&gt;&lt;span&gt;이상부터는&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; classname&lt;/span&gt;&lt;span&gt;으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변환시켜&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경고를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;띄운다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Javascript/React</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/116</guid>
      <comments>https://dev1023.tistory.com/116#entry116comment</comments>
      <pubDate>Thu, 6 Mar 2025 21:39:29 +0900</pubDate>
    </item>
    <item>
      <title>[React] undefined 렌더링하지 않기</title>
      <link>https://dev1023.tistory.com/115</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;리액트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴포넌트에서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함수에서&lt;/span&gt;&lt;span&gt; undefined&lt;/span&gt;&lt;span&gt;만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;반환하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상황을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;안&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;오류를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;발생시킨다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1741264380753&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';

function App() {
  const name = undefined;
  return name;
}
export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0uoFR/btsMC1ZrT1I/UIt2uMNESOqYGFIKh8Y8D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0uoFR/btsMC1ZrT1I/UIt2uMNESOqYGFIKh8Y8D1/img.png&quot; data-alt=&quot;위 코드의 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0uoFR/btsMC1ZrT1I/UIt2uMNESOqYGFIKh8Y8D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0uoFR%2FbtsMC1ZrT1I%2FUIt2uMNESOqYGFIKh8Y8D1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1012&quot; height=&quot;168&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 코드의 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;어떤&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; undefined &lt;/span&gt;&lt;span&gt;일수도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다면&lt;/span&gt;&lt;span&gt;, OR( || )&lt;/span&gt;&lt;span&gt;연산자를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span&gt;해당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; undefined&lt;/span&gt;&lt;span&gt;일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt;지정&lt;/b&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있으므로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;간단하게 &lt;/span&gt;&lt;span&gt;오류를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방지할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1741264433103&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';

function App() {
  const name = undefined;
  return name || '값이 undefined입니다.';
}

export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;반면&lt;/span&gt;&lt;span&gt; JSX &lt;/span&gt;&lt;span&gt;내부에서&lt;/span&gt;&lt;span&gt; undefined&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;괜찮다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1741264472506&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';

function App() {
  const name = undefined;
  return &amp;lt;div&amp;gt;{name}&amp;lt;/div&amp;gt;;
}
export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- name &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; undefined&lt;/span&gt;&lt;span&gt;일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보여주고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;싶은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문구가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성하며&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1741264528067&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';

function App() {
  const name = undefined;
  return &amp;lt;div&amp;gt;{name || '리액트'}&amp;lt;/div&amp;gt;;
}
export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;128&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEx3iE/btsMDtgP6Mo/OoiaCsx1KsxIBh40J23Yr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEx3iE/btsMDtgP6Mo/OoiaCsx1KsxIBh40J23Yr0/img.png&quot; data-alt=&quot;위 코드의 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEx3iE/btsMDtgP6Mo/OoiaCsx1KsxIBh40J23Yr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEx3iE%2FbtsMDtgP6Mo%2FOoiaCsx1KsxIBh40J23Yr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;128&quot; height=&quot;69&quot; data-origin-width=&quot;128&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 코드의 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Javascript/React</category>
      <category>react</category>
      <category>undefined 렌더링</category>
      <category>리액트</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/115</guid>
      <comments>https://dev1023.tistory.com/115#entry115comment</comments>
      <pubDate>Thu, 6 Mar 2025 21:36:10 +0900</pubDate>
    </item>
    <item>
      <title>[React] 조건부 연산자</title>
      <link>https://dev1023.tistory.com/114</link>
      <description>&lt;p style=&quot;color: #6a9955;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- JSX 내부의 JS 표현식에서 if문을 사용할 수는 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a9955;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 히지만 조건에 따라 다른 내용을 렌더링해야 할 때는 JSX 밖에서 if문을 사용하여 사전에 값을 설정하거나, &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;{ } &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;안에&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;조건부&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;연산자를&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사용하면&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;된다&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a9955;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 조건부 연산자의 또 다른 이름은 삼항 연산자이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a9955;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1741264104240&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function App() {
  const name = '리액트';
  
  return (
    &amp;lt;div&amp;gt;
        {name === '리액트'?(
            &amp;lt;h1&amp;gt;리액트입니다.&amp;lt;/h1&amp;gt;
        ) : (
            &amp;lt;h2&amp;gt;리액트가 아닙니다.&amp;lt;/h2&amp;gt;
        )}
    &amp;lt;/div&amp;gt;
  );
}

export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- name 변수의 값이 '리액트' 인 경우에는 '리액트입니다.' 를 화면에 출력하고, name 변수의 값이 '리액트'가 아닌 경우 '리액트가 아닙니다.' 를 화면에 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #6a9955;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 특정 조건을 만족할 때 내용을 보여주고, 만족하지 않을 때 아예 아무것도 렌더링 하지 않아야 하는&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;상황이 올 수 있다. &lt;br /&gt;이럴 때도 조건부 연산자를 통해 구현할 수&amp;nbsp;있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a9955;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1741264264610&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';

function App() {
  const name = '뤼왝트';
  return (
    &amp;lt;div&amp;gt;
        {name === '리액트'?&amp;lt;h1&amp;gt;리액트입니다.&amp;lt;/h1&amp;gt;:null}
    &amp;lt;/div&amp;gt;
  );
}
export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span&gt;null&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아무것도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않는다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;위보다&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;짧은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;코드로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;똑같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;연산자를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용해서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조건부&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;렌더링을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1741264320225&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import './App.css';

function App() {
  const name = '뤼왝트';
  return (
    &amp;lt;div&amp;gt;
        {name === '리액트' &amp;amp;&amp;amp; &amp;lt;h1&amp;gt;리액트입니다.&amp;lt;/h1&amp;gt;}
    &amp;lt;/div&amp;gt;
  );
}
export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;연산자로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조건부&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이유는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;리액트에서&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;렌더링할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt; null&lt;/span&gt;&lt;span&gt;과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;마찬가지로 &lt;/span&gt;&lt;span&gt;아무것도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타나지&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;span&gt;않기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때문이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Javascript/React</category>
      <category>react</category>
      <category>리액트</category>
      <category>조건부 렌더링</category>
      <category>조건부 연산자</category>
      <author>dev-in-daily-life</author>
      <guid isPermaLink="true">https://dev1023.tistory.com/114</guid>
      <comments>https://dev1023.tistory.com/114#entry114comment</comments>
      <pubDate>Thu, 6 Mar 2025 21:29:59 +0900</pubDate>
    </item>
  </channel>
</rss>