이러한 리액트에서의 디자인 패턴이란 서비스가 커져감에 따라 컴포넌트의 구성이 단독적으로 이루어져 여러 페이지를 꾸리고 라우팅 되다보면 한없이 복잡해질 가능성이 짙어진다.
이때 , !, !!
여러 디자인 패턴을 접목하여 (본인의 서비스 및 플젝에 맞는) 구조로 UI 및 코드 구조를 짜구 props의 전달 및 가공 처리 그리고 ,, !
더욱 효율적인 웹 서비스 구축이나 이의 유지보수 등을 위해서는 컴포넌트 단위에서의 재사용성 및 활용성 등이 중요하게 여겨집니다 . !
컴포넌트를 어떻게 구성하냐가 중요해진 시점. ! 다양한 디자인 패턴들이 있으며 오늘은 그 중 세 가지 정도를 소개하며,, !
어떤 디자인 패턴을 적용해야 내 프로젝트가 수월해지고 좋아지는지 알아볼 수 있으면 좋으련만!
- Presentation & Container Pattern
- Custom Hooks Pattern
- Atomic Design Pattern
P&C
데이터의 로직을 수행하는 컴포넌트와 데이터르 출력하는 컴포넌트를 나누어 구조를 짠 디자인 패턴 !
디렉터리 구조를 page = components
, container - components
등으로 두어
디렉터리에서는
디렉터리에서는
컨테이너에서는 하나의 페이지에서 다루어질 데이터들을 가공하거나 처리, 상태값 변경 등의 로직을 수행해주고 하위 컴포넌트들로 presentation 컴포넌트들을 렌더해 화면을 구성해주는 역할을 한다.
presentation 컴포넌트에서는 위의 컨테이너에서 받아오는 상태값 및 기타 데이터들을 이용하여 화면에 실제 UI를 구성해 뿌려주는 역할들을 하게 된다. 혹은 컨테이너에서 받은 상태값 변경 함수 등 여러 이벤트들을 실제 태그에 연결해주는 역핟로 할 수 있을 것이다 람쥐.
위의 Presentation&Container 패턴과 달리 컴포넌트들은 UI 구성 및 이벤트 등록과 같은 부분만 수행하도록 하고 기타 데이터나 상태를 다루는 로직들을 리액트의 커스텀 훅으로 빼두어 관리하는 디자인 패턴이다.
이렇게 로직을 훅으로 분리해줌으로 같은 로직을 여러 곳에서 사용해야할 때 재사용성을 높게 가져갈 수 있을 것이다.
아토믹 디자인 패턴은 컴포넌트의 재사용성을 극대화하는 방법론으로 원자의 개념을 이용한 디자인 패턴인다.!
원자가 모여 분자가 되고, 분자가 모여 원소, 물체, 끝내는 하나 하나의 사물들을 이루게 된다는 개념으로 가장 작은 단위의 기능을 하는 컴포넌트부터 시작하여 이들이 모여 복잡한 컴포넌트, 페이지를 이루게 되는 것을 기본 개념으로 합니다람쥐라!
기본적으로 원자(Atoms), 분자(Molecules), 유기체(Organisms), 템플릿(Templates), 페이지(Pages)로 구분된다.
원자(Atoms) : 하나의 기능을 이루는 가장 작은 요소. 단독적으로는 어떠한 기능을 수행하지는 못하는 정도로 작은 단위를 이루는 컴포넌트. 예를 들어 인풋 영역, 버튼, 텍스트, 라디오 버튼 등
분자(Molecules) : 여러 원자 컴포넌트들을 모아 형성한 컴포넌트. 하나의 용도를 지니고 있으며 재사용성을 갖고 있다. 유의할 점은 Atoms가 많이 모여 이루어진 복잡한 Molecules는 재사용성을 잃어버릴 수 있으니 단순함을 최대한 유지할 수 있도록 해야한다. 예를 들어 입력 폼, 탭, 네비게이션 등
유기체(Organisms) : 여러 분자 컴포넌트들을 모아 형성한 컴포넌트. 꼭 분자 컴포넌트뿐만 아니라 원자 컴포넌트도 사용할 수 있음. 여기서부터는 규모가 완전 클 수 도 있 고 해 서 그렇게 재사용성을 따져가며 컴포넌트 구성하지 않음. 예를 들어 헤더, 푸터, 상품 리스트 등
템플릿(Templates) : Organisms가 모여 배치된 컴포넌트로 페이지 구조나 레이아웃 구성 등을 나타내는 역할, 실제 콘텐츠를 보여주기보단 콘텐츠의 구조가 어떻게 구성되는지 어디에 구성되는지와 어떻게 작동되는 지 등 동작 요소 등을 확인할 수 있다.
페이지(Pages) : Templates에 실제 데이터를 반영한 컴포넌트로 작성한 컴포넌트에 상태값 넣어 실제 페이지를 완성한 하나의 컴포넌트.
Props Dilling -> props를 오로지 최하위 컴포넌트로 전달하기 위해 여러 컴포넌트를 거쳐가는 것
개인적으론 Atomic 디자인 패턴은 커스텀화 하여 단계를 줄여 사용해보았을때도 데이터 전달 설계를 잘못하면 고쳐야할 컴포넌트들이 너무 늘어나기도 하고 처음 구조화를 정말 엄밀히 해주어야 본전이라는 느낌을 받아서
Page Component 구조에서 Custom hooks 패턴을 접목해 사용해보면 어떨까 하고 생각된다!