๐งฉ Component โ
์ปดํฌ๋ํธ๋, UI๋ฅผ ๊ตฌ์ฑํ๋ ๋ ๋ฆฝ์ ์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ธ๋ก์ด๋ค.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ (Component Driven Development, CDD)
UI๋ฅผ ๋
๋ฆฝ์ ์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ๋จ์
๋ก ๋๋์ด ๊ฐ๋ฐํ๋ ๋ฐฉ์์ด๋ค.
๊ฐ ์ปดํฌ๋ํธ๋ ์์ ์ ์ํ์ ๋ก์ง, ์คํ์ผ์ ํฌํจํ ์ ์์ด ๊ตฌ์กฐํ๋ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
์ปดํฌ๋ํธ ๋ถ๋ฆฌ ๊ธฐ์ค โ
์ฌ์ฌ์ฉ์ฑ (Reusability) โ
- ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ณตํต UI๋ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
๋จ์ผ ์ฑ ์ ์์น (SRP: Single Responsibility Principle) โ
- ํ๋์ ์ปดํฌ๋ํธ๋ ํ๋์ ์ญํ ๋ง ์ํํ๋๋ก ํ์ฌ ์ฝ๋์ ์ดํด๋์ ์ ์ง๋ณด์์ฑ์ ๋์ธ๋ค.
๊ฐ๋ ์ฑ (Readability) โ
- ํฐ ์ปดํฌ๋ํธ๋ฅผ ์๊ณ ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ๋๋ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๋ ๋ช ํํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
์ถ๊ฐ์ ์ผ๋ก ๊ณ ๋ คํ ์ ์๋ ๊ธฐ์ค,
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ (Separation of Concerns):
๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์คํ์ผ๋ง, ๋ทฐ ๋ก์ง์ด ํ ์ปดํผ๋ํธ์ ์์ด์ง ์๋๋ก ๋๋๋ค.
ํ์ผ ํฌ๊ธฐ์ ๊น์ด ์ ํ:
ํ๋์ ํ์ผ์ด ๋๋ฌด ๊ธธ๊ฑฐ๋ ์ค์ฒฉ ๊ตฌ์กฐ๊ฐ ๊น์ด์ง ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ ๋ถ๋ฆฌ ์์ ์ ๊ณ ๋ คํ๋ค.
์๋ ๊ธฐ๋ฐ ๋ถ๋ฆฌ:
ํ๋ฉด์์ ์์น๋ณด๋ค๋, โ๋ฌด์์ ํ๋๊ฐโ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ปดํฌ๋ํธ ์ข ๋ฅ โ
React์๋ ๋ ์ข ๋ฅ์ ์ปดํฌ๋ํธ๊ฐ ์๋ค.
ํจ์ํ ์ปดํฌ๋ํธ ๊ถ์ฅ โ
function Greeting({ name }) {
return <h1>์๋
ํ์ธ์, {name}!</h1>;
}
ํด๋์คํ ์ปดํฌ๋ํธ โ
ํด๋์ค ์ปดํฌ๋ํธ๋ ES6์ class
๋ฌธ๋ฒ์ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค.
class Greeting extends React.Component {
render() {
return <h1>์๋
ํ์ธ์, {this.props.name}!</h1>;
}
}
Class๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ
- ๐ชน ๋ถ๋นตํ: ํด๋์ค (Class)
- ๐ฅ ๋ถ์ด๋นต: ๊ฐ์ฒด (Instance)
๊ธฐ๋ณธ ํด๋์ค ์์
class Person {
constructor(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
greet() {
console.log(`์๋
ํ์ธ์, ์ ๋ ${this.name}์
๋๋ค.`);
}
}
ํด๋์ค ์์ ์์
class Student extends Person {
constructor(name, age, sex, grade) {
super(name, age, sex); // ๋ถ๋ชจ(Person)์ ์์ฑ์ ํธ์ถ
this.grade = grade;
}
// greet ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ (์ฌ์ ์, greet ๋ฉ์๋๋ฅผ ๋ฎ์ด์)
greet() {
console.log(`${this.name}: ํ์ ํ์ธ๋ฌธ๋จ์ธ`);
}
// Student๋ง์ ๊ณ ์ ๋ฉ์๋
study() {
console.log(`${this.name}: ๊ณต๋ถ์ค์ธ์ฒ`);
}
}
์ฌ์ฉ ์์
const student1 = new Student("์งฑ๊ตฌ", 10, "๋จ์ฑ", 1);
student1.greet(); // ์งฑ๊ตฌ: ํ์ ํ์ธ๋ฌธ๋จ์ธ
student1.study(); // ์งฑ๊ตฌ: ๊ณต๋ถ์ค์ธ์ฒ
์ปดํฌ๋ํธ ์์ฑ ๋ฐฉ๋ฒ โ
๐ก React ๊ณต์ ๊ฐ์ด๋
๐ React docs
We recommend defining components as functions instead of classes.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋ง๋๋ ๋ฐฉ๋ฒ์ ํจ์ํ ์ปดํฌ๋ํธ
์ ํด๋์คํ ์ปดํฌ๋ํธ
ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค.
๊ณต์ ๋ฌธ์์์๋ ํจ์ํ ์ปดํฌ๋ํธ
์ Hook
์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๊ถ์ฅํ๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๊ถ์ฅํ๋ ์ด์ โ
- ์์ฑ์ด ๊ฐ๋จํ๊ณ , ์ฝ๋๊ฐ ์ง๊ด์ ์ด๋ค.
React Hook
์ ํ์ฉํ์ฌ ์ํ ๊ด๋ฆฌ์ ์๋ช ์ฃผ๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ฌ์์ง๋ค.- ์ต์ ํ์ ์ฑ๋ฅ ๋ฉด์์ ์ ๋ฆฌํ๋ค.