Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- RTK
- 웹애플리케이션서버
- Gin
- React
- java
- Chakra
- Spring
- css
- react-hook-form
- JavaSpring
- tanstackquery
- satisfiles
- designpatterns
- ReactHooks
- typescript
- hook
- 티스토리챌린지
- backend
- frontend
- component
- JPA
- Redux
- 오블완
- go
- javascript
- storybook
- test
- golang
- springboot
Archives
- Today
- Total
bkdragon's log
싱글톤 패턴 본문
싱글톤 패턴은 하나의 클래스에 단 하나의 인스턴스만 존재하도록 보장하는 디자인 패턴이다. 이 패턴은 동일한 인스턴스를 공유함으로써 메모리 사용량을 줄이고, 특정 리소스를 여러 객체가 공유해야 할 때 유용하다.
싱글톤 패턴 구현 방법
타입스크립트로 싱글톤 패턴을 구현하는 방법은 아래와 같다:
1. 클래스의 생성자를 private
으로 설정하기
private
생성자는 외부에서 클래스를 인스턴스화하는 것을 막아준다. 이를 통해 클래스 외부에서는 new
키워드로 새로운 인스턴스를 만들 수 없게 된다.
2. 클래스 내부에서 static
변수를 통해 인스턴스를 저장하기
static
변수는 클래스 자체에 종속되며, 인스턴스를 한번만 생성한 후 공유할 수 있도록 한다.
3. 클래스 메서드를 통해 인스턴스 접근 제공
getInstance()
메서드를 통해 클래스 외부에서 단일 인스턴스에 접근할 수 있도록 한다. 인스턴스가 이미 생성되었는지 확인하고, 없다면 새로 생성한다. 이렇게 하면 인스턴스가 항상 하나만 유지된다.
싱글톤 패턴 기본 형태
class Singleton {
private static instance: Singleton;
private constructor() {
}
public static getInstance(): Singleton {
if (!Singleton.instance) {
Singleton.instance = new Singleton(); // 인스턴스가 없으면 새로 생성
}
return Singleton.instance;
}
public someMethod(): void {
console.log("싱글톤 인스턴스의 메서드 호출");
}
}
// 사용 예시
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true, 동일한 인스턴스 반환
instance1.someMethod();
싱글톤 패턴 활용 예시
테마를 관리하는 예시를 살펴보자.
type ThemeType = "light" | "dark";
interface ThemeColors {
background: string;
text: string;
primary: string;
}
class ThemeManager {
private static instance: ThemeManager | null = null;
private currentTheme: ThemeType = "light";
private themeColors = {
light: {
background: "#FFFFFF",
text: "#000000",
primary: "#007AFF",
},
dark: {
background: "#000000",
text: "#FFFFFF",
primary: "#0A84FF",
},
};
private constructor() {}
public static getInstance(): ThemeManager {
if (!ThemeManager.instance) {
ThemeManager.instance = new ThemeManager();
}
return ThemeManager.instance;
}
public getTheme(): ThemeType {
return this.currentTheme;
}
public getColors(): ThemeColors {
return this.themeColors[this.currentTheme];
}
public toggleTheme(): void {
this.currentTheme = this.currentTheme === "light" ? "dark" : "light";
console.log(`테마가 ${this.currentTheme}로 변경되었습니다.`);
}
}
// 사용 예시
const themeManager1 = ThemeManager.getInstance();
const themeManager2 = ThemeManager.getInstance();
console.log("현재 테마:", themeManager1.getTheme()); // 'light'
console.log("현재 색상:", themeManager1.getColors()); // light 테마 색상
themeManager1.toggleTheme();
console.log("변경된 테마:", themeManager2.getTheme()); // 'dark'
console.log("변경된 색상:", themeManager2.getColors()); // dark 테마 색상
싱글톤 패턴의 장단점
장점
- 인스턴스가 하나만 존재하므로 메모리 낭비를 줄일 수 있다.
- 동일한 인스턴스를 사용함으로써 데이터의 일관성을 유지할 수 있다.
단점
- 테스트 시 인스턴스가 고정되므로, 테스트가 어려울 수 있다는 단점이 있다.
- 멀티 스레드 환경에서 인스턴스 생성 시 동기화 처리가 필요할 수 있다.
'Typescript' 카테고리의 다른 글
빌더 패턴 (0) | 2024.11.10 |
---|---|
팩토리 메서드, 추상 팩토리 패턴 (0) | 2024.11.09 |
Absolute (1) | 2023.10.29 |
ReplaceAll (0) | 2023.10.23 |
문자열의 길이 구하기 (1) | 2023.10.21 |