분류 전체보기
-
생성자 매개변수가 많다면 빌더 사용을 고려해보자JAVA/Effective java 2020. 12. 28. 15:51
static 팩토리 메서드, public 생성자 모두 매개변수가 많이 필요한 경우 불편해진다. 그 예가 NutritionFacts인데 해당 클래스를 한번 봐보자. 몇몇 필드등은 반드시 세팅되어야 되는 필드고 나머지 필드는 Optional 한 필드들도 있다. 기본 타입은 기본값으로 세팅이 될 것이고 참조 타입은 null로 기본 세팅이 될 것이다. 하지만 문제는 굉장히 코드가 길어지고 특히 자바에서는 이것이 뭘 뜻하는지 알 수가 없게 된다. 따라서 이런 생성자를 쓰게 되면 필요 없는 매개변수도 넘겨야 하는 경우가 발생하는데 보통 0 같은 기본값을 넘기게 된다. 동작하기는 하지만 읽기가 어렵고 작성하기도 역시 번거롭다. 그렇다면 매개변수를 받지 않는 생성자를 만드는 건 어떨까? 비어있는 생성자와 세터를 사용해..
-
AGGREGATE와 REPOSITORY 1부JAVA/DDD 2020. 12. 28. 15:39
고객(Customer)은 시스템을 사용해서 상품을 주문(Order)한다. 한 번 주문 시 다수의 상품(OrderLineItem)을 구매할 수 있으며 상품에 대한 이름(name), 가격(price)과 같은 기본 정보는 별도의 상품(Product) 클래스에 정의되어 있다. 고객은 고객 등급에 따라 일 회 주문 시 구매 가능한 금액에 제한(limitPrice 프로퍼티)을 받는다. 앞의 도메인 모델에서 Customer 클래스와 Money 클래스를 표기한 방법에 주목하자. 일반적으로 REFERENCE OBJECT는 독립적인 클래스로 표기하는 반면, VALUE OBJECT는 클래스의 속성으로 표기한다. 좋은 모델이란 충분한 정보를 다루면서도 세부 사항에 집착하지 않고 핵심 주제를 효과적으로 전달하는 모델이다. 주문..
-
자바 데이터 타입, 변수, 배열JAVA/Java 2020. 12. 26. 20:50
목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익히기 프리미티브 타입 종류와 값의 범위 그리고 기본 값 Primitive Type? 기본자료형 혹은 원시자료형이라고 불리는 프리미티브 타입은 값을 할당할 때 변수의 주소 값에 값이 그 자체로 저장되는 데이터 타입이다. 해당 데이터 타입은 값이 할당되면 앞서 살표 보았던 JVM Runtime Data Area 영역 중 Stack 영역에 값이 저장된다. 종류 Java에서 프리미티브 타입의 종류는 총 8 가지이다. byte, short, int, long, float, double, char, boolean 타입이 그것이다. 타입의 종류와 값의 범위 기본값을 다음과 같은 표로 정리해 보았다. 2. 프리미티브 타입과 레퍼런스 타입 Referen..
-
DDD - Value Object와 Reference Object 4부JAVA/DDD 2020. 12. 24. 20:49
앞 선 예제에서는 Customer 클래스 자체에 ENTRY POINT의 컬렉션을 관리하는 인터페이스를 추가함으로써 시스템 내에 ENTRY POINT의 인스턴스가 하나만 유지되도록 만들었다. 또 다른 방법으로는 Customer 클래스와는 분리된 별도의 클래스에 Customer 클래스의 컬렉션 관리 인터페이스를 할당하는 방법이 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public void setUp() { Registrar.init(); } public void testCustomerIdentical() { CustomerRepository customerRepository = new CustomerRepository(); Custom..
-
DDD Value Object와 Reference Object 3부JAVA/DDD 2020. 12. 23. 12:28
DDD 이터니티 조용호 님의 블로그를 보고 다시 한번 공부하기 위해서 정리하게 되었습니다! 생명 주기 제어 객체 지향 시스템은 거대한 객체들의 네트워크로 구성되어 있다. 객체는 상호 연결된 객체들간의 협력을 통해 할당된 책임을 완수한다. 일반적으로 한 객체에서 다른 객체로 이동하기 위해 객체 간의 연관 관계를 이용한다. 따라서 특정한 작업을 수행하기 위해서는 얽히고 설킨 수 많은 객체들 중 어떤 객체에서 항해를 시작할 것인지를 결정해야 한다. SQL 쿼리를 통해 어떤 결과 목록에라도 접근이 가능한 관계형 데이터베이스와 달리 객체 지향 시스템은 임의의 결과 목록에 자동으로 접근할 수 있는 메커니즘을 제공하지 않는다. 모든 객체가 메모리 상에 존재한다고 가정하고 객체와 객체 간의 관계를 항해함으로써 목적 객..
-
DDD - Value Object와 Reference Object 2부JAVA/DDD 2020. 12. 22. 16:38
DDD 이터니티 조용호 님의 블로그를 보고 다시 한번 공부하기 위해서 정리하게 되었습니다! 불변성 불변 클래스는 다음과 같은 규칙을 따른다. 객체를 변경하는 메서드(mutator)를(mutator) 제공하지 않는다. 재정의할 수 있는 메서드를 제공하지 않는다. 모든 필드를 final로 만든다. 모든 필드를 private으로 만든다. 가변 객체를 참조하는 필드는 배타적으로 접근해야 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 ..
-
OOP 객체지향처럼 생각해보기 2책/객체지향의 사실과 오해 2020. 12. 21. 20:43
인터페이스 정리하기 전 글에서 우리가 얻어낸 것은 객체들의 인터페이스입니다. 객체가 수신한 메시지가 객체의 인터페이스를 결정한다는 사실을 기억해야 합니다. 메시지가 객체를 선택했고, 선택된 객체는 메시지를 자신의 인터페이스로 받아들입니다. 각 객체를 협력이라는 문맥에서 떼어내어 수신 가능한 메시지만 추려내면 객체의 인터페이스가 됩니다. 객체가 어떤 메시지를 수신할 수 있다는 것은 그 객체의 인터페이스 안에 메시지에 해당하는 오퍼레이션이 존재한다는 것을 의미합니다. 각 객체별로 설명하면 다음과 같습니다. 손님 객체의 인터페이스 안에는 ‘제품을 주문하라’ 라는 오퍼레이션이 메뉴판 객체의 인터페이스 안에는 ‘메뉴 항목을 찾아라’ 라는 오퍼레이션이 바리스타 객체의 인터페이스 안에는 ‘커피를 제조하라’ 라는 오퍼..
-
OOP 객체지향처럼 생각해보기책/객체지향의 사실과 오해 2020. 12. 21. 20:42
시작 이 글은 객체지향의 사실과 오해라는 책의 07장 함께 모으기 중 커피 전문점 도메인 설계 및 구현 예제에 대한 내용입니다. 객체지향의 사실과 오해라는 책과, 우형의 기술 블로그를 보고 한번 더 정리해보면 기억에 오래 남지 않을까 해서 정리하려고 합니다. 객체 지향의 사실과 오해를 읽으면서 메시지, 책임, 협력, 역할이라는 용어에 대해 배웠고 신선했습니다! 이 책을 보면 객체 지향이라는 것은 협력 관계 속에서 책임을 할당하고 그에 가장 알맞은 역할, 객체를 찾습니다. 해당 객체는 스스로 자율적인 객체로서 수신한 메시지를 책임지기 위해 동작하고 그 책임 안에서 다른 객체에게 책임을 할당하기도 하며 협력 공동체를 만들어 갑니다. 이러한 하나의 책임 주도의 설계는 캡슐화, 높은 응집도와 낮은 결합도로 바뀌..