다이나믹 프로그래밍(동적 계획법)큰 문제를 작은 문제로 나누어 해결하고, 그 결과를 저장하여 동일한 작은 문제가 다시 등장했을 때 재계산하지 않고 저장된 값을 재사용하는 방식 아래의 조건을 충족해야 다이나믹 프로그래밍을 사용할 수 있다.🔥핵심 개념 : 부분 문제(Overlapping Subproblems) + 최적 부분 구조(Optimal Substructure)부분 문제 : 큰 문제를 작은 문제로 나누었을 때, 동일한 작은 문제가 여러 번 반복해서 나타나는 경우최적 부분 구조 : 문제의 최적 해결 방법이 그 하위 문제들의 최적 해결 방법을 조합하여 만들 수 있는 경우DP 해결 방식Top-Down (메모이제이션, Memoization)재귀(Recursion) + 캐싱(변수에 저장)큰 문제를 작은 문제로..
MapKey-Value로Key-Value로 데이터를 저장하는 ADT(추상 자료형)key는 중복될 수 없다.Associative Array, Dictionary라고 불리기도 한다.Hash Table(Hash Map)배열과 해시 함수(hash function)를 사용하여 Map을 구현한 자료 구조(일반적으로) 상수 시간으로 데이터에 접근하기 때문에 매우 빠르다.Hash Function임의의 크기를 가지는 type의 데이터를 고정된 크기를 가지는 type의 데이터로 변환하는 함수(hash table에서)임의의 데이터를 정수로 변환하는 함수예를 들어) "김철수" 라는 이름을 hash function을 거치면 20030이 나온다. 이렇게 해시를 통해"김철수"라는 이름이 중복되지 않게 유지한다.hash table은..
Set중복 허용 X순서 보장 X(순서를 보장하는 경우도 있음)Set은 ADT(Abstract Data Type)이다Set은 Interface이고 Set을 구현한 구현체인 HashSet, SortedSet 등이 있다.HashSetHashSet의 구현체는 HashMap이다.HashMap은 key:value로 테이블 형태로 데이터를 저장key는 중복X, value는 중복 OHashSet에서 사용하는 HashMap은 Key만 사용하고 Value부분에는 그냥 0,1 같은 dummy 값을 넣는다.HashMapkey:value로 데이터를 저장특징삽입, 삭제, 갱신, 탐색이 O(1)(상수) 시간에 처리된다.상수시간으로 데이터가 처리된다는 것은 아무리 데이터가 커지더라도 일정 시간 안에 데이터를 처리 가능하다.반대로, ..
안전한 클래스 설계를 설명하기 전에 Java에서 클래스에 대해 간략하게 설명하자면 클래스는 코드를 작성하기 위한 초기 단계, 즉 객체 설계도의 역할을 합니다. 객체 == 클래스라고 혼동해서는 안됩니다. 객체를 표현하기 위한 수단이 클래스일 뿐입니다. 1. 생성자를 통한 변수 초기화 public class User { private String name; private Team team; public User(String name, Team team) { this.name = name; this.team = team; } } 생성자를 통해 변수를 초기화하면 예상하지 못한 값이 들어올 수 있다. 매개변수에 전혀 관계가 없는 값을 넣거나 null을 넣어도 할당이 가능하기 때문이다. //잘못된 값 초기화 Use..
DTO란? DTO란 Data Transfer Object의 약자로, 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체이다. 여기서 계층이란 Presentation(View, Controller), Business(Service), Persistence(DAO, Repository)를 의미한다. DTO의 특징 데이터를 저장하는 용도로만 사용되어야 한다. 데이터에 대한 getter, setter 만을 가져야 한다. 저장, 조회를 제외한 어떠한 비즈니스 로직도 있어서는 안 된다. 하지만, 데이터 전송을 위해 직렬화, 역직렬화 메커니즘은 포함할 수 있다. 직렬화란 객체를 JSON, XML, 바이트스트림 등으로 변환하는 것을 의미한다. 역직렬화는 직렬화의 반대이다. 도메인 대신 DTO를 사용하는 이유 ..