๐ ์ฐํ ์ฝ 7๊ธฐ ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ ํ๊ณ
๐ ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ๋ฅผ ํตํด์ ๋ฐฐ์ ๋ ์
ํ๋ฆฌ์ฝ์ค๋ฅผ ์งํํ๋ฉด์ ์ด๊ธฐ์ ์ค์ ํ๋ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ณ , ๋ ๋์๊ฐ ์์ํ๋ ๊ฒ๋ณด๋ค ๋ง์ ์ฑ์ฅ์ ์ด๋ฃฐ ์ ์์์ต๋๋ค. 1์ฃผ์ฐจ ๊ณผ์ ๋ฅผ ํตํ์ฌ ๋ง์ ๋ถ์กฑํ ๋ถ๋ถ๋ค์ ์ฑ์ฐ๊ณ ์ ์ค์ค๋ก ๋ ํ๋ฅญํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์๋ ํฐ ๊ฒฝํ์ด ๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค.
1์ฃผ์ฐจ 'Calculator' ๊ณผ์ ์์๋ MVC ํจํด์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํด View, Model, Controller๋ก ๊ฐ ์ญํ ์ ๋ง์ถฐ์ ๋๋์ง ์๊ณ , ๊ฐ ์ญํ ๋๋ก ์ชผ๊ฐ๋ ค๊ณ ๋ ธ๋ ฅ์ ํ์์๋ ๋ถ๊ตฌํ๊ณ , ํ๋์ ํด๋์ค์ ์ฌ๋ฌ ์ญํ ์ ์ฒ๋ฆฌ๋ฅผ ํ ๋ถ๋ถ์ด ์์์ต๋๋ค. ํ์ง๋ง 1์ฃผ์ฐจ ๊ณผ์ ์ PR์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ํตํ์ฌ ๋ค๋ฅธ ์ฐธ๊ฐ์๋ค์ ์ฝ๋ ๋ฆฌ๋ทฐ์ ํผ๋๋ฐฑ์ ํตํด ๊ฐ ์ปดํฌ๋ํธ์ ์ญํ ๊ณผ ์ฑ ์์ ๋ํด ๊น์ด ์๊ฒ ๊ณ ๋ฏผํ๊ฒ ๋์๊ณ , ์ด๋ฅผ 2์ฃผ์ฐจ '์๋์ฐจ ๊ฒฝ์ฃผ' ๊ฒ์์์ ๋ฐฐ์ด ์ ๊ณผ ๊นจ๋ฌ์ ์ ๋ค์ ์ ๊ทน ๋ฐ์ํ์ต๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก, Model์ ์๋์ฐจ์ ์ํ์ ๊ฒ์ ์งํ์ ๋ด๋นํ๊ณ , Controller๋ ์ฌ์ฉ์ ์
๋ ฅ ๊ฒ์ฆ๊ณผ ๊ฒ์ ์งํ ํ๋ฆ ์ ์ด, ๋ฐ์ดํฐ ๊ฐ๊ณต์, View๋ ์์ํ๊ฒ ์
์ถ๋ ฅ๋ง ๋ด๋นํ๋๋ก ๋ถ๋ฆฌํ์ต๋๋ค. ํนํ ์ฐ์น์ ๋ฐฐ์ด์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๋ก์ง์ OutputView์์ Controller๋ก ์ด๋์ํค๋ฉด์, "์ถ๋ ฅ์ ์ํ ๋ฐ์ดํฐ ๊ฐ๊ณต์ Controller์ ์ฑ
์์ด๊ณ , View๋ ๋จ์ ์ถ๋ ฅ๋ง ๋ด๋นํ๋ค"๋ ์์น์ ๋ช
ํํ ์ดํดํ๊ฒ ๋์์ต๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ ๊ฐ์ ์ ํตํด ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ํ
์คํธ ์ฉ์ด์ฑ์ด ํฌ๊ฒ ํฅ์๋์๊ณ , ๊ฐ ์ปดํฌ๋ํธ์ ์ญํ ์ด ๋ช
ํํด์ ธ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ๋ ๋ ์ฌ์์ก์ต๋๋ค.
๊ธฐ์ ์ ์ธ ๋ฉด์์๋ JavaScript์ ๋ํ ์ดํด๋๊ฐ ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ํนํ ํด๋์ค๋ฅผ ํ์ฉํ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ MVC ํจํด์ ์ค์ ๋ก ์ ์ฉํ๋ฉด์, private ํ๋๋ฅผ ํ์ฉํ ์บก์ํ, ๋ฉ์๋ ์ฒด์ด๋, ์ฝ๋ฐฑ ํจ์ ๋ฑ JavaScript์ ๋ค์ํ ๊ธฐ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์์ Game ํด๋์ค์ play ๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ฉํ์ฌ ์งํ ์ํฉ์ ์ถ๋ ฅํ๋ ๋ถ๋ถ์ ๊ตฌํํ๋ฉด์ ์ฝ๋ฐฑ ํจ์์ ๋ํด์๋ ๊น๊ฒ ์ดํดํ ์ ์์๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ๊ฐ์น๋ ๊น์ด ์ดํดํ๊ฒ ๋์์ต๋๋ค. Jest๋ฅผ ํ์ฉํ ํ ์คํธ ์ฝ๋ ์์ฑ์ ํตํด ์ฝ๋์ ์ ๋ขฐ์ฑ์ ๋์ด๊ณ , ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์์์ต๋๋ค. 2์ฃผ์ฐจ์ ์๋กญ๊ฒ ์ ์ฉํ 'test.each'๋ฅผ ์ฌ์ฉํ 'Table-driven testing'์ ๊ตฌํํ๋ฉด์ ํ ์คํธ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์๊ณ , ์ด๋ฅผ ํตํด ๋ค์ํ Edgy case๋ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฒ์ฆํ ์ ์์์ต๋๋ค.
1์ฃผ์ฐจ์ ๋น๊ตํ์ฌ ๊ฐ์ฅ ํฐ ๋ณํ๋ ์ฝ๋ ์ค๊ณ ๋ฅ๋ ฅ์ ํฅ์์ ๋๋ค. ๋จ์ผ ์ฑ ์ ์์น์ ์ฒ ์ ํ ์ ์ฉํ์ฌ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋ ์์ ๋จ์๋ก ๋ถ๋ฆฌํ์๊ณ , ์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, 'Calculator' ๊ฒ์์์ ์ฒ์์๋ ํ๋์ ํด๋์ค์ ์ฌ๋ฌ ๋ก์ง์ ๋ฃ์์ง๋ง, 2์ฃผ์ฐจ์์๋ testUtils, validator ๋ฑ์ผ๋ก ์ฑ ์์ ๋ถ๋ฆฌํ๋ฉด์ ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์์ต๋๋ค.
๋ํ Airbnb JavaScript Style Guide์ AngularJS commit convention ๋ฑ ์ค๋ฌด์์ ์ฌ์ฉ๋๋ ๋ค์ํ ์ปจ๋ฒค์ ์ ํ์ตํ๊ณ ์ ์ฉํ๋ฉด์, ํ์ ๊ณผ ์ฝ๋ ํ์ง ๊ด๋ฆฌ์ ์ค์์ฑ์ ๊น์ด ์ดํดํ๊ฒ ๋์์ต๋๋ค. ํนํ "feat", "refactor", "test" ๋ฑ์ ๋ช ํํ ์ปค๋ฐ ์ปจ๋ฒค์ ์ ํตํด ์ฝ๋์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค.
ํ๋ฆฌ์ฝ์ค๋ฅผ ํตํด ๊ฐ์ฅ ํฌ๊ฒ ๊นจ๋ฌ์ ์ ์ "์ข์ ์ฝ๋"๋ ๋จ์ํ ๋์ํ๋ ์ฝ๋๊ฐ ์๋๋ผ, ์ฝ๊ธฐ ์ฝ๊ณ , ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ ์ฝ๋๋ผ๋ ๊ฒ์ ๋๋ค.
๐ง ์๋กญ๊ฒ ๋ฐฐ์ ๊ฑฐ๋ ๋ณด์ถฉํ ๊ฐ๋ ๋ค!
static์ ๊ธฐ๋ณธ ๊ฐ๋
static์ '์ ์ '์ด๋ผ๋ ์๋ฏธ๋ก, ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์ํ๋ ๋ฉค๋ฒ๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ
ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋ฒ ํ ๋น๋์ด ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋ ๋๊น์ง ์ ์ง
์ฃผ์ ํน์ง:
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
static ๋ฉค๋ฒ๋ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์
์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ์ ๊ทผ ๊ฐ๋ฅ
๋ฉ๋ชจ๋ฆฌ์ ํ ๋ฒ๋ง ํ ๋น๋จ
์ ๊ทผ ๋ฐฉ๋ฒ
static ๋ฉค๋ฒ: ํด๋์ค๋ช
.๋ฉค๋ฒ๋ก ์ ๊ทผ
์ผ๋ฐ ๋ฉค๋ฒ: ์ธ์คํด์ค.๋ฉค๋ฒ๋ก ์ ๊ทผ
static์ ์ฌ์ฉํ ๊ฒฝ์ฐ
class OutputView {
static print(message) {
console.log(message);
}
}
// ์ฌ์ฉ ๋ฐฉ๋ฒ
OutputView.print('์๋
ํ์ธ์'); // ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
static์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
class OutputView {
print(message) {
console.log(message);
}
}
// ์ฌ์ฉ ๋ฐฉ๋ฒ
const outputView = new OutputView(); // ์ธ์คํด์ค ์์ฑ์ด ํ์
outputView.print('์๋
ํ์ธ์'); // ์ธ์คํด์ค๋ฅผ ํตํด ๋ฉ์๋ ํธ์ถ
์ฃผ์ ์ฐจ์ด์ :
์ธ์คํด์ค ์์ฑ ์ฌ๋ถ
static: ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์
non-static: ๋ฐ๋์ new ํค์๋๋ก ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋จผ์ ์์ฑํด์ผ ํจ
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
static: ํด๋์ค ๋ ๋ฒจ์์ ํ ๋ฒ๋ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋จ
non-static: ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์๋ก ํ ๋น๋จ
์ฉ๋
static: ์ ํธ๋ฆฌํฐ ํจ์์ฒ๋ผ ์ธ์คํด์ค์ ์ํ์ ๊ด๊ณ์์ด ๋์ํ๋ ๊ธฐ๋ฅ์ ์ ํฉ
non-static: ์ธ์คํด์ค์ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํด์ผ ํ๋ ๊ธฐ๋ฅ์ ์ ํฉ
์์ ์ OutputView ๊ฐ์ ๊ฒฝ์ฐ๋ ๋จ์ํ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก, ์ธ์คํด์ค์ ์ํ์ ๊ด๊ณ์์ด ๋์ํ๋ค. ๋ฐ๋ผ์ static์ผ๋ก ์ ์ธํ๋ ๊ฒ์ด ๋ ์ ์ ํ ์ ์๋ค.
MAGIC number ๋์ ์์๋ก ๋ณ๊ฒฝ!
๋งค๊ฐ๋ณ์๋ช ์ ๋ ๋ช ๋ฃํ๊ฒ ๋ํ๋ด๊ธฐ ์ํ์ฌ ์์๋ก ๋ณ๊ฒฝํ๊ธฐ!
// MAGIC NUMBER ๋์ ์์๋ก ๋ณ๊ฒฝ
const START = 1;
const END = 45;
const NOT_DUPLICATED_NUMBER = 6;
class generateNumber {
createRandomNumbers() {
return Random.pickUniqueNumbersInRange(START, END, NOT_DUPLICATED_NUMBER);
}
}
export default generateNumber;
JSdoc ์ฃผ์
JSDoc๋ JavaScript ์ฝ๋์ ์ฃผ์์ ๋ฌ์ ์ฝ๋์ ๋ํ ์ค๋ช ์ ์ ๊ณตํ๊ณ , ํจ์, ๋ณ์, ๊ฐ์ฒด ๋ฑ์ ๋ํ ๋ฌธ์ํ๋ฅผ ๋๋ ๋๊ตฌ์ ๋๋ค. ํนํ ํ์ ์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ์ฝ๋์ ์๋๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ํ๋ ์ญํ ์ ํฉ๋๋ค.
JSDoc ์ฃผ์์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ /**๋ก ์์ํ๋ฉฐ, ๋ณดํต ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์์ต๋๋ค:
- ํจ์ ์ค๋ช : ํจ์๊ฐ ์ํํ๋ ๊ธฐ๋ฅ์ ์ค๋ช ํฉ๋๋ค.
- ๋งค๊ฐ๋ณ์ ์ค๋ช (@param): ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ๊ณ , ๋งค๊ฐ๋ณ์์ ํ์ ๊ณผ ์ค๋ช ์ ์์ฑํฉ๋๋ค.
- ๋ฐํ๊ฐ ์ค๋ช (@returns): ํจ์์ ๋ฐํ๊ฐ์ด ๋ฌด์์ธ์ง ์ค๋ช ํ๊ณ , ๋ฐํ๊ฐ์ ํ์ ์ ์ ์ํฉ๋๋ค.
- ํ์ ์ ์ (@type): ๋ณ์๋ ๊ฐ์ฒด์ ํ์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
- ๊ธฐํ ํ๊ทธ: @example(์ฌ์ฉ ์์), @deprecated(๋น์ถ์ฒ), @async(๋น๋๊ธฐ ํจ์ ํ์) ๋ฑ ๋ค์ํ ํ๊ทธ๋ก ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
/**
* ๋ ์ซ์๋ฅผ ๋ํ๋ ํจ์
* @param {number} a - ์ฒซ ๋ฒ์งธ ์ซ์
* @param {number} b - ๋ ๋ฒ์งธ ์ซ์
* @returns {number} ๋ ์ซ์์ ํฉ
* @example
* // ๋ฐํ๊ฐ: 3
* add(1, 2);
*/
function add(a, b) {
return a + b;
}
JSDoc์ ํตํด ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ด ๋ง์ ํ๋ก์ ํธ์์ ํ์ฉ๋ฉ๋๋ค.
JSDoc์ ๋ฌธ์ํ์ ์ฝ๋ ์ค๋ช ์๋ง ์ด์ ์ด ๋ง์ถฐ์ ธ ์์ผ๋ฉฐ, ์ฝ๋์ ๋์์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. JSDoc์ ์ฃผ์ ํ์์ผ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ JavaScript์ ์ค์ ์คํ์๋ ๊ฐ์ ํ์ง ์๊ณ , ๋ค์๊ณผ ๊ฐ์ ํธ๋ฆฌํจ์ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
๋ฌธ์ ์๋ ์์ฑ: JSDoc ์ฃผ์์ ๊ธฐ๋ฐ์ผ๋ก HTML ๋ฌธ์๋ Markdown ํ์์ API ๋ฌธ์๋ฅผ ์๋ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณ๋์ ์ค๋ช ๋ฌธ์๋ฅผ ์์ฑํ ํ์ ์์ด ์ฝ๋์ ๋ฌธ์๊ฐ ํญ์ ์ผ์นํ๊ฒ ์ ์ง๋ฉ๋๋ค.
์ฝ๋ ํธ์ง๊ธฐ ์ง์: ๋ง์ IDE(Visual Studio Code, WebStorm ๋ฑ)์์ JSDoc์ ์ธ์ํ๊ณ ์ฝ๋ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ๊ฐํํด์ค๋๋ค. ํจ์ ์ค๋ช , ๋งค๊ฐ๋ณ์ ํ์ , ๋ฐํ ํ์ ๋ฑ์ ์๋์ผ๋ก ํ์ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ค์๋ฅผ ์ค์ด๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ํด์ค๋๋ค.
ํ์ ๊ฒ์ฌ: TypeScript๋ฅผ ์ฌ์ฉํ์ง ์์๋ JSDoc์ ํตํด ์ด๋ ์ ๋ ํ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. IDE๋ ์ผ๋ถ ๋น๋ ๋๊ตฌ์์ JSDoc ํ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๋ณธ์ ์ธ ํ์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์์ง๋ง, ์์ ํ ํ์ ๊ฒ์ฌ๋ ์๋๊ธฐ ๋๋ฌธ์ TypeScript์ ๊ฐ์ ์ ์ ํ์ ๊ฒ์ฌ๋งํผ ๊ฐ๋ ฅํ์ง๋ ์์ต๋๋ค.
์ฆ, JSDoc์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๋ ๋ฐ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง๋ง, ์ฝ๋์ ๋ก์ง์ด๋ ์คํ์๋ ์ํฅ์ ์ฃผ์ง ์๋ ์ค๋ช ์ฉ ๋๊ตฌ์ ๋๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ vs ํจ์ํ ์ปดํฌ๋ํธ
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์ข ๋ฅ์๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ์์ต๋๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ๋ ES6์ ํด๋์ค ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉฐ, ์ํ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋๋ค.
๋ฐ๋ผ์ ํด๋์คํ ์ปดํฌ๋ํธ๋ ์๋ช
์ฃผ๊ธฐ์ ๊ด๋ จ๋ ๋ณต์กํ ๋ก์ง์ ๊ตฌํํ ๋ ์ฅ์ ์ด ์์ง๋ง, ์์นซ ์ฝ๋๊ฐ ๊ธธ์ด์ ธ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋ฎ์์ง ์ ์์ต๋๋ค.
ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
increment() {
this.setState({ count: this.state.count + 1 });
}
render() {
return (
<div>
<p>Count: {this.state.count}</p>
<button onClick={() => this.increment()}>Increment</button>
</div>
);
}
}
๋ฐ๋ฉด, ํจ์ํ ์ปดํฌ๋ํธ๋ ๊ฐ๋จํ ํจ์๋ก ์ ์๋ฉ๋๋ค.
๊ธฐ์กด์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํํ์์ผ๋ก ์ธ ์ ์๊ณ , ES6 ๋ฌธ๋ฒ์ธ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํด์ ์ ์ํ ์๋ ์์ต๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ ์์ฒด๋ก๋ ์ํ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๋ฆฌ์กํธ ํ
์ ํตํด ์ํ๋ ์๋ช
์ฃผ๊ธฐ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.ย
ย
ํจ์ํ ์ปดํฌ๋ํธ
import React, { useState } from 'react';
const Counter = () => {
const [count, setCount] = useState(0);
const increment = () => {
setCount((prevCount) => prevCount + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
</div>
);
};
export default Counter;
๋ ์ฝ๋๋ ๋์ผํ ๊ธฐ๋ฅ์ ํ์ง๋ง, ์์ฑ ๋ฐฉ์์ด ๋ค๋ฆ
๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ๋ ํ๋์ ์ธ React ๋ฐฉ์์ด๋ฉฐ, Hooks๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.โโโโโโโโโโโโโโโโ
ํจ์ํ ์ปดํฌ๋ํธ๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ๋นํด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ , ํ
์คํธ์ ๋๋ฒ๊น
์ด ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ํ์ฌ ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์๋ ํด๋์ค ์ปดํฌ๋ํธ ๋์ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.