분류 전체보기 64

도메인 모델 패턴, 트랜잭션 스트립트 패턴

도메인 모델 패턴 도메인을 모든 사람이 이해하고 공유 가능하도록 단순화시킨 모델 DDD(Domain Driven Design) 개발 방식을 따르는 패턴 서비스 계층에 비즈니스 로직이 거의 없고 엔티티 내부에 비즈니스 로직을 구현해 엔티티의 객체지향 활용 엔티티 안 비즈니스 로직이 구현되어 있어 DTO와 엔티티의 차이를 쉽게 파악 가능하지만 각 객체들의 관계를 정립해야 하며 DB 사이 매핑 관계를 더 고려해야함 도메인 모델 패턴을 적용한 코드 (김영한 실전 스프링부트와 JPA와 활용1 중 일부) @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order {..

backend/springboot 2024.04.04

Backtracking

Brute Force 단순히 가능한 모든 경우 확인 테스트 케이스의 크기에 따라 소요 시간이 엄청나게 커질 수 있음 표본의 수와 시간복잡도 고려해 선택해야함 매직넘버 100,000,000 총 연산수가 약 1억회 이하 -> 충분히 완전탐색으로 접근 가능 대략적인 완전탐색 가능 기준으로 잡으면 유용 재귀함수 이용 Backtracking 완전탐색처럼 모든 경우를 탐색하나 중간 중간에 조건에 맞지 않는 케이스를 가지치기하여 탐색 시간 줄임 일반적으로 완전탐색에 비해 시간적으로 효율적 탐색 중 조건에 맞지 않는 경우 이전 과정으로 돌아가야하기 때문에 재귀 사용하는 경우 많음 조건을 어떻게 설정하고 틀렸을 시 어떤 시점으로 돌아가야할지 설계 잘해야함 예제 import java.io.*; import java.mat..

algorithm/정리 2024.04.03

99클럽 코테 스터디 3일차 TIL - java String / java 약수 구하기 최적화 알고리즘

String 사용 빈도수 높은 method 리턴 타입 메소드 이름(매개 변수) 설명 char charAt(int index) 특정 위치의 문자를 리턴합니다. boolean equals(Object anObject) 두 문자열을 비교합니다. byte[] getBytes() byte[]로 리턴합니다. byte[] getBytes(Charset charset) 주어진 문자셋으로 인코딩한 byte[]로 리턴합니다. int indexOf(String str) 문자열 내에서 주어진 문자열의 위치를 리턴합니다. int length() 총 문자의 수를 리턴합니다. String replace(CharSequence target, CharSequence replacement) target 부분을 replacement로 대..

algorithm/정리 2024.04.03

99클럽 코테 스터디 2일차 TIL - 백준 11279 (최대 힙) java

java로 최대/최소 힙 구현 -> PriorityQueue 사용 import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N; N = Integer.parseInt(br.readLine()); int num; PriorityQueue pq = new PriorityQueue((a,b)->(b-a)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < N; i..

99클럽 코테 스터디 1일차 TIL - springboot 의존성 주입

의존성 주입 스프링 컨테이너에서 객체 Bean을 먼저 생성해두고 생성한 객체를 지정한 객체에 주입하는 방식 1. 필드 주입 public class MemberService { @Autowired MemberRepository memberRepository; ... } 외부에서 접근 불가능 필드의 객체 수정 불가능 -> 권장되지 않음 (왠만하면 사용하지 말자) 2. 생성자 주입 public class MemberService { private final MemberRepository memberRepository; @Autowired public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepositor..

backend/springboot 2024.04.01

기본 자료구조 - 해시, 트리, 힙

해시 (Hash) 임의의 데이터에 대해 고정된 길이의 데이터로 매핑 이론적으로 삭제 O(1), 삽입 O(1), 검색 O(1)의 시간복잡도 해시 테이블 내부의 값이 많아지면 해시충돌 현상 -> 기본 연산의 시간 길어짐 public class HelloWorld { public static void main(String[] args) { HashMap h1 = new HashMap(); HashMap h2 = new HashMap(); h1.put("aaa", "1111"); h1.put("bbb", "2222"); h1.put("ccc", "3333"); h1.putIfAbsent("aaa", "0000"); h1.putIfAbsent("ddd", "4444"); h2.putAll(h1); System.o..

algorithm/정리 2024.03.31

기본 자료구조 - Stack, Queue, Deque

스택(Stack) FILO (First In, Last Out) 구조 삽입과 삭제 연산이 동일한 한군데 삽입/삭제 연산 시간복잡도 O(1) 제일 상단의 원소 확인이 O(1) 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능 이전에 활용한 데이터를 역으로 추적하거나 처음 들어온 데이터보다 나중에 들어온 데이터가 빨리 나가야 할 때 사용 stack s; s.push(10); s.push(20); s.top();//20 s.pop(); //20 큐 (Queue) FIFO (Fisrt In, First Out) 구조 삽입과 삭제 연산이 서로 다른 한군데에서 발생 삽입/삭제 연산에 있어 시간복잡도 O(1) 제일 앞/뒤의 원소확인이 O(1) 맨 앞을 front, 맨 뒤를 rear 삽입연산을 enque..

algorithm/정리 2024.03.30

백준 10989번 (수 정렬하기 3) Java 11 계수 정렬

문졔 : 수 정렬하기 3 시간 제한 : 3 sec 메모리 제한 : 8MB 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 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st; ..

백준 2740번 (행렬 곱셈) 자바 Java11

문제 : 행렬 곱셈 시간 제한 : 1 sec 메모리 제한 : 128 MB 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 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ // BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // BufferedWriter bw = new BufferedWrite..

백준 1914번 (하노이 탑) 자바 Java11

문제 : 하노이 탑 시간 제한 : 6 sec 메모리 제한 : 128 MB 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 import java.io.*; import java.math.BigInteger; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new Bu..