강결합
134
작성한 질문수 12
강결합되는게 왜 싱글턴 패턴의 단점인지 연결이 잘 되지 않아 질문드립니다. 매개변수 주입같은 해법을 주신 것 처럼, 싱글턴 패턴과는 별개의 문제로 느껴지는데, 싱글턴을 안 하면 어떻게 나아지는지 예제 같은게 있을까요?
답변 2
0
(AI 답변이 전부라면) 싱글턴 패턴만의 단점은 아니고 global state라면 가지는 단점을 당연히 싱글턴도 가진다로 이해했습니다
0
안녕하세요, 인프런 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





