๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

react

React / ์ปดํฌ๋„ŒํŠธ

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;