728x90
반응형
1. 디자인패턴
소프트웨어 디자인 패턴이란 소프트웨어 설계에서 자주 발생하는 문제를 해결하기 위해 개발된 재사용 가능한 솔루션입니다.
디자인 패턴은 설계 문제의 구조화된 해결책을 제공하며, 소프트웨어 시스템의 유지 보수성, 확장성, 유연성 등을 개선하는 데
도움을 줍니다.
2. 싱글톤 패턴
- 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴을 말합니다.
- 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만, 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어서 이를 기반으로 로직을 만드는데 쓰입니다.
- 보통 데이터베이스 연결 모듈에 많이 사용합니다.
- 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하면서 사용합니다.
- 이러한 특징 덕분에 인스턴스를 생성할 때 드는 비용이 줄어든다는 장점을 가지고 있습니다.
- 반면 다른 모듈들이 공유하면서 사용하기 때문에 의존성이 높아진다는 단점을 가지고 있습니다.
3. 자바스크립트의 싱글톤 패턴
- 자바스크립트에서는 리터럴 {} 또는 new Object로 객체를 생성하게 되면 다른 어떤 객체와도 같지 않기 때문에 싱글톤 패턴을 구현할 수 있습니다.
- 이 예제에서는 생성자를 사용하여 Singleton이라는 클래스를 만듭니다.
- 생성자 내부에서 클래스의 인스턴스가 이미 존재하는지 확인합니다.
- 그렇지 않은 경우 instance 변수에 this를 할당합니다.
- 인스턴스가 이미 존재하는 경우 기존 인스턴스를 반환합니다.
- 이렇게 하면 Singleton 클래스의 인스턴스 하나만 생성되고 새 인스턴스를 생성하기 위한 모든 후속 호출 간에 공유됩니다.
4. 자바에서의 싱글톤 패턴
- 자바로는 중첩 클래스를 이용해서 만드는 방법이 가장 대중적입니다.
- 이 예제에서 Singleton 클래스에는 클래스 외부에서 직접 인스턴스화하는 것을 방지하기 위한 전용 생성자가 있습니다.
- getInstance() 메서드는 정적으로 선언되어 싱글톤 인스턴스에 대한 액세스를 허용합니다.
- 싱글톤 인스턴스에 액세스하려면 Singleton.getInstance()를 호출하면 됩니다.
- 이러한 방식으로 중첩된 클래스를 활용하면 싱글톤 인스턴스가 효과적으로 숨겨지고 getInstance() 메서드를 통해서만 액세스할 수 있어 싱글톤 동작이 적용됩니다.
- 실제 싱글톤 인스턴스는 SingletonHolder라는 중첩된 클래스 내에 생성되고 유지됩니다.
- 중첩 클래스를 사용하면 중첩 클래스의 정적 초기화 덕분에 싱글톤 인스턴스가 느리게 초기화되고 스레드로부터 안전한지 확인할 수 있습니다.
5. 싱글톤 패턴의 단점
- 싱글톤 패턴은 TDD(Test Driven Development)를 할 때 방해가 됩니다.
- TDD를 할 때 단위 테스트를 주로 하는데, 단위 데스트는 테스트가 서로 독립적이어 합니다.
- 또한, 테스트를 할 때 어떤 순서로든 실행할 수 있어야 합니다.
- 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 독립적인 인스턴스를 만들기 어렵습니다.
6. 의존성 주입
- 싱글톤 패턴은 사용하기가 쉽고 실용적이지만 모듈 간의 결합을 강하게 만들 수 있다는 단점이 있습니다.
- 이때 의존성 주입(DI, Dependency Injection)을 통해 모듈 간의 결합을 조금 더 느슨하게 만들어 줄 수 있습니다.
*모듈 간 결합이 강해지면 생기는 단점은? -한 모듈의 변경이 다른 모듈에 상당한 영향을 미칠 수 있으므로 시스템 전체에 광범위한 수정이 필요해집니다. |
6.1 의존성 주입의 장점
- 우선 모듈들을 쉽게 교체할 수 있는 구조가 되어서 테스팅하기 쉽고 마이그레이션하기도 수월합니다.
- 또한, 애플리케이션 의존성 방향이 일관되고, 애플리케이션을 쉽게 추론할 수 있습니다.
- 모듈 간의 관계들이 조금 더 명확해진다는 장점이 있습니다.
6.2 의존성 주입의 단점
- 단점으로는 모듈들이 더욱 더 분리되므로 클래스 수가 증가하여 복잡성이 증가될 수 있습니다.
- 약간의 런타임 패널티가 생기기도 합니다.
7. 의존성 주입 원칙
- 상위 모듈은 하위 모듈에서 어떤 것도 가져오면 안 됩니다.
- 또한, 둘 다 추상화에 의존해야 하며, 이때 추상화는 세부 사항에 의존하지 말아야 합니다.
728x90
반응형
'CS > 디자인 패턴' 카테고리의 다른 글
[디자인패턴] MVC 패턴 이해하고 활용하기 (0) | 2024.01.15 |
---|---|
[디자인패턴] 이터레이터 패턴 With Swift, Java (0) | 2023.10.29 |
[디자인패턴] 프록시 패턴(Proxy Pattern) (2) | 2023.10.22 |
[디자인패턴] 옵저버 패턴(Observer Pattern) (2) | 2023.10.21 |
[디자인 패턴] 팩토리 패턴과 전략 패턴의 개념과 예제 소스 (2) | 2023.10.02 |