Component

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • React Component

    • ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ vs ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

  • Component ๊ณ„์ธต ๊ตฌ์กฐ

    • SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)

    • ํ•จ์ˆ˜ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ์‹ : Extract Function / Inline Function

    • ๋””์ž์ธ ์‹œ์Šคํ…œ : Atomic Design

React Component

๐Ÿ“– Component ๋ž€?

  • ๋ฆฌ์•กํŠธ์—์„œ ์•ฑ์„ ์ด๋ฃจ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„

  • Component ์„ค๊ณ„ํ•˜๊ณ  ๋งŒ๋“  Component ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค.

  • Component ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์„œ react elements๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ํ•จ์ˆ˜ํ˜•, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ ์กด์žฌํ•œ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์„ฑ์š”์†Œ : props, state, context

ํด๋ž˜์Šค(Class) ์ปดํฌ๋„ŒํŠธ vs ํ•จ์ˆ˜(Function) ์ปดํฌ๋„ŒํŠธ

ํด๋ž˜์Šค(Class) ์ปดํฌ๋„ŒํŠธ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค(class) ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ

  • class๋กœ ์ •์˜ํ•˜๊ณ  return ๋ฌธ์— JSX ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜

  • React.Component ์ƒ์†

    • React์˜ ComponentClass๋ฅผ ์ƒ์†๋ฐ›์•„ Component ์ƒ์† ํ•„์ˆ˜

  • render() ๋ฉ”์„œ๋“œ ํ•„์ˆ˜ ์‚ฌ์šฉ

  • this ํ‚ค์›Œ๋“œ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

import React, { Component } from 'react'; 

class MyComponent2 extends Component {
    render() {
        return (
            <div>
                Hello React!
            </div>
        );
    }
}

ํ•จ์ˆ˜(Function) ์ปดํฌ๋„ŒํŠธ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜(function) ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋“ฏ์ด function์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ  return ๋ฌธ์— JSX ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜

  • ํ•จ์ˆ˜ ์„ ์–ธ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•œ๋‹ค.

  • ์ง๊ด€์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ์ ๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

function FunctionComponent(){
  return(
    <div>
      hello! React! 
    </div>
  );
}

const FunctionComponent = () => {
  return(
    <div>
      hello! React! 
    </div>
  );
}

โœ๐Ÿป ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ  ๊ณผ๊ฑฐ์—๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ state, LifeCycle ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค(Class)๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, React v16.8 ์ดํ›„ Hooks๋ฅผ ํ†ตํ•œ state ๋ฐ LifeCycle ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ณต์‹์ ์œผ๋กœ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

Component ๊ณ„์ธต ๊ตฌ์กฐ

Component๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ ๊ฒƒ์ธ๊ฐ€? ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ถ„๋ฆฌ ๊ธฐ์ค€์ ์„ ๊ณ ๋ ค ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle)

๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๋ฉฐ, ํด๋ž˜์Šค๋Š” ๊ทธ ์ฑ…์ž„์„ ์™„์ „ํžˆ ์บก์Šํ™”ํ•ด์•ผ ํ•œ๋‹ค.

  • ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•œ๊ฐ€์ง€ ์ผ์„ ํ•˜๋Š”๊ฒŒ ์ด์ƒ์ ์ด๋‹ค.

  • ๋ชจ๋“  ํ•จ์ˆ˜, ์ปดํฌ๋„ŒํŠธ ๋“ฑ์€ ์ •ํ™•ํžˆ ํ•œ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•ด์•ผํ•˜๋Š” ์ฑ…์ž„์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

    • ๋„ˆ๋ฌด ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

    • ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ ์—†๋Š” ํ•จ์ˆ˜๋Š” ๋ณ„๋„์˜ until๋กœ ์ถ”์ถœ

    • ์—ฐ๊ฒฐ๋œ ๊ธฐ๋Šฅ์€ custom hook ๋“ฑ์œผ๋กœ ์บก์Šํ™”

ํ•จ์ˆ˜ ์ถ”์ถœ ๋ฐฉ์‹ : Extract Function / Inline Function

์ฝ”๋“œ ์กฐ๊ฐ์„ ์ฐพ์•„ ๋ฌด์Šจ ์ผ์„ ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•œ ๋‹ค์Œ, ๋…๋ฆฝ๋œ ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•˜๊ณ  ๋ชฉ์ ์— ๋งž์€ ์ด๋ฆ„์„ ๋ถ™ํžŒ๋‹ค. by ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ

  • ๋ฆฌํŒฉํ† ๋ง์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฒ•

  • ํ•จ์ˆ˜ ์ถ”์ถœ์€ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์œ„ํ•ด ์“ฐ์ด๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜

CSS

  • css ํด๋ž˜์Šค ์„ ํƒ์ž๋ฅผ ๊ณ ๋ ค ํ•  ๋•Œ์˜ ๊ธฐ์ค€์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Designโ€™s Layer (๋””์ž์ธ ์ธก๋ฉด)

  • ๋””์ž์ธ ์‹œ์•ˆ์˜ ํ™•์ธ์‹œ ๋ ˆ์ด์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Atomic Design ๋””์ž์ธ ์‹œ์Šคํ…œ

์›น๋””์ž์ธ๊ณผ ๊ฐœ๋ฐœ ๋ถ„์•ผ๋Š” ์ง€์†์ ์œผ๋กœ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค. ๋””์ž์ธ๊ณผ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์€ ๋” ์ด์ƒ ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ์„ ๋„˜์–ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ์™€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•œ ์‹œ์Šคํ…œ์„ ํ•„์š”๋กœ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฐํ•œ ๋ณต์žกํ•œ ๋ฌธ์ œ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋””์ž์ธ์‹œ์Šคํ…œ๊ณผ ํŒจํ„ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•„์š”์„ฑ์ด ์ƒ๊ฒจ๋‚ฌ๋‹ค.

  • ํ™”ํ•™์  ๊ด€์ ์—์„œ ์˜๊ฐ์„ ์–ป์€ ๋””์ž์ธ ์‹œ์Šคํ…œ

  • Atoms(์›์ž) -> Molecules(๋ถ„์ž) -> Organisms(์œ ๊ธฐ์ฒด) -> Templates -> Pages ์ˆœ์œผ๋กœ ์ž‘์€ ๊ฒƒ๋“ค์„ ๋งŒ๋“ค๊ณ , ๊ฒฐํ•ฉํ•ด ์ข€ ๋” ํฐ ๋‹จ์œ„์˜ ๋ทฐ๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ

  • ์ž‘์€ UI ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ ์ฐจ ํฐ ๋‹จ์œ„์˜ UI ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๋ฐฉ์‹์„ ์ œ์•ˆํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Information Architecture ( ์ •๋ณด ๊ตฌ์กฐ๋„ )

์›น/์•ฑ ๊ตฌ์ถ• ์‹œ ํ•„์š”ํ•œ ํ™”๋ฉด๊ณผ ๋ฉ”๋‰ด์˜ ์ •๋ณด ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ ๋ฐ ์ •์˜ํ•˜๋Š” ๋ฌธ์„œ ์ •๋ณด์˜ ๊ตฌํ˜ธํ™”๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์„ ๋งˆ์ฃผํ•˜๊ธฐ๊นŒ์ง€ ํ•„์š”ํ•œ ํ™”๋ฉด๋“ค์˜ ํ๋ฆ„์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • JSON Schema์˜ ์˜ํ–ฅ์œผ๋กœ ํ™”๋ฉด ์„ค๊ณ„์˜ ๊ธฐ์ค€์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

๐Ÿ”— ์ฐธ๊ณ 

Last updated