작성
·
61
·
수정됨
1
강결합되는게 왜 싱글턴 패턴의 단점인지 연결이 잘 되지 않아 질문드립니다. 매개변수 주입같은 해법을 주신 것 처럼, 싱글턴 패턴과는 별개의 문제로 느껴지는데, 싱글턴을 안 하면 어떻게 나아지는지 예제 같은게 있을까요?
답변 2
0
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;
}
}
이렇게 작성할 경우, 각기 다른 테스트나 환경에 맞게 인스턴스를 생성할 수 있습니다.
관련하여 많은 논의가 진행되고 있는 커뮤니티의 질문 예시로, 싱글턴 패턴과 종속성 주입을 활용하는 방법에 관한 질문을 참고하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
네 싱글턴 패턴만의 단점은 아니고 강결합되는 모든 객체들의 단점이라고 보시면 됩니다.