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, // 빌드 전에 아웃풋 디렉토리안에 있는 파일들을 제거
})