디자인패턴
소프트웨어 설계시 발생했던 문제점을 객체 간 상호관계 등등 이용해서 해결할 수 있도록 하나의 규약으로 만들어 놓은것.설계시 서로 간의 공통되는 설계문제가 존재하는데 이를 처리하는 해결책도 공통점이 있어서 그걸 패턴으로 묶음. 주로 객체지향프로그래밍 설계시 자주 나타남
싱글톤패턴(singleton pattern)
- 하나의 클래스에는 오직 하나의 인스턴스만 가지는 패턴
- DB연결모듈에 많이 사용
- 의존성이 높아지고, 비용이 줄어듬
*인스턴스는 일반적으로 실행중인 프로세스, 클래스의 현재 생성된 오브젝트를 말함
자바
class Singleton {
static final Singleton instance = new Singleton(); //final을 써서 상수로 못바꾸게 만들어야됨
private Singleton() { //접근제한 싱글톤의 특징임
//초기화
}
public Singleton getInstance() {
return instance;
}
}
사전 초기화방법과 사후 초기화 방법이 있는데, 클래스 로딩시 인스턴스를 생성하는 방법과, 인스턴스를 실제로 사용할 시점에 인스턴스를 생성하는 방법이 있다.
자바스크립트
리터럴또는 새로운 오브젝트로 객체를 생성시 다른 어떤 객체와도 같지않아 싱글톤패턴구현가능
const obj = {
a: 566565
}
const obj2 = {
a: 566565
}
console.log(obj === obj2)
// false
obj와 obj2는 같은 값을 가지고 있지만 다른 인스턴스를 가짐
데이터베이스연결모듈
const URL = 'mongodb://localhost:8080'
const createConnection = url => ({"url" : url})
class DB {
constructor(url) {
if (!DB.instance) {
DB.instance = createConnection(url)
}
return DB.instance
}
connect() {
return this.instance
}
}
const a = new DB(URL)
const b = new DB(URL)
console.log(a === b) // true
DB.instance라는 인스턴스로 a,b를 생성
싱글톤 패턴의 단점
- Test Driven Development를 할 때 걸림돌이 됨
- 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이라 독립적인 인스턴스를 만들기 힘듬
- 의존성주입(DI)를 통해 결합을 느슨하게 만들 수 있음
의존성주입
메인모듈이 있고 DI(의존성주입)을 해서 간접적으로 의존성을 주입하는 방식임(디커플링)
모듈들을 쉽게 교체할 수 있는 구조가 되서 테스팅하기 쉽다.
다만, 클래스 수가 늘어나서 복잡성이 증가 될 수 있음
의존성 중비은 상위모듈은 하위모듈에서 어떤것도 가져오지 않는걸 기반으로 만들어야되며 둘다 추상적이어야 함
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'🥝CS' 카테고리의 다른 글
[ComputerScience]디자인패턴 // MVC 패턴 - 모델,뷰,컨트롤러 패턴 외 패턴 (0) | 2022.08.10 |
---|---|
[ComputerScience]디자인패턴 // 프록시패턴과 프록시서버 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 전략패턴과 옵저버패턴 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 팩토리패턴 (0) | 2022.08.10 |
[ComputerScience] 라이브러리 vs 프레임워크 (0) | 2022.08.08 |
댓글