Web 개발
-
도메인 주도 개발5 - Entity와 Value2Web 개발/도메인 주도 개발 2023. 11. 12. 16:06
Entity와 Value2 엔티티 식별자와 벨류 타입 엔티티 식별자의 실제 데이터는 String과 같은 문자열로 구성된 경우가 많다. 신용카드의 번호도 16개의 숫자로 구성된 문자열이며 많은 온라인 서비스에서 회원을 구분할 대 사용하는 이메일 주소도 문자열이다. 식별자에 밸류타입 사용 public class Order{ //OrderNo 타입 자체로 id가 주문번호임을 알 수 있다. private OrderNo id; ... public OrderNo getId(){ return id; } } Money가 단순한 숫자가 아닌 도메인의 '돈'을 의미하는 것처럼 이런 식별자는 단순한 문자열이 아니라 도메인에서 측별한 의미를 지니는 경우가 많이 때문에 식별자를 위한 밸류 타입을 사용해서 의미가 잘 드러나도록 ..
-
도메인 주도 개발3 - 도메인 모델 도출Web 개발/도메인 주도 개발 2023. 10. 10. 15:05
도메인 모델 도출 도메인에 대한 이해 없이 코딩을 시작할 수 없다. 기획서, 유스케이스(Use Case),사용자 스토리와 같은 요구 사항과 관련자와의 대화를 통해 도메인을 이해하고 이를 바탕으로 도메인 초안을 만들어야 비로소 코드를 작성할 수 있다. 화이트보드, 종이와 연필, 모델링 툴 중 무엇을 선택하든 구현을 시작하려면 도메인에 대한 초기 모델이 필요하다. 요구사항 정리 도메인을 모델링할 때 기본이 되는 작업은 모델을 구성하는 1)핵심 구성요소, 2)규칙, 3)기능을 찾는 것이다. 이 과정은 요구사항에서 출발한다. 예시로 주문 도메인과 관련된 몇 가지 요구사항을 알아보자. 최소 한 종류 이상의 상품을 주문해야 한다. 한 상품을 한 개 이상 주문할 수 있다. 각 상품의 구매 가격 합은 상품 가격에 구..
-
도메인 주도 개발2 - 도메인 모델 패턴Web 개발/도메인 주도 개발 2023. 10. 10. 11:39
도메인 모델 패턴 표 1.1 아키텍쳐 구성 영역 설명 사용자 인터페이스(UI) 표현(Presentation) 사용자의 요청을 처리하고 사용자에게 정보를 보여준다.여기서는 사용자는 소프트웨어를 사용하는 사람뿐만 아니라 외부 시스템일 수도 있다. 응용(Application) 사용자가 요청한 기능을 실행한다. 업무 로직을 직접 구현하지 않으며 도메인 계층을 조합해서 기능을 실행한다. 도메인 시스템이 제공할 도메인 규칙을 구현한다. 인프라스트럭처(Infrastructure) 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다. 일반적인 애플리케이션의 아키텍쳐는 [그림 1.5]와 같이 네 개의 영역으로 구성된다. 각 영역의 역할은 [표 1.1]과 같다. 앞서 살펴본 도메인 모델이 도메인 자체를 이..
-
도메인 주도 개발1 - 도메인 모델Web 개발/도메인 주도 개발 2023. 10. 6. 14:37
도메인이란? 개발 입장에서 보면 온라인 서점은 구현해야 할 소프트웨어의 대상이 된다. 온라인 서점 소프트웨어는 온라인으로 책을 판매하는 데 필요한 상품 조회, 구매, 결제, 배송 추적 등의 기능을 제공해야 한다. 이때 온라인 서점은 소프트웨어로 해결하고자 하는 문제 영역, 즉 도메인(domain)에 해당한다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 예를 들어 온라인 서점 도메인은 [그림 1.1]과 같이 몇 개의 하위 도메인으로 나눌 수 있다. 카탈로그 하위 도메인은 고객에게 구매할 수 있는 상품 목록을 제공하고, 주문 하위 도메인은 고객의 주문을 처리한다. 혜택 하위 도메인은 쿠폰이나 특별 할일과 같은 서비스를 제공하고, 배송 하위 도메인은 고객에게 구매한 상품을 전달하는 일련의 과정을 처리한..
-
팩토리 메소드(Factory Method)패턴2Web 개발/디자인 패턴 2023. 6. 25. 15:37
Client.class public class Client { public static void main(String[] args) { Client client = new Client(); Ship whiteship = ShipFactory.orderShip("Whiteship", "study1@mail.com"); System.out.println(whiteship); Ship blackship = ShipFactory.orderShip("Blackship", "study2@mail.com"); System.out.println(blackship); } } Client.class는 Factory를 사용하는 코드이다. Factory 패턴을 적용하지 않는 ShipFactory 클래스에서 orderShip(..
-
팩토리 메소드(Factory Method)패턴1Web 개발/디자인 패턴 2023. 6. 25. 12:57
Factory Method 시나리오 팩토리 메소드 패턴이 해결하려는 문제는 어떤 인스턴스를 생성하는 책임을 구체적인 클래스가 아니 추상적인 인터페이스의 메서드로 감싸는 것이다. 어떤 배를 만드는 공장이 있다고 가정할 때 그 공장은 고잉메리호라는 배 딱 한 종류만을 만들었다. 근데 사업이 잘되어 추후에 써니호라는 것도 만들게 되었다. 처음에는 고잉메리호만 만들었으므로 ShipFactory라는 클래스안에 orderShip이라는 메서드가 있다고 가정한다 해당 메서드는 당연히 static 메서드여도 되고 인스터스 메서드여도 된다. 해당 메서드는 Static 메서드라고 가정을 한다. 그래서 orderShip이라는 static메서드에 고잉메리호 라는 배를 만들어 주었다. 당연히 해당 메소드에는 배를 만드는 과정이 ..
-
싱클톤(Singleton)패턴 구현2Web 개발/디자인 패턴 2023. 6. 17. 13:19
싱글톤 패턴 구현 방법1 1.private 생성자에 static 메서드 public static Settings getInstance(){ if(instance == null){ instance = new Settings(); } return instance; } 해당 어플리케이션에 A쓰레드와 B쓰레드가 있다고 가정했을때 A쓰레드가 위코드의 if문을 평가해서 true가 나왔다고 가정했을 때 A쓰레드가 if문을 통과해 괄호안에 진입한 순간("instance"변수에 Settings 인스턴스를 생성하여 대입하기 직전) B쓰레드도 A쓰레드가 Settings 인스턴스를 만들기 직전 if문을 평가하고 if문 안으로 들어 올 수 있다. 그럼 결과 적으로 A쓰레드도 new Setting()를 실행할 것이고, B쓰레드도..
-
싱글톤(Singleton)패턴1Web 개발/디자인 패턴 2023. 6. 17. 11:47
싱글톤 패턴 인스턴스를 오직 한개만 제공하는 클래스 시스템 런타임, 환경세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. private한 생성자와 static한 메서드를 이용한 구현 Settings.class public class Settings{ } App.class public class App{ public static void mian(String[] args){ Settings setting = new Settings(); Settings setting1 = new Settings(); } } App이라는 class가 있고, Settings라는 class가 있다. 이때 App class에서 Settin..