본문 바로가기

CS/디자인패턴12

[CS] 의존성주입(DI, Dependency Injection)과 의존관계역전원칙(DIP, Dependency Inversion Principle) 의존성주입(DI, Dependency Injection)과 의존관계역전원칙(DIP, Dependency Inversion Principle) 의존성주입(DI, Dependency Injection) 의존성주입(DI, Dependency Injection)이란 메인 모듈(main mudule)이 ‘직접’ 다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈이 ‘간접’적으로 의존성을 주입하는 방식 이를 통해 메인 모듈과 하위 모듈간의 의존성을 조금 더 느슨하게 만들 수 있으며 모듈을 쉽게 교체 가능한 구조로 만듬 '의존한다' 라는 의미 A가 B에 의존한다. == B가 변하면 A에 영향을 미치는 관계 == A → B 를 의미 (B가.. 2023. 9. 3.
[CS] 이터레이터 패턴 이터레이터 패턴? 이터레이터패턴은 이터레이터(iterator)를 사용하여 컨테이너의 요소들에 접근하는 디자인 패턴 컨테이너란 동일한 요소들을 담아놓는 집합 → 배열, 맵 등이 있음 장점 각기 다른 자료구조들을 똑같은 인터페이스로 순회를 쉽게 할 수 있음 이터레이터 패턴은 컬렉션과 순회 로직을 분리함으로써 코드의 유연성, 재사용성, 유지보수성을 개선하며, 다양한 컬렉션을 일관된 방식으로 다룰 수 있는 강력한 디자인 패턴 js const mp = new Map() mp.set('a', 1); mp.set('b', 2); mp.set('cccc', 3); const st = new Set() st.add(1); st.add(2); st.add(3); const a = [] for (let i = 0; i < .. 2023. 9. 2.
[CS] 팩토리 패턴 팩토리 패턴? 팩토리 패턴이란 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴 장점 상위 클래스에서는 객체 생성방식에 대해 알 필요가 없어져 유연성을 가짐 객체 생성 로직은 하위 클래스에서만 관리 되기 때문에 유지 보수성이 증가됨 상위 클래스와 하위 클래스가 분리되기 때문에 로직 관리하기가 편함 js // 상위 클래스 class CoffeeFactory { // static - 정적메서드 static createCoffee(type) { const factory = factoryList[type] return factory.createCoffee() } } class Latte { constructor() { this.. 2023. 9. 1.
[CS] 싱글톤 패턴을 구현하는 7가지 방법 싱글톤 패턴을 구현하는 7가지 방법 1. 단순한 메서드 호출 싱글톤 패턴 생성 여부를 확인하고 싱글톤이 없으면 새로 만들고 있다면 만들어진 인스턴스를 반환 public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { // 호출이 되었을 때 인스턴스 생성 if (instance == null) { instance = new Singleton(); } return instance; } } 그러나 이 코드는 메서드의 원자성이 결여되어 있음. 멀티스레드 환경에서는 싱글톤 인스턴스를 2개 이상 만들 수 있음 thread - Java public class .. 2023. 8. 31.
[CS] 싱글톤 패턴 싱글톤 패턴 싱글톤패턴은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 장점 : 인스턴스 생성에 많은 코스트가 드는 데이터베이스 연결 모듈에 많이 쓰이며 인스턴스 생성을 효율적으로 함(인스턴스 생성할 때 드는 비용 줄어듬), I/O 바운드 작업에 많이 사용 단점 : 의존성이 높아지고 TDD를 할 때 불편함, 단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행할 수 있어야함. 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 '독립적인' 인스턴스를 만들기 어려움 ※ A가 B에 대한 의존성이 있다 → B가 변할 때 A도 변한다는 의미 싱글톤이 아닌 클래스 class Rectangle { constructor(height, width).. 2023. 8. 30.
[CS] 디자인 패턴, 라이브러리와 프레임워크 차이 디자인패턴이란? 디자인패턴 디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것을 의미 디자인패턴은 라이브러리나 프레임워크를 만드는데 기초적인 원리가 되며 지금도 많은 라이브러리, 프레임워크가 어떠한 디자인패턴을 기반으로 만들어지고 있음 디자인패턴의 의의 여러 문제를 해결하는데 있어서 영감을 받을 수도 있고 팀원들과 협업할 때 어떤 문제가 나타났을 때 빠른 의사소통이 가능 디자인패턴의 종류 생성패턴, 구조패턴, 행동패턴 생성패턴 생성패턴은 객체 생성 방법이 들어간 디자인패턴 싱글톤, 팩토리, 추상팩토리, 빌더, 프로토타입패턴 구조패턴 구조패턴은 객체, 클래스 등으로 큰 구조를 만들 때 유연하고 효율적으로 만드.. 2023. 8. 29.