DDD(Domain-Driven Design)란? 핵심 개념과 계층형 아키텍처
·
CS/Architecture
DDD(Domain-Drvien Design, 도메인 주도 설계) 란?도메인 모델을 기반으로 복잡한 소프트웨어 시스템을 설계하고 개발하는 방법론도메인(Domain)소프트웨어가 해결하고자 하는 문제 영역→ 도메인이 무엇인지 보다는 도메인에 포함되는 것이 무엇인가 정의를 내리는게 더 중요!예를 들어 여행 애플리케이션은 예약, 결제, 여행 일정, 회원 관리 등의 하위 도메인으로 나눌 수 있다. 예약 도메인 안에는 예약 요청, 확정, 취소와 같은 상태와 행위가 존재할 수 있다.이처럼 여러 도메인들이 상호작용하며, 비즈니스 도메인별로 나누어 설계하는 것을 도메인 주도 설계라고 한다.도메인과 객체의 차이점객체(Object)객체는 프로그램에서 특정 개념을 표현하기 위해 상태와 행동을 하나로 묶은 단위이다.객체는 현실..
객체 간의 결합도(Coupling)와 응집도(Cohesion)의 관계
·
CS/Architecture
결합도와 응집도는 소프트웨어 구조 품질을 설명하는 가장 기본적인 두 축이다.결합도 → 모듈 간 의존의 강도를 의미응집도 → 하나의 모듈 내부에서 책임이 얼마나 잘 모여 있는지를 나타냄모듈소프트웨어를 각 기능별로 나누어진 소스 단위모듈은 문맥에 따라 함수, 클래스, 패키지, Gradle 모듈처럼 서로 다른 크기의 소프트웨어 구성 단위를 의미할 수 있다. 결합도와 응집도는 이러한 여러 수준에서 모두 판단할 수 있다.모듈화문제가 복잡하고 큰 문제라면, 이 문제를 작은 부분으로 쪼개나가는 것모듈의 효율성결합도가 낮고 응집도가 높을 수록 모듈화의 효율성이 높다객체지향 언어인지 절차지향 언어인지와 관계없이, 모듈 내부의 관련 기능은 함께 모으고 모듈 사이의 불필요한 의존은 줄이는 것이 좋은 설계의 기본 방향이다.이..
[LeetCode] 1. Two Sum (JAVA)
·
CS/Algorithm
문제문제 링크고민 했던 상황배열 안에서 어떻게 해야 짝을 찾을 수 있을까? i,j 를 써서 j는 난수 인덱스로 지정해서 target 에 맞춰야하나? 라고 생각했었다나의 코드class Solution { public int[] twoSum(int[] nums, int target) { int sum = 0; int[] result = new int[2]; for(int i = 0; i 최선의 경우: O(1)예: nums[0] + nums[1]이 바로 target인 경우최악의 경우: O(n²)예: 정답이 맨 마지막 조합에 있거나, 거의 끝까지 탐색해야 하는 경우평균적으로도: O(n²)다른 사람들의 코드와 비교했을 때 딱히 좋은 성능은 아니였다.다른 사람들의 코드는 ..
멀티모듈 환경에서 공통 모듈을 설계하는 방법: 유스케이스 분리와 인프라 설정 제어 with Spring Boot
·
CS/Architecture
도메인 로직과 유스케이스핵심 비즈니스 로직현실 세계의 비즈니스 규칙 그 자체유스케이스사용자가 시스템을 통해 어떤 목적을 달성하는 흐름예시도메인 로직:- 게시글 제목은 비어 있을 수 없다.- 삭제된 게시글에는 댓글을 달 수 없다.- 작성자만 게시글을 수정할 수 있다.유스케이스:- 게시글 작성하기- 게시글 수정하기- 게시글 삭제하기- 게시글 목록 조회하기즉, 유스케이스는 도메인 로직을 사용해서 하나의 기능 흐름을 완성하는 계층이다.유스케이스는 공통모듈에 담지 않는 것이 좋다유스케이스를 공통 코드로 뺀다면, 사이드 이펙트가 발생하기 쉬울 뿐만 아니라 예외 케이스를 위한 분기 처리도 들어가게 되면서 많은 문제가 발생한다또한 유스케이스는 서비스마다 요구 사항이 다르기 쉽기 때문이다예를 들어 게시글 작성 이라는 이..
[TIL] 객체 지향 프로그래밍 (OOP) 핵심 개념 총정리
·
CS/Architecture
객체 지향 프로그래밍?객체 지향형 프로그래밍 (Object-oriented programming, OOP)은 프로그램을 데이터(객체) 중심으로 구성하여, 객체 간의 상호작용을 통해 동작하도록 설계하는 프로그래밍 패러다임입니다.객체 지향 프로그래밍에서 클래스가 중요한 이유전 글에서 말했듯이 클래스는 무엇이라고 비유할 수 있을까요?(전 글에서 조금 더 추가해서) 클래스는 객체를 생성하기 위한 설계도(blueprint) 또는 템플릿 입니다. 즉, 클래스는 객체가 가져야 할 속성과 동작을 정의하고, 실제 실행 시 이 설계도를 기반으로 객체가 메모리에 생성됩니다.객체는 클래스의 인스턴스입니다.객체가 내포한 데이터는 객체의 ‘상태’라고 하고 객체의 상태는 시간에 따라 바뀔 수 있습니다객체에 행할 수 있는 행동은 ‘..
백준 10810번 Python - 단계별 차근차근 풀어보기
·
CS/Algorithm
📝문제 출처 :https://www.acmicpc.net/problem/10810   고민하기    📝답n, m = map(int, input().split()) baskets = [0] * nfor idx in range(0, m):    i,j,k = map(int, input().split())    for pos in range(i, j+1):        baskets[pos-1] = k        for i in range(len(baskets)):    print(baskets[i],end = ' ')n으로 바구니의 개수를 지정해준다 이때 0을 넣어 바구니를 항상 초기화 시켜줍니다m은 공을 넣을 개수이다 즉 i,j,k 가 몇번 써야하는지 결정해주는 수idx 는 m을 반복하는 반복문이다 ..