8월 3주차

2023년 08월 21일, 09:12

싱글턴 패턴

싱글턴 패턴은 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공하는 생성 디자인 패턴이다.

전역 변수처럼 싱글턴 패턴을 사용하면 모든 곳에서 일부 객체에 접근할 수 있기 때문에 다른 코드가 해당 인스턴스를 덮어쓰지 못하도록 주의해야한다.

구현 시 주의해야할 점

  • new 키워드는 비공개로 설정
  • 생성자 역할을 하는 정적 생성 메서드를 생성

싱글턴 패턴은 아래와 같은 경우에 사용하자.

  • 모든 클라이언트가 사용할 수 있는 단일 인스턴스만 있어야 할 때 사용
    • ex) 단일 데이터베이스 객체
  • 전역 변수를 더 엄격하게 제어할 때 사용

장점

  • 클래스가 하나의 인스턴스만 갖는다는 것을 확신할 수 있음
  • 이 인스턴스에 대한 전역 접근 지점을 얻음
  • 싱글턴 객체는 처음 요청될 때만 초기화

단점

  • 단일 책임 원칙 위반(??)
    • 클래스가 하나의 인스턴스를 가질 수 있고,
    • 해당 인스턴스에 대한 전역 접근 지점을 제공
  • 다중 스레드 환경에서 여러 번 생성하지 않도록 특별한 처리 필요
  • 모의 객체를 생성하기 어려움.

changeset

모노레포를 관리할 때 패키지의 수정사항이 생기고 해당 수정사항을 고치면, 패키지의 버전이나 변경 내용을 적어야하는데, pnpm은 changeset을 통해서 이를 도와준다.

우선, changesets 패키지를 깔아준다.

pnpm add -Dw @changesets/ci

그 다음은 changeset을 사용하기 위해서 초기화 해준다.

pnpm changeset init

초기화하고 나면 .changeset 디렉토리가 생긴다.

이 디렉토리에는 pnpm changeset 명령어를 통해서 새로운 changeset 을 만들면 생성된 마크다운 파일들이 저장된다.

pnpm changeset 명령어를 사용하면,

터미널에서 모노레포에 있는 변경된 패키지가 나눠서 보여지고, major, minor,patch를 지정하여 업데이트 할 수 있다.

major나 minor는 enter를 통해서 스킵할 수 있고, 선택은 space로 가능하다.

참고)

tsup

esbuild로 타입스크립트 라이브러리를 설정없이 번들해주는 도구이다.

번들할 수 있는 항목으로는

  • .js, .json, .mjs
  • .ts, .tsx
  • (실험적으로) css

ex) 이런식으로 config파일도 만들어 사용할 수 있다.(tsup.config.ts)

import { defineConfig } from 'tsup'

export default defineConfig({
  entry: ['src/index.ts'],
  splitting: false, // 코드 스플리팅 여부
  sourcemap: true, // 소스맵을 생성
  clean: true, // 빌드 전에 아웃풋 디렉토리안에 있는 파일들을 제거

})