전체 글(89)
-
의존성 역전 원칙(Dependency Inversion Principle)
의존성 역전 원칙1. 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다. 둘 모두 추상화에 의존해야 한다.2. 추상화는 구체적인 사항에 의존해서는 안된다. 구체적인 사항은 추상화에 의존해야 한다. 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다. 둘 모두 추상화에 의존해야 한다. 하지만 위의 구성은 Policy Layer가 Mechanism Layer에 의존하고 있기 때문에 DIP원칙을 잘 지키고 있는것이 아니다. 인터페이스는 자신을 구현한 곳에 위치하는것이 아니라 자신을 사용하는곳에 위치하는 것이 더 자연스러운 경우가 더 많다.
2024.07.04 -
DI와 디자인 패턴
디자인 패턴을 구분하는 두 가지 방식이 있다.하나는 사용 목적(purpose)이고 다른 하나는 스코프(scope)이다.스코프에 의해서 분류하면 클래스 패턴과 오브젝트 패턴으로 나눌 수 있다.클래스 패턴은 상속(inherence)을 이용해서 확장성을 가진 패턴으로 만들어지고, 오브젝트 패턴은 합성(composition)을 이용한다. 대부분의 디자인 패턴은 오브젝트 패턴이다. 가능하면 오브젝트 합성을 상속보다 더 선호하라는 디자인 패턴의 기본 객체지향 원리를 따른 것이다. 오브젝트 합성을 이용하는 디자인 패턴을 적용할 때 스프링의 의존관계 주입(Dependenct Injection)을 사용 WebApiExRateProvider에 캐시 기능을 추가하려면?WebApiExRateProvider 코드 수정->데코레..
2024.07.04 -
싱글톤 레지스트리
싱글톤 패턴은 GoF가 소개한 디자인 패턴 중의 하나다. 디자인 패턴 중에서 가장 자주 활용되는 패턴 이기도 하지만 가장 많은 비판을 받는 패턴이기도 하다. 심지어 디자인 책을 쓴 GoF 멤버조차도 싱글 톤 패턴은 매우 조심해서 사용해야 하거나 피해야 할 패턴이라고 말하기도 한다. 싱글톤 패턴은 어떤 클래스를 애플리케이션 내에서 제한된 인스턴스 개수, 이름처럼 주로 하나만 존재하도록 강제하는 패턴이다. 이렇게 하나만 만들어지는 클래스의 오브젝트는 애플리케이션 내에서 전역적으로 접근이 가능하다. 단일 오브젝트만 존재해야 하고, 이를 애플리케이션의 여러 곳에서 공유하는 경우에 주로 사용한다. 싱글톤 패턴은 다음과 같은 단점을 가진다.private 생성자를 갖고있기 때문에 상속할 수 없다.싱글톤은 테스트하기..
2024.07.03 -
구성정보를 가져오는 다른 방법
PaymentServicepackage tobyspring.hellospring;import org.springframework.stereotype.Component;import java.io.IOException;import java.math.BigDecimal;import java.time.LocalDateTime;@Componentpublic class PaymentService { private final ExRateProvider exRateProvider; public PaymentService(ExRateProvider exRateProvider) { this.exRateProvider = exRateProvider; } public Payment prepa..
2024.07.03 -
스프링 컨테이너와 의존관계 주입
지금까지 만든 코드는 아래와 같은 구조로 되어있다. 여기에 스프링을 적용하면 Bean = 오브젝트중에서 애플리케이션을 구성하고 있는 애플리케이션의 기능을 담당하고 제공하는 핵심 클래스의 오브젝트 스프링의 BeanFactory가 앞에서 만든 ObjectFactory가 제공하던 기능을 대체한다. BeanFactory는 ObjectFactory의 구성 정보를 참고해서 동작하게 만든다. ObjectFactorypackage tobyspring.hellospring;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class ..
2024.07.03 -
원칙과 패턴
개방 폐쇄 원칙 (Open-Closed Principle (OCP) )클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다. 높은 응집도와 낮은 결합도(High Coherence and low coupling)응집도가 높다는 것은 하나의 모듈이 하나의 책임 또는 관심사에 집중되어있다는 뜻.변화가 일어날 때 해당 모듈에서 변하는 부분이 크다. 책임과 관심사가 다른 모듈과는 낮은 결합도, 즉 느슨하게 연결된 형태를 유지하는 것이 바람직하다. 전략 패턴(Strategy Pattern)디자인 패턴중에는 전략 패턴이란게 있다. 자신의 기능 맥락(context)에서, 필요에 따라서 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에..
2024.07.03