Skip to content

Commit 15c1449

Browse files
committed
docs: 제어 컴포넌트와 비제어 컴포넌트 문서 작성
1 parent 74cb13f commit 15c1449

File tree

3 files changed

+99
-7
lines changed

3 files changed

+99
-7
lines changed

_posts/2024-01-06-dynamic-programming.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Algorithm</p></blockquote>
2626
- **메모이제이션(Memoization)**
2727
- **메모이제이션(Memoization)** 이란 함수의 결과를 저장하는 장소를 마련해 두고, 한 번 계산한 값을 저장해 두었다가 재활용하는 최적화 기법을 말한다.
2828
- 메모이제이션은 **참조적 투명 함수(Referential transparent function)** 의 경우에만 적용할 수 있다.
29-
> **참조적 투명성(Referential transparency)**: 함수의 반환 값이 입력 값만으로 결정되는지의 여부를 말한다.
29+
> **참조적 투명성(Referential transparency)**: 함수의 반환 값이 입력값만으로 결정되는지의 여부를 말한다.
3030
> **참조적 투명 함수(Referential transparent function)**: 입력이 고정되어 있을 때 그 결과가 항상 같은 함수들을 말한다.
3131
- **Time Complexity**
3232
- 동적 계획법의 시간 복잡도는 다음 식을 계산하여 간단하게 계산할 수 있다. 단, 아래 식은 수행 시간의 상한을 간단히 계산할 수 있는 방법일 뿐이며, 항상 정확하지는 않는다는 점을 주의할 것.

_posts/2024-07-24-challenge-day8.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ comments: true
5151

5252
### 순수 함수(Pure Function)
5353

54-
순수 함수는 입력 값이 동일하면 결과가 동일하게 리턴되는 수학 함수와 마찬가지로 함수형 프로그래밍 언어에서는 함수를 `순수 함수`라고 말한다. 순수 함수는 부수 효과를 제거한 함수에 해당합니다.
54+
순수 함수는 입력값이 동일하면 결과가 동일하게 리턴되는 수학 함수와 마찬가지로 함수형 프로그래밍 언어에서는 함수를 `순수 함수`라고 말한다. 순수 함수는 부수 효과를 제거한 함수에 해당합니다.
5555

5656
- Memory or I/O의 관점에서 Side Effect가 없는 함수
5757
- 함수의 실행이 외부에 영향을 끼치지 않는 함수
@@ -64,7 +64,7 @@ comments: true
6464

6565
참조 투명성이란 컴퓨터 프로그램의 특성 중 하나로, 프로그램 동작의 변경없이 관련 값을 대채할 수 있다면 표현식을 참조 상 투명하다고 말할 수 있다. 즉, 프로그램의 행동에 영향을 받지 않고 직접적인 값으로 대체 가능한 것을 말한다.
6666

67-
순수 함수로 만들면 함수 외부의 값이나 객체를 참조할 때 의존적으로 동작하지 않기 때문에 참조 투명성을 가지고 부작용이 없다. 반대로 말하면 부작용이 있는 함수는 입력 값이 동일해도 함수 외부의 값에 따라서 다른 값이 리턴된다.
67+
순수 함수로 만들면 함수 외부의 값이나 객체를 참조할 때 의존적으로 동작하지 않기 때문에 참조 투명성을 가지고 부작용이 없다. 반대로 말하면 부작용이 있는 함수는 입력값이 동일해도 함수 외부의 값에 따라서 다른 값이 리턴된다.
6868

6969
### 불변성
7070

_posts/2025-03-04-controlled-and-uncontrolled-component.md

Lines changed: 96 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: 제어 컴포넌트(Controlled Component)와 비제어 컴포넌트(Uncontrolled Component)
2+
title: 제어 컴포넌트 vs 비제어 컴포넌트
33
description: 제어 컴포넌트(Controlled Component)와 비제어 컴포넌트(Uncontrolled Component)에 대해 정리한 페이지입니다.
44
date: 2025-03-04 23:28:00 +/-TTTT
55
categories: [Front-end]
@@ -21,15 +21,106 @@ Front-end, React, TypeScript</p></blockquote>
2121

2222
## 제어 컴포넌트 (Controlled Component)
2323

