
애그리거트란? 위 처럼 백 개 이상의 테이블을 위처럼 ERD(Entity Relationship Diagram)로 모두 표시하면 테이블관의 관계를 파악하느라 큰 틀에서 데이터 구조를 이해하는데 어렵다. 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하고 전반적인 구조나 큰 수준에서 도메인 간의 관계를 파악하기 어려워진다. 주요 도메인 요소 간의 관계를 파악하기 어렵다는 것은 코드를 변경하고 확장하는 것이 어려워 진다는것이다. 상위 수준에서 도메인 모델의 관계를 알아야 전체 모델을 망가뜨리지 않으면서 추가 요구 사항을 모델에 반영한다. 당장 돌아가게끔은 코드를 추가할 수 있지만 장기적으로 봤을 때는 스파게티 코드가 될 확률이 높으며 유지보수가 어려워진다. 복잡한 도메인을 이해하고 관리하기 ..

표현,응용,도메인,인프라스트럭처 는 아키텍처를 설계할 때 출현하는 전형적인 4개의 영역이다. 표현: 사용자의 요청 -> 응용 영역(서비스) -> 사용자 응답 응용: 응용 서비스는 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임. 밑 코드도 주문 취소 로직을 직접 구현하지 않고 Order 객체에 취소 처리를 위임하고 있다. public class CancelOrderService { @Transactional public void cancelOrder(String orderId){ Order order = findOrderById(orderId); if (order == null) throw new OrderNotFoundException(orderId); order.cancel(); } .....

문자열에서 반복되는 문자를 제거하고 문자를 추출하면 된다 ex) stkrktti ----> srkti import java.util.Scanner; public class problem6 { public static void main(String[] args) { problem6 prob = new problem6(); Scanner sc = new Scanner(System.in); String word = sc.nextLine(); System.out.println(prob.solution(word)); } public String solution(String word) { StringBuilder answer = new StringBuilder(); char[] arr = word.toCharArr..

https://www.acmicpc.net/problem/5585 Scanner sc = new Scanner(System.in); int pay = sc.nextInt(); int[] arr = new int[]{500,100,50,10,5,1}; int change = 1000 - pay; // 잔돈 초기화 int count = 0; // 숫자 세는 변수 for(int i=0; i= arr[i]){ count += change/arr[i]; //잔돈 카운트 change = change%arr[i]; //나머지 거스름돈 } } System.out.println(count); 입력: 380 출력: 4 거스름돈: 620엔 -> 500엔1개 100엔1개 10엔 2개 성공!

문제 문자 배열을 뒤집어보자 ex) KIMCHI -> IHCMIK import java.util.ArrayList; import java.util.Scanner; public class problem4 { public static void main(String[] args) { problem4 prob = new problem4(); Scanner sc = new Scanner(System.in); int input = sc.nextInt(); String[] str = new String[input]; for(int i=0; i

https://www.acmicpc.net/problem/11399 Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] arr = new int[num]; for(int i=0; i

문제: 한개의 문자를 입력받고, 또 한 단어를 입력받은 후 그 단어가 처음에 받은 문자를 몇 개 포함하는지 알아내야된다. 예제) a, apache ----> 2 ( apache가 a를 두개 포함됨) public static void main(String[] args) { Scanner in = new Scanner(System.in); String word = in.next(); // 단어 받기 char letter = in.next().charAt(0); // 알파벳 받기 int count = 0; // 단어가 알파벳 포함시 카운트 word = word.toUpperCase(); // 단어 대문자로 바꾸기 letter = Character.toUpperCase(letter); // 알파벳 대문자로 바꾸..

문제: 대문자를 소문자로, 소문자를 대문자로 바꾸기! 예제) abDeFg ---> ABdEfg 이런식으로 서로 바꿔주면 된다 import java.util.Scanner; public class shiftLetter { //////문제 2) 대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변호나하는 프로그램을 작성하세요 public static void main(String[] args){ Scanner in=new Scanner(System.in); String word = in.nextLine(); char[] arr = word.toCharArray(); //문자 배열로 넣기 word = ""; //문자 초기화 for(int i=0; i

개요 사이드 프로젝트를 시작하게 되었다. 처음부터 진행하는게 아닌 진행되어있는 프로젝트에 합류했다. 처음보는 패키지 구조였는데 한눈에 파악하기가 쉬웠고 오히려 이제까지 개발하던 구조보다 더 확장성 있고 가독성이 좋다고 느꼈다. 그 이유는 메인 도메인 안에 하위 도메인과 도메인이 가지고있는 비즈니스 로직들을 한번에 파악할 수 있어 도메인의 역할을 쉽게 파악할 수 있엇다. 알고보니 해당 구조는 DDD(Domain Driven Design)를 기반으로 만들어졌다. 사실 이전까지 DDD에 대해 많이 들어는 봤지만 실제로 적용해 본 적은 없었다.이제 프로젝트를 진행하면서 내가 DDD를 적용하고 개발을 해야되는데 많이 부족하다 느껴 도메인 주도 개발 시작하기 by 최범균 책으로 DDD를 공부하기 시작했다. 도메인이..

개요 갑자기 문득 @RequiredArgsConstructor 를 사용하면서 의문점이 들었다. 두루뭉실하게 왜 사용하는지는 알겠는데 이 방법을 권장하는 이유에 대해서 명확히 설명을 못하겠어서 다시 공부할 겸 글을 작성하게되었다. 기본적으로 생성자 주입 방법에는 대표적으로 3개가 있다. 생성자 주입: 생성자를 통해 의존성을 주입 수정자 주입: Setter를 사용해 의존성을 주입 필드 주입: 필드를 사용해 의존성 주입 생성자 주입 public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy){ this.memberRepository = memberRepository; this.discountPolicy = di..