Clean Code

    [Clean Code] 만들면서 배우는 클린 아키텍처 후기

    프로젝트에 헥사고날 아키텍처를 도입하면서 접하게 된 책이다. 첫 장부터 마지막 장까지 빠트릴 내용없이 굉장히 흥미롭게 읽었다. 책을 읽기 전, 읽은 후를 되새김질하며 계층형 아키텍처에서 헥사고날 아키텍처로 변환하면서 느낀점들을 서술하고자 한다. 계층형 아키텍처의 문제점 프로그램의 아키텍처가 데이터베이스에 의존하게 된다 당연히 어플리케이션 데이터의 기반은 데이터베이스가 아닌가? 라고 생각할 수 있다. 물론 어느정도 맞는 말이다. 모놀로틱 서비스에선 하나의 데이터베이스 모델만을 기반으로 아키텍처를 설계했고, 외부에서 데이터를 가져오는 일이 드물었다. 하지만 서비스는 점점 거대해지고 MSA 로의 변환이 필수가 되어버린다. 이렇게 되면 도메인 모델은 web에서 뿐만 아니라 gRPC, kafka 등등 다양한 인프..

    [Design Pattern] 구조 패턴 - 퍼사드 패턴

    github 코드 https://github.com/yaini/Spring_Study/tree/spring-3-design-pattern-structural/design-pattern/src/main/java/structural Facade 건물의 출입구로 이용되는 정면 외벽 부분 즉, 건물 안쪽은 복잡할지라도 사용자는 건물의 정면만 볼 수 있도록 해준다는 뜻이다. 퍼사드 패턴 클래스 라이브러리와 같은 어떤 소프트웨어의 커다란 코드 부분에 대한 간략화된 인터페이스를 제공한다. 소프트웨어 라이브러리를 쉽게 사용할 수 있게 해준다. 라이브러리의 세부 코드에 의존하는 일을 감소시켜 준다. 전체 코드 public class Facade { public static void main(String[] args) {..

    [Design Pattern] 구조 패턴 - 브리지 패턴

    github 코드 https://github.com/yaini/Spring_Study/tree/spring-3-design-pattern-structural/design-pattern/src/main/java/structural 브리지 패턴 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴 기능과 구현에 대해 두 개의 별도의 클래스로 구현 구현부는 객체에서 동작을 처리하기 위해, 추상부는 확장을 위해 존재한다. 어댑터 패턴이 추가 요구사항을 위해 기능을 추가하는 반면 브리지 패턴은 설계 진행 중에 의도적으로 레이어를 분리시킨다. Abstraction: 기능 계층의 추상 인터페이스 RefindAbstraction: Abstraction을 상속하여 기능을 제공하는 클래스 Implemen..

    [Design Pattern] 구조 패턴 - 어댑터 패턴

    github 코드 https://github.com/yaini/Spring_Study/tree/spring-3-design-pattern-structural/design-pattern/src/main/java/structural 어댑터 다른 전기나 기계 장치를 서로 연결해서 작동할 수 있도록 만들어 주는 도구 어댑터 패턴 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴 호환성이 없는 인터페이스를 함께 동작할 수 있도록 만들어 준다. 또한 기존 클래스의 소스코드를 수정하지 않고 기존 인터페이스에 맞춰서 동작이 가능하도록 한다는 장점이 있다. 객체 어댑터 class CardObjectAdapter implements Card{ TrafficCard trafficCard; public ..

    [Design Pattern] 구조 패턴 - 컴포지트 패턴

    github 코드 https://github.com/yaini/Spring_Study/tree/spring-3-design-pattern-structural/design-pattern/src/main/java/structural 컴포지트 패턴 복합 객체와 단일 객체를 동일하게 취급할 때 사용하는 패턴 객체들의 관계를 트리 구조로 구성하여 전체-부분 관계로 표현할 수 있다. Component 복합 객체와 단일 객체가 동일하게 가지는 속성과 기능을 가진 인터페이스 Leaf 컴포지트 패턴에서 단일 객체를 의미한다. 트리구조에서 Composite의 자식 역할을 한다. Composite 컴포지트 패턴에서 복합 객체로 Component 인터페이스를 통해 자식 객체를 관리한다. 컴포지트 패턴의 가장 대표적인 예가 폴..

    [Design Pattern] 구조 패턴 - 데코레이터 패턴

    github 코드 https://github.com/yaini/Spring_Study/tree/spring-3-design-pattern-structural/design-pattern/src/main/java/structural 데코레이터 패턴 주어진 상황 및 용도에 따라 객체에 대한 책임을 덧붙이는 패턴 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 대안 자바는 다중 상속을 지원하지 않기 때문에 추가해야 할 기능의 종류가 많은 경우 데코레이터 패턴을 사용할 수 있다. 데코레이터 클래스와 데코레이터를 적용할 클래스는 합성 관계를 통해 표현된다. 합성(has-a) 관계 생성자에서 필드에 대한 객체를 생성하는 경우 전체 객체가 없어지면 부분 객체도 없어진다. 상속에 의해 코드를 재사용하는 것 대신, 객..