inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기

싱글턴(Singleton) - 앱 내에서 단 하나만 존재해야 할 때

강결합

134

Eric J

작성한 질문수 12

1

강결합되는게 왜 싱글턴 패턴의 단점인지 연결이 잘 되지 않아 질문드립니다. 매개변수 주입같은 해법을 주신 것 처럼, 싱글턴 패턴과는 별개의 문제로 느껴지는데, 싱글턴을 안 하면 어떻게 나아지는지 예제 같은게 있을까요?

javascript typescript 객체지향 디자인-패턴 canvas

답변 2

0

Eric J

(AI 답변이 전부라면) 싱글턴 패턴만의 단점은 아니고 global state라면 가지는 단점을 당연히 싱글턴도 가진다로 이해했습니다

1

제로초(조현영)

네 싱글턴 패턴만의 단점은 아니고 강결합되는 모든 객체들의 단점이라고 보시면 됩니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. Eric J님.

싱글턴 패턴의 강결합 문제는 싱글턴이 글로벌 상태를 공유하기 때문에 발생할 수 있습니다. 이는 실행 환경의 상태에 따라 동작이 달라질 수 있어 테스트가 어렵고, 다른 코드에 의해 쉽게 변경될 수 있기 때문에 유지보수가 어려워질 수 있습니다. 싱글턴 패턴의 장점으로는 메모리 사용의 효율성을 들 수 있지만, 그 이면에는 코드의 유연성을 저하시키는 단점이 존재합니다.

강결합 문제와 해결 방안

  • 강결합 문제: 싱글턴 패턴으로 인스턴스를 전역적으로 사용하게 되면, 해당 인스턴스에 의존하는 다른 부분의 수정이 어려워집니다. 이는 특히 비즈니스 로직이 변경되거나 테스트 상황에서 문제가 됩니다.
  • 매개변수 주입을 통한 해결: 매개변수 주입은 객체를 생성할 때 필요한 의존성을 외부에서 주입받아 외부 의존성을 충돌 없이 교체할 수 있도록 합니다. 이를 통해 강결합을 완화하고 테스트 용이성을 높일 수 있습니다.

예시

싱글턴 패턴을 사용하지 않음으로서 얻는 장점을 예시로 설명드리겠습니다. 예를 들어, 데이터베이스 연결 객체를 싱글턴으로 관리하는 대신, 각기 다른 테스트 환경에서 다른 설정을 주입하여 다양한 테스트 케이스를 구현할 수 있습니다.

싱글턴 사용 시:

class DatabaseConnection {
  private static instance: DatabaseConnection;

  private constructor(){}

  public static getInstance(): DatabaseConnection {
    if (!DatabaseConnection.instance) {
      DatabaseConnection.instance = new DatabaseConnection();
    }

    return DatabaseConnection.instance;
  }
}

이런 코드에서 데이터베이스 연결 정보를 변경하고 싶을 때 싱글턴이 한 번 생성되면 정보 교체가 어렵습니다.

매개변수 주입으로 해결:

class DatabaseConnection {
  private config: DatabaseConfig;

  constructor(config: DatabaseConfig) {
    this.config = config;
  }
}

이렇게 작성할 경우, 각기 다른 테스트나 환경에 맞게 인스턴스를 생성할 수 있습니다.

관련하여 많은 논의가 진행되고 있는 커뮤니티의 질문 예시로, 싱글턴 패턴과 종속성 주입을 활용하는 방법에 관한 질문을 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

next.js 프로젝트

0

11

0

몽고 db 접속 오류

0

8

0

명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이

0

16

1

싱글턴패턴

0

17

2

제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.

0

15

1

Next.js + Tanstack Query BFF 구조 질문

0

20

1

Singleton 관련 질문입니다.

1

36

2

3강 질문

0

22

2

74. 데이터 캐시 - 1 (이론) 강의 영상 누락

0

30

1

코드 자료

0

30

2

undo 구현

0

64

1

[프론트엔드 문서화 관련 질문]

0

71

1

커맨드 패턴 적용

0

111

1

type/interface 정의 파일분리

0

99

2

팩토리 패턴

0

124

2

React 환경에서 클래스형 디자인 패턴 활용에 관한 질문

0

200

2

질문 있습니다.

0

139

2

[공유] State 패턴 강의 최종본 커밋에서 누락된 부분이 존재

1

114

2

팩토리 메서드에 대해서 궁금증이 생겨서 질문드려봅니다!

0

212

2

.

0

105

1

[섹션1/사전에 알아두면 좋은 TS/JS 지식]영상 재생 관련 질문 드립니다.

0

171

2

[12강] 선언식 + bind vs arrow function 어떤거 선호하시나요?

0

198

2

싱글톤 강의

1

308

2

리스코프 치환원칙은 반,공변성과 같은 원리인가요?

0

215

1