자바스크립트 + 리액트 디자인 패턴
- 독서 기간 (2024.10.16 ~ )
- 목적 : 디자인 패턴에 대한 이해와 js 그리고 React 에서의 활용 예시 체험
1장
디자인 패턴 소개
디자인 패턴의 역사
디자인 패턴은 기본적으로 건축학에서 유래됐습니다. 의미적으로는 건축을 잘하기 위한 일종의 템플릿이라고 생각할 수 있습니다. 이 의미를 프로그래밍에서도 사용하게 되면서 디자인 패턴이 시작했습니다.
디자인 패턴은 1994년에 GoF(Gang of Four)이라는 4명의 저자가 발표한 책에서 처음 소개되었다. 이 책은 디자인 패턴을 23가지로 분류하였다. 이후 디자인 패턴은 소프트웨어 개발에서 중요한 개념으로 자리잡았다.
패턴이란 무엇인가
디자인 패턴은 소프트웨어 개발에서 특정 문제를 해결하기 위한 방법을 말한다. 이 방법은 다른 개발자들이 이미 검증된 방법을 사용하여 문제를 해결할 수 있도록 도와준다.
디자인 패턴의 장점
- 검증된 솔루션을 제공한다.
- 쉽게 재사용할 수 있다.
- 코드를 이해하기 쉽다.
- 실수를 줄일 수 있다.
- 종합적인 개발 방법론을 제공한다.
- 반복적인 작업을 줄일 수 있다. -> (DRY 원칙)
- 공통 언어를 제공한다. -> 의사소통이 쉬워진다.
- 커뮤니티의 지식을 선순화한다.
일상 생활에서의 디자인 패턴
리액트에서 공급자 패턴을 사용하면 컴포넌트 트리의 깊은 곳에 있는 컴포넌트에 데이터를 전달할 수 있다. 이 패턴은 리액트에서 매우 일반적으로 사용되는 패턴이다.
예를 들면 인증 정보를 전역적으로 사용하고 싶을 때, context API를 사용하여 인증 정보를 전역적으로 사용할 수 있다. 이러한 패턴은 리액트에서 매우 일반적으로 사용되는 패턴이다.
2장
패턴성 검증, 프로토 패턴 그리고 세 가지 법칙
프로토 패턴이란?
프로토 패턴이란 새롭게 도입되는(패턴성 검증이 안된) 패턴이라고 생각하면 된다. 이 패턴이 어떻게 패턴성 검증이 이루어지고, 세가지 법칙을 충족해 디자인 패턴으로서 인정받게 되는지 알아보자.
패턴성 검증
좋은 패턴애는 여러 특징이 있습니다. 물론 모든 것을 갖춰야만 좋은 패턴이라고 할 순 없지만 아래의 특징을 갖고 있다면 좋은 패턴으로 간주할 수 있습니다.
- 특정 문제를 해결하는 방법을 제공한다.
- 확실한 기능만을 말한다.
- 관계를 명확하게 정의한다.
세 가지 법칙
좋은 패턴이 되지 위해서는 반복되는 현상 또는 문제에서 지속적으로 사용할 수 있어야하합니다. 이를 위해 GoF는 세 가지 법칙을 제시했습니다.
- 좋은 패턴은 어떻게 판단할 수 있는가?
- 좋은 패턴이라고 할 수 있는 이유가 무엇인가?
- 넓은 적용 범위를 갖고 있어 패턴이 될 가치가 있는지? 있다면 어떤 가치가 있는가?
3장
패턴 구조화 및 작성
디자인 패턴의 구조
패턴의 작성자는 패턴의 설계, 구현 방법 및 목적을 설명해 야 합니다. 크게는 3가지로 구성됩니다.
- 컨텍스트(Context) : 패턴이 적용되는 상황을 설명합니다.
- 집중 목표(System of Forces) : 패턴이 해결하려는 문제를 설명합니다.
- 구성(Configuration) : 패턴의 구조와 구현 방법을 설명합니다.
위의 내용을 통해 구성요소를 정리해보면 다음과 같습니다.
- 이름
- 설명
- 컨텍스트 개요
- 문제 제시
- 해결책 제시
이외로 설계 내용과 구현 방법 그리고 예제 코드등을 제공하면 더욱 좋습니다. 추가적인 내용은 많을 수 있지만, 위늬 내용은 최소한으로 제공해야 합니다.
모범 패턴
디자인 패턴의 구조와 만들어진 목적을 이해하면 해당 패턴이 필요한 이유에 대해 더 싶게 이해할 수 있습니다.
패턴을 새로 만드는 것은 초기 비용이 많이 들 수 있지만, 그 투자로 얻을 수 있는 것들이 많습니다. 하지만 처음부터 새로 만들기보다는 이미 검증된 패턴을 사용하는 것이 더 좋습니다.
만약 패턴을 사용하는 것 같은 코드를 발견한다면 특징을 메모해 보세요. 이러한 특징을 통해 패턴을 찾아보고 적용해보세요. (tip: 어떠한 상호작용이나 정해진 규칙이 보이지 않는다면 패턴이 아닐 수 있습니다.)
패턴 작성하기
디자인 패턴을 직접 개발한다면 일단 잘 만들어진 다른 패턴을 참고해봅시다.
참고로 이미 존재하는 패턴을 활용해서 새로운 패턴을 만들 수도 있습니다. 예를 들면 모듈 패턴을 활용해서 노출 모듈 패턴을 만들 수 있습니다.
하지만 패턴을 만들 떄 아래와 같은 사항들을 고려해야 합니다.
- 얼마나 실용적인가?
- 사용자한테 솔직해야합니다. (이 패턴이 편리하다고 세일즈를 하지 마세요.)
- 독창성이 중요한 것이 아니라, 문제를 해결하는 것이 중요합니다.
- 패턴이 어떤 문제를 해결하는지 명확하게 설명해야 합니다. 이를 위해 훌륭한 예제 코드를 제공해야 합니다.
4장
안티 패턴
안티 패턴이란?
안티 패턴은 디자인 패턴과 반대되는 개념입니다. 안티 패턴은 문제를 해결하는 대신 문제를 악화시키는 방법을 제공합니다. 안티 패턴은 프로젝트를 망가뜨리는 원인이 될 수 있습니다.
안티 패턴은 다음과 같은 특징을 갖습니다.
- 문자 상황에 대한 잘못된 해결책
- 잘못된 패턴을 사용하여 문제를 해결하려는 시도
이를 통해 우리가 배워야할 점은 올바른 해결책을 찾아야 한다는 것입니다.
안티패턴을 아는 것은 빠르 게 문제점을 파악하고 해결하는데 도움이 됩니다. 안티 패턴을 알고 있다면 이를 피할 수 있습니다.
자바스크립트 안티 패턴
자바스크립트는 느슨한 타입을 제공하기 떄문에 더욱 안티패턴을 많이 볼 수 있는 것 같습니다. 예시를 통해 알아보겠습니다.
- 전역 컨텍스트에 수많은 변수를 선언하는 것 -> 이는 전역 변수 오염을 일으킬 수 있습니다.
- setTimeout이나 setInterval 에 함수가 아닌 문자열을 전달하는 것 (eval 함수를 사용하는 것과 같은 문제)
- object.prototype을 확장하는 것 (이는 다른 라이브러리와 충돌을 일으킬 수 있습니다.)
- document.createElement를 대신 document.write를 사용하는 것 (https://developer.mozilla.org/en-US/docs/Web/API/Document/write)