전체 글

갈매기는 기록기록
· 독서노트
지은이: 김상래 출판사: 한빛미디어 이 책에서 한마디로 정의한 데이터 모델링은 다음과 같다. 데이터 모델링은 2차원 테이블 구조에 관리할 데이터를 어떻게 담는 것이 최적인지 고민하는 과정이다. 함축적이지만 본질을 나타내는 표현이다. 이렇게 고민하는 과정에서 정규화 이론, 마스터 데이터 등 여러 개념들이 생겨났다. 덕분에 배워야 할 것이 많아 보이고 난해해 보이지만 본질은 2차원 테이블 구조에 데이터를 어떻게 담을지 고민하는 과정인 것이다. 이 한마디로 막연하게 생각했던 모델링이 가깝게 느껴진다. 이처럼 책 전반에 걸쳐 모델링이 익숙하지 않은 독자에게 모델링을 어떻게 시작해야 하는지 인도해 준다. 이 책은 18개의 챕터가 존재하는데 크게 업무 데이터 이해, 엔터티 모델링, 데이터 표준화, 관계, 코드, 식..
디자인 패턴 중 Proxy 패턴에 대해 설명합니다. 설명 타겟 객체에 대한 접근을 제어하는 대리인에 해당하는 객체를 중간에 추가하는 패턴입니다. 타겟 객체에 전달되는 요청 전/후 처리를 하고 실질적인 작업은 타겟 객체에 위임합니다. 타겟 객체와 동일한 인터페이스로 클라이언트에 제공되기 때문에 클라이언트는 타겟 객체인지 프록시 객체인지 알 필요가 없습니다. ServiceInterface: Proxy와 Service(타겟)의 공통 인터페이스를 정의합니다. 클라이언트는 해당 인터페이스에 의존하여 Proxy인지 Service인지 알 필요 없습니다. Proxy: Service(타겟) 참조를 필드에 할당하여 실질적인 로직은 Service에게 위임하고 그 전/후 처리를 수행하여 클라이언트에게 결과를 전달합니다. 보통..
디자인 패턴 중 Flyweight 패턴에 대해 설명합니다. 설명 메모리 사용량을 줄이기 위해 여러 객체 간 공통적으로 사용하는 상태를 분리하여 공유하는 패턴입니다. 즉, 여러 객체에서 재사용할 수 있는 부분을 캐싱하여 최적화하는 것입니다. 다음과 같은 상황에서 적용하면 유용합니다. 애플리케이션이 많은 양의 유사한 객체를 필요로 합니다. 그로 인해 메모리 사용량이 높습니다. 이 객체들간 중복된 상태가 존재합니다. 이를 분리하여 여러 객체에 공유할 수 있습니다. Flyweight 패턴은 객체에서 Mutable 데이터와 Immutable 데이터로 나누어 분리하게 됩니다. Mutable 데이터는 Extrinsic state로, Immutable 데이터는 Intrinsic state라고 불립니다. Flyweigh..
디자인 패턴 중 Facade 패턴에 대해 설명합니다. 개념 복잡한 서브 시스템의 일부 기능을 캡슐화하여 심플한 인터페이스로 제공하는 패턴입니다. 라이브러리, 프레임워크등과 같이 복잡한 객체들을 사용하는 서브 시스템을 사용할 경우 기능에 필요한 객체들 생성, 객체 간 의존성 해결, 올바른 순서의 메소드 호출, 파라미터에 사용될 데이터 포맷 지키기 등의 과정이 요구됩니다. 이를 코드에 적용하면 비즈니스 로직과 강한 결합이 생기고 코드가 복잡해져 유지보수가 어려워질 수 있습니다. 서브 시스템에서 클라이언트가 필요로 하는 기능을 제한하여 인터페이스로 제공하는 것이 Facade 패턴입니다. Facade: 복잡한 여러 서브시스템을 클라이언트가 직접 사용할 필요 없도록 캡슐화하여 특정 기능에 대한 인터페이스를 제공합..
디자인 패턴 중 Decorator 패턴에 대해 설명합니다. 개념 래퍼 객체 안에 객체를 두어 기능을 확장하는 구조 패턴입니다. 특정 조건에 따라 객체의 기능이 확장되어야 할 때 객체를 래핑하고 래퍼 객체와 타겟 객체가 동일한 인터페이스로 제공되어 클라이언트에서는 이를 동일하게 취급할 수 있습니다. 동적으로 객체 기능 확장이 필요할 때 사용합니다. Component: 래퍼와 타겟 객체의 공통 인터페이스입니다. 타겟 객체의 메소드를 정의하여 래퍼 객체도 동일한 메소드를 호출할 수 있도록 합니다. ConcreteComponent: 래핑되는 타겟 객체입니다. BaseDecorator: 타겟 객체를 래핑 하는 래퍼 객체의 Abstract class입니다. wrappee로 타겟 객체를 저장하고 특정 메소드가 호출되..
디자인 패턴 중 Composite 패턴에 대해 설명합니다. 개념 트리 구조로 객체를 구성하는 패턴입니다. 객체 구조를 하위 요소가 포함된 복합 객체와 하위 요소가 없는 단일 객체로 구성된 트리 구조로 표현합니다. 클라이언트에 복합 객체와 단일 객체에 대해 알 필요가 없도록 동일한 인터페이스를 제공합니다. 복합 객체의 하위 요소로는 단일 객체뿐 아니라 복합 객체도 포함될 수 있습니다. Component: 클라이언트에게 제공하는 인터페이스입니다. Leaf, Composite에 필요한 주요 로직을 메소드로 정의합니다. Leaf: 하위 요소가 없는 단일 객체입니다. 인터페이스를 구현합니다. Composite: 하위 요소를 포함하는 복합 객체입니다. 하위 요소에게 작업을 위임하고 종합 결과를 반환하는 식으로 인터..
디자인 패턴 중 Bridge 패턴에 대해 설명합니다. 개념 두 개의 독립적인 계층으로 분리 가능한 하나의 클래스를 분리하여 책임을 분산시키는 패턴입니다. 상속 대신 집합(aggregation)을 사용하며, 분리된 각 계층을 Abstraction, Implementation이라고 부릅니다. Abstraction: 하이레벨의 컨트롤 로직으로써, Implementation 객체를 포함하고 클라이언트와 상호작용합니다. 특정 행위들에 대해서 Implementation에게 위임하고 클라이언트에 결과를 반환합니다. Implementation: Abstraction에 포함되는 객체입니다. 특정 행위를 수행하여 Abstraction에게 반환합니다. 클라이언트는 Abstraction 생성 시 Implementation을 ..
디자인 패턴 중 Adapter 패턴에 대해 설명합니다. 개념 현실세계 Adapter와 동일한 개념으로 호환 불가능한 인터페이스를 가진 객체들을 협업 가능하도록 하는 구조 패턴입니다. 다음과 같은 장점이 있습니다. Single Responsibility Principle: 협업을 위한 데이터 변환 로직을 비즈니스 로직과 분리하여 책임을 분산합니다. Open-Closed Principle: 객체의 타입이 늘어나도 비즈니스 로직이 수정될 필요가 없습니다. 클래스 확장을 통해 해결합니다. Dependency Inversion Principle: 구체적인 구현 객체에 의존하지 않고 인터페이스에 의존합니다. 각 인터페이스 간 호환 가능하도록 데이터 변환하는 로직을 캡슐화합니다. 로직 변경이 불가능한 서드파티 라이브..
ooknimm
ooknimm