JAVA/Architecture 5

[DDD] 아키텍처 계층과 도메인 구성 요소

아키텍처 계층(Layerd Architecture) 표현 영역 (User Interface Layer) 사용자의 요청을 응용 영역에 전달하고, 처리 결과를 다시 사용자에게 전달하는 역할을 하는 영역입니다. MVC 모델에서 View에 해당합니다. 응용 영역 (Application Layer) 사용자가 사용할 기능을 구현한 영역으로, 도메인 영역의 도메일 모델을 사용합니다. 도메인 영역(Domain Layer) 도메인 모델을 구현한 영역입니다. (핵심 비즈니스 기능을 구현한 영역입니다.) 인프라 영역 (Infrastructure Layer) DB 접근, 메세지 전송 등 기술을 구현한 영역입니다. DIP (Dependency Injection Princple) 아키텍처 계층구조는 상위 계층이 하위 계층에 의존..

JAVA/Architecture 2022.02.02

[DDD] Entity와 Value Object

Entity 엔티티는 식별자(identity)를 가지는 객체(Object)입니다. 예를 들어 도서는 ISBN을 식별자로 같은 Entity가 될 수 있습니다. 엔티티는 식별자를 갖기 때문에, Equals 비교에서 식별자가 값이 같으면 같은 객체로 인식합니다. 엔티티는 데이터 변경 이력을 관리하는 대상입니다. 즉 시간이 지남에 따라 정보를 추적할 수 있는 객체입니다. 식별자 생성 방법 채번 규칙 날짜값+일련번호와 같이 정해진 규칙에 따라 식별자를 만드는 방식 UUID(Universally unique identifier) java.util.UUID 클래스를 이용해서 식별자를 만드는 방식 직접 입력 회원 ID나 전화번호, 이메일 등과 같이 사용자가 입력하는 방식 일련번호 DB의 auto_increment 칼럼..

JAVA/Architecture 2022.01.30

의존성 주입 Dependency Injection

의존성 주입 Dependency Injection 의존성 주입이란, 사용하는 객체를 클래스 내부에서 직접 생성/정의하지 않고, 외부에서 독립적으로 생성된 객체를 전달받아 사용하는 것을 의미한다. 런타임(실행) 시점에 외부에서 실제 구현 객체를 전달받아 사용하는 것을 의미한다. 의존성 주입 방법 생성자 주입 Constructor Injection 생성자를 이용해 객체를 주입받는 방법을 말한다. 컴파일 타임에 의존성을 확인할 수 있다. 객체가 올바르게 생성되기 위해서, 필수적으로 주입받아야 할 객체를 명시할 수 있다. public class 컴퓨터(){ private final 키보드 키보드; private final 모니터 모니터; //생성자 constructor public 컴퓨터(키보드 keyborad..

JAVA/Architecture 2022.01.11

객체지향 설계의 5가지 원칙 SOLID

SRP (Single Responsibility principle) 단일 책임 원칙 하나의 클래스는 하나의 책임만 가진다. 클래스의 책임을 완전히 캡슐화한다. public class Movie { private String title; private LocalDateTime runningTime; private int fee; } 영화 클래스의 역할은 영화에 대한 정보를 관리하는 것이지, 요금을 계산하는 것이 아니다. 위의 예시처럼 영화(Movie) 클래스에서 fee(요금)을 직접 관리하도록 하면 안된다. 요금을 직접 관리하게 하면, 요금 계산 정책이 변경될 때마다 영화 구현체의 요금을 하나씩 변경해주어야 하는 일이 발생할 수 있다. OCP (Open/Closed Principle) 개방 폐쇄 원칙 소프..

JAVA/Architecture 2022.01.09

상속과 합성 Inheritance And Composition

상속 Inheritance 상속이란 부모 클래스의 기능을 자식 클래스에서 재사용하는 것을 말합니다. 코드의 중복을 줄이고, 재사용성을 높이기 위해 자바에서 사용하는 기능입니다. 상속의 문제점 불필요한 기능 상속 자식 클래스에는 적합하지 않은 메소드가 상속되는 문제입니다. 예를 들어서 위의 그림에서 고양이 클래스에 "빗질하다"라는 메소드가 있다고 가정해봅니다. 그러면 자식 클래스인 "스핑크스"에서도 "빗질하다"라는 메소드를 사용할 수 있습니다. 하지만 털이 없는 스핑크스에게 "빗질하다"는 적합하지 않은 메소드입니다. 부모 클래스의 기능 변경에 자식 클래스가 영향을 받음 부모 클래스의 기능을 자식 클래스에서 사용하고 있는 경우, 부모 클래스의 기능이 변경된다면, 그 기능을 사용하고 있는 자식 클래스의 기능에..

JAVA/Architecture 2021.12.10