CDD(Component Driven Development)
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ
- ํ๋ฉด์ ๋ ๋ฆฝ์ ์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ๋ก
- Class ์ปดํฌ๋ํธ, ํจ์ํ ์ปดํฌ๋ํธ(๋ง์ด ๊ถ์ฅ) ๋ ์ข ๋ฅ๊ฐ ์์
Class ์ปดํฌ๋ํธ
ํด๋์ค ๋ฌธ๋ฒ โฌ๏ธ
ํด๋์ค(Class)๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํ ํ๋ฆฟ ์ญํ ๋ก, ๋ถ์ด๋นต ํ์ ๋ง์ด ๋น์ ๋๊ณ ์๋ค... (๊ฐ์ฒด - ๋ถ์ด๋นต, ํด๋์ค - ๋ถ์ด๋นต ํ)
1) ๊ธฐ๋ณธ ๊ตฌ์กฐ
class Person {
constructor(name, age) { // ์์ฑ์ (๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์คํ๋จ)
this.name = name;
this.age = age;
}
sayHello() { // ๋ฉ์๋ (๊ฐ์ฒด๊ฐ ์ฌ์ฉํ ํจ์)
console.log(`์๋
ํ์ธ์! ์ ๋ ${this.name}์ด๊ณ , ${this.age}์ด์
๋๋ค.`);
}
}
// ํด๋์ค ์ฌ์ฉ (์ธ์คํด์ค ์์ฑ)
const person1 = new Person("ํ์ฐ", 24);
person1.sayHello(); // "์๋
ํ์ธ์! ์ ๋ ํ์ฐ์ด๊ณ , 24์ด์
๋๋ค."
- Person ํด๋์ค ์ ์
- ์์ฑ์(constructor)๋ก ๊ฐ์ฒด์ ์ด๊ธฐ ์ํ๋ฅผ ์ค์
- ๋ฉ์๋๋ก ๊ฐ์ฒด์ ๊ธฐ๋ฅ ์ ์
- new๋ก ์ ์ธ์คํด์ค ์์ฑ
2) ์์
extends ํค์๋๋ก ํด๋์ค๋ฅผ ํ์ฅํด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์๋ค.
class Student extends Person {
constructor(name, age, grade) {
super(name, age); // ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์ ํธ์ถ
this.grade = grade;
}
introduce() {
console.log(`์ ๋ ${this.grade}ํ๋
์
๋๋ค.`);
}
}
// ์ธ์คํด์ค ์์ฑ
const student1 = new Student("๋ฏผ์", 16, 10);
student1.sayHello(); // "์๋
ํ์ธ์! ์ ๋ ๋ฏผ์์ด๊ณ , 16์ด์
๋๋ค."
student1.introduce(); // "์ ๋ 10ํ๋
์
๋๋ค."
3) ์ ์ ๋ฉ์๋
๊ฐ์ฒด๊ฐ ์๋ ํด๋์ค ์์ฒด์์ ์ง์ ํธ์ถํ๋ ๋ฉ์๋๋ก static ํค์๋๋ฅผ ์ฌ์ฉํด ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
static์ ๊ณ์ฐ / ๋ณํ ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณตํต ์์ (์ฐ๊ฒฐ, ์กฐํ, ์์ , ์ญ์ ๋ฑ..),
๊ฐ์ ์ด๊ธฐ๊ฐ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋(์๋ฅผ ๋ค์ด, ์ต๋ช ์ฌ์ดํธ์์ ๋ก๊ทธ์ธ์ ์ํ ์ํ๋ก ๋ํ์ฐฝ์ ๋ค์ด์์ ๋ ๊ณตํต์ผ๋ก ๋๋ค์์ด Guest๋ก ์ค์ ๋ ๋)
ํ๋์ ์ธ์คํด์ค๋ง ์ ์งํด์ผ ํ ๋ (ํ๋ก๊ทธ๋จ ์ ์ญ์์ ๊ณต์ ํ๋ ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ ๋, ์ฑ ์ ์ฒด์์ ๊ฐ์ ๋ก๊ทธ ๊ธฐ๋ก ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ๋(๊ฐ์ ๋ก๊ทธ ๋ฐฐ์ด์ ๊ณต์ ํจ), db์ฐ๊ฒฐ์ ๋งค๋ฒ ์๋ก ํ๋ ๊ฒ ์์ด ํ๋์ ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ ๋(๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ๋ฐ ๋ถํ์ํ ์ค๋ณต ์ฐ๊ฒฐ์ ๋ฐฉ์งํจ)
class MathUtils {
static add(x, y) {
return x + y;
}
}
console.log(MathUtils.add(5, 3)); // 8
์์ฑ - ์ฑ์งํผํฐ.... ๊ณ ๋ง์์
ํด๋์คํ ์ปดํฌ๋ํธ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
(Vite๋ก ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค)
src/App.jsx
import { Component } from "react";
import "./App.css";
class App extends Component {
render(){
return <div>ํด๋์คํ ์ปดํฌ๋ํธ</div>
}
}
export default App;
ํจ์ํ ์ปดํฌ๋ํธ
์์ฆ ํ์ค์ผ๋ก ์ฌ์ฉ๋๋ ํ์์ ํจ์ํ ์ปดํฌ๋ํธ๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ง ๊ทธ๋๋ก ํจ์์ฒ๋ผ ๋์ํ๋ ์ปดํฌ๋ํธ๋ก, ํด๋์คํ๋ณด๋ค ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ์ฑ๋ฅ์ด ๋ ์ข์ผ๋ฉฐ ์ง๊ด์ ์ด๋ค.
ํด๋์คํ์์๋ง ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ ์์ง๋ง ์ด๋ React Hooks๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ํ ์ปดํฌ๋ํธ์์๋ ๊ฐ๋ฅํ๋ค. (์ํ ๊ด๋ฆฌ - useState, ์๋ช ์ฃผ๊ธฐ - useEffect)
src/App.jsx
import { Component } from "react";
import "./App.css";
function App(){
return <div>ํจ์ํ ์ปดํฌ๋ํธ</div>
}
export default App;
'react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React / ์ํ๊ด๋ฆฌ (0) | 2025.04.04 |
---|---|
React / map, filter๋ก ๋ฐ๋ณต ๋ ๋๋งํ๊ธฐ (0) | 2025.04.03 |
React / JSX ๋ฌธ๋ฒ (0) | 2025.04.03 |
React / ํ๋ก์ ํธ ์์ฑ (0) | 2025.04.03 |
React / Node.js, npm, npx ์ค์น ๋ฐ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ (Mac) (0) | 2025.04.02 |