일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 알고리즘
- 신입
- 메모리
- github
- CS
- java
- 스터디
- 우리카드
- 프로그래밍
- 스프링
- 정보처리기사
- 뮤텍스
- OS
- 자바
- 공채
- package-private
- 신입사원
- spring
- 디지털
- 세마포어
- 개발
- 이펙티브 자바
- IT
- 깃
- 컴퓨터과학
- 컴퓨터공학
- Public
- Effective Java
- 운영체제
- 깃허브
Archives
- Today
- Total
주니어 개발자 성장기
1. 싱글톤 패턴 - 기본 본문
디자인 패턴이란?
In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design.
출처: 위키피디아
소프트웨어 설계 중 특정한 상황에서 흔히 일어나는 문제들에 대한 일반적이고 재사용 가능한 해결책이라고 할 수 있다.
수천가지의 디자인 패턴들이 존재하지만 제일 유명한 것은 "Gang of Four" design patterns 에 나온 23가지 디자인 패턴들이다.
싱글톤 패턴
싱글톤 패턴은 하나의 클래스가 오직 하나의 인스턴스만을 갖는 것을 보장하는 생성 디자인 패턴(creational design pattern)이다.
장점
- 단 하나의 인스턴스를 보장하기 때문에 전역적으로 상태를 관리하는 매니저 성격의 클래스에 유용하게 쓰인다.
- 인스턴스 생성 비용을 줄일 수 있다.
단점
- 불필요한 글로벌 상태(Global state)를 만드는 안티패턴이다.
- 동시에 2가지 문제를 해결하여 SRP(단일 책임 원칙)을 위반한다.
- 오직 1개의 인스턴스를 갖는다.
- 전역적인 접근(static method로 instance를 가져오므로)이 가능하다.
- 다른 클래스들과의 의존성, 결합도(Coupling)을 높여 단위 테스트를 어렵게 한다.
Common uses
- 데이터베이스 연결 모듈
- Logging
의존성 주입
의존성 주입(DI: Dependency Inject)를 통해 싱글톤의 결합도를 낮출 수 있다.
- 의존성 주입을 통해 단위 테스트하기 쉬운 구조가 된다.
- 추상화 레이어를 기반으로 구현체를 주입해주기 때문에 의존성 방향이 일관되고, 모듈간의 관계가 명확해진다.
단점
- 클래스 수가 늘어나 복잡성이 늘어날 수 있으며 약간의 런타임 페널티가 생길 수 있다.
의존관계 역전 원칙(Dependency Inversion Principle)
- 상위 모듈은 하위 모듈에 의존해서는 안 되고 둘 다 추상화에 의존해야 한다.
- 추상화는 세부 사항에 의존해서는 안 되고 세부사항(구체적인 구현)은 추상화에 의존해야 한다.
DIP를 지킴으로써 상위 모듈과 하위 모듈 간의 의존성을 낮출 수 있다.
+) 스프링 IoC 컨테이너에서는 의존성 주입을 통해 싱글톤 인스턴스의 Global Access를 차단할 수 있다.
'CS스터디 > 디자인 패턴' 카테고리의 다른 글
2. 싱글톤 패턴 - 구현(Java) (0) | 2023.03.12 |
---|