전체 글 3

[디자인 패턴] 유연한 설계를 하려면 OCP와 DIP를 지켜라

개방 폐쇄 원칙은 “확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다” 다시말해, “객체의 기능을 확장할 수 있으면서 기존의 코드(클라이언트)는 수정하지 않는다”런타임 의존성과 컴파일타임 의존성OCP는 런타임 의존성과 컴파일타임 의존성에 관한 이야기다.  Movie는 DiscountPolicy(구현체가 아닌 인터페이스나 부모클래스)에 의존하기 떄문에 자식 클래스로 OverlappedDiscountPolicy 클래스를 추가하더라도 기존의 코드는 변하지 않는다.변경의 이유가 1가지이다. 그건 바로 서비스 계층의 할인 정책 인터페이스추상화OCP의 핵심은 추상화에 의존하는 것이다. ’폐쇄’를 가능하게 하는 것은 추상화에 대한 의존성의 방향이다.public class Movie { //... pr..

아키텍처 2025.03.24

[클린 아키텍처] 의존성 역전하기

단일 책임 원칙SRP: 하나의 컴포넌트는 오로지 한 가지 일만 해야 하고, 그것을 올바르게 수행해야 한다.단일 책임 원칙의 실제 정의는 “컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다.”‘책임’은 ‘변경할 이유’로 해석해야 한다.(Reason to change)만약 컴포넌트를 변경할 이유가 한 가지라면 우리가 어떤 다른 이유로 소프트웨어를 변경하더라도 이 컴포넌트에 대해서는 전혀 신경 쓸 필요가 없다. 여전히 우리가 기대한 대로 동작하기 떄문이다.단일 책임 원칙을 위배하기 때문에 시간이 갈수록 변경하기가 더 어려워지고 그로 인한 비용도 증가한다. 변경할 이유가 많이 쌓인 후에는 한 컴포넌트를 바꾸는 것이 다른 컴포넌트가 실패하는 원인으로 작용할 수 있다. 의존성 역전 원칙도메인 코드는 애플리케이션에서..

아키텍처 2025.03.23

[클린 아키텍처] 계층형 아키텍처(Layered Architecture)의 문제는 무엇일까?

일반적인 3계층 아키텍쳐(전형적인 웹 애플리케이션 구조): 웹 → 도메인 → 영속성계층형 아키텍처의 문제점은 무엇일까? 코드에 나쁜 습관들이 스며들기 쉽게 만들고 시간이 지날수록 소프트웨어를 점점 더 변경하기 어렵게 만드는 수많은 허점들을 노출한다.계층형 아키텍처는 데이터베이스 주도 설계를 유도한다정의에 따르면 전통적인 계층형 아키텍처의 토대는 데이터베이스이다.웹 계층은 도메인 계층에 의존하고, 도메인 계층은 영속성 계층에 의존하기 때문에 자연스레 데이터베이스에 의존하게된다.우리는 보통 비즈니스를 관장하는 규칙이나 정책을 반영한 모델을 만들어서 사용자가 이러한 규칙과 정책을 더욱 편리하게 활용할 수 있게 한다. 이때 우리는 상태(state)가 아니라 행동(behavior)을 중심으로 모델링한다. 어떤 애..

아키텍처 2025.03.23