24-
`제어 컴포넌트(Controlled Component)`는 폼 입력 요소의 값이 <b>React의 `상태(State)`에 의해 제어</b>되는 컴포넌트입니다.
24+
### 개념
25+
26+
`제어 컴포넌트(Controlled Component)`는 폼 입력 요소의 값이 <b>React의 `상태(State)`에 의해 제어</b>되는 컴포넌트입니다. 입력값에 따른 실시간 피드백(Ex. 검색어 자동 완성), 조건부 렌더링, 유효성 검사가 필요한 경우 사용하는 것이 좋습니다.
27+
28+
### 동작 방식
29+
30+
제어 컴포넌트는 사용자 입력이 발생할 때마다 `onChange` 이벤트 핸들러를 통해 상태를 업데이트합니다. 입력값은 항상 React 상태와 동기화되며, `value` prop으로 직접 할당됩니다.
31+
32+
### 장점
33+
34+
- `실시간 유효성 검증`
35+
36+
사용자 입력마다 상태가 업데이트되므로 실시간으로 유효성 검증이 가능합니다.
37+
38+
- `중앙 집중식 관리`
39+
40+
모든 데이터가 React 상태로 관리되어 예측 가능합니다.
41+
42+
### 단점
43+
44+
- `잦은 리렌더링`
45+
46+
매 입력마다 리렌더링이 발생할 수 있어 성능 저하가 발생할 수 있습니다.
47+
48+
<blockquote class="prompt-tip"><p><strong><u>Tips</u></strong><br>
49+
폼 입력값이 변경될 때마다 불필요한 리렌더링, 잦은 API 요청이 일어날 수 있으므로 Debounce나 Throttle 같은 방법을 사용하는 것이 좋습니다.</p></blockquote>
50+
51+
### 예시
52+
53+
```tsx
54+
import { useState } from "react";
55+
56+
const ControlledComponent = () => {
57+
const [value, setValue] = useState("");
58+
59+
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
60+
setValue(e.target.value);
61+
};
62+
63+
return <input type="text" value={value} onChange={handleChange} />;
64+
};
65+
66+
export default ControlledComponent;
67+
```
2568

2669
## 비제어 컴포넌트 (Uncontrolled Component)
2770

28-
`비제어 컴포넌트(Uncontrolled Component)`는 폼 입력 요소의 값이 React 상태가 아닌 <b>DOM 자체에서 관리</b>되는 컴포넌트입니다.
71+
### 개념
72+
73+
`비제어 컴포넌트(Uncontrolled Component)`는 폼 입력 요소의 값이 React 상태가 아닌 <b>DOM 내부에서 자체적으로 관리</b>되는 컴포넌트입니다. 대규모 폼에서 성능 최적화가 필요하거나, 파일 입력, 또는 서드파티 라이브러리와의 통합이 필요한 경우 사용하는 것이 좋습니다.
74+
75+
### 동작 방식
76+
77+
비제어 컴포넌트는 `ref`를 사용해 DOM 요소에 직접 접근하여 값을 가져옵니다. 초기 값은 `defaultValue``defaultChecked`로 설정합니다.
78+
79+
### 장점
80+
81+
- `성능 최적화`
82+
83+
폼 입력 요소의 값이 변경되더다도 리렌더링이 발생하지 않아 대규모 폼에 적합합니다.
84+
85+
- `간결성`
86+
87+
간단한 폼에서 코드량이 줄어듭니다.
88+
89+
### 단점
90+
91+
- `폼 입력 요소 값 추적`
92+
93+
실시간 유효성 검증이 어렵고, 값 추적이 제한적입니다.
94+
95+
### 예시
96+
97+
```tsx
98+
import { useRef } from "react";
99+
100+
const UncontrolledComponent = () => {
101+
const inputRef = useRef<HTMLInputElement>(null);
102+
103+
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
104+
e.preventDefault();
105+
if (inputRef.current) {
106+
console.log(inputRef.current.value);
107+
}
108+
};
109+
110+
return (
111+
<form onSubmit={handleSubmit}>
112+
<input type="text" defaultValue="" ref={inputRef} />
113+
<button type="submit">Submit</button>
114+
</form>
115+
);
116+
};
117+
118+
export default UncontrolledComponent;
119+
```
29120

30121
## 차이점 비교
31122

32-
제어 컴포넌트와 비제어 컴포넌트의 차이점을 표로 요약하면 다음과 같습니다.
123+
<b>제어 컴포넌트와 비제어 컴포넌트는 주로 폼 데이터를 어떻게 관리하느냐에 따라 구분됩니다.</b> 제어 컴포넌트와 비제어 컴포넌트의 차이점을 표로 요약하면 다음과 같습니다.
33124

34125
| 특징 | 제어 컴포넌트 | 비제어 컴포넌트 |
35126
| ------------- | ----------------------------- | ---------------------------------------- |
@@ -44,3 +135,4 @@ Front-end, React, TypeScript</p></blockquote>
44135
- <a href="https://ko.legacy.reactjs.org/docs/forms.html#controlled-components" target="_blank">제어 컴포넌트 (Controlled Component)</a>
45136
- <a href="https://ko.legacy.reactjs.org/docs/uncontrolled-components.html" target="_blank">비제어 컴포넌트 - React</a>
46137
- <a href="https://ko.react.dev/learn/sharing-state-between-components#controlled-and-uncontrolled-components" target="_blank">컴포넌트 간 State 공유하기 – React</a>
138+
- <a href="https://goshacmd.com/controlled-vs-uncontrolled-inputs-react/" target="_blank">Controlled and uncontrolled form inputs in React don't have to be complicated</a>

0 commit comments

Comments
 (0)