1. JPA 영속성 컨텍스트(Persistence Context) 1.1. 영속성 컨텍스트 영속성 컨텍스트는 엔터티의 상태를 관리하는 JPA의 1차 캐시로, 애플리케이션과 데이터베이스 사이에서 중간 역할을 수행합니다. 여기서 엔터티란 데이터베이스의 테이블에 대응되는 객체로, JPA에서 데이터를 매핑하고 관리하는 단위입니다. 쉽게 말하면 메모리 내의 "가상 데이터베이스" 같은 역할을 합니다. 영속성 컨텍스트에 엔터티를 올리면, JPA는 이를 관리하며, 실제 데이터베이스와의 작업을 대신 처리합니다. 2.2. 영속성 컨텍스트의 역할영속성 컨텍스트는 단순한 데이터 저장소 이상의 역할을 합니다.1) 엔터티 상태 관리엔터티의 상태를 관리하여 생성, 변경, 삭제 등을 추적합니다. 엔터티는 영속성 컨텍스트에 등..
1. 최종 소감 드디어 5일 전쯤에 끝난 마지막 4주차 프로젝트가 마무리되었다. 주말에 자격증 시험이 있어서 끝나자마자 시험 준비하느라 후기가 좀 늦었다. 결론부터 말하자면, 마지막 미션은 정말 어려운 난이도였다.(어떤 사람은 그냥 포기하기까지;) 미션의 요구사항은 편의점 시뮬레이션처럼 구현하는 것이었는데, 요구사항이 너무 많아서 이를 다 구현하고 나서도 어떻게 리팩토링할지 감이 잡히지 않았다. 요구사항이 많다 보니 마지막에 아쉽게도 1개의 조건을 빼먹었다.(분명히 README에 기능요구사항 정리할 때 적었는데; 그만큼 혼이 많이 빠졌다.) 처음에는 기능을 머리속에 그리는 것부터가 어려웠다. 그래서 프로젝트를 시작하고 약 2~3일 정도는 문서 작업만 하며 최대한 기능 요구사항을 자세히 적으려고 노력했..
1. 네트워크 플로우 문제네트워크 플로우 문제는 네트워크 그래프에서 각 간선이 용량을 가지며, 한 정점(출발점)에서 다른 정점(도착점)으로 최대한 많은 유량을 보내는 문제입니다.하나의 경로에서는 간선 중 가장 적은 용량이 최대 유량이 됩니다. 이때 유량이 시작되는 지점을 소스(Source), 유량이 도착하는 지점을 싱크(Sink)라고 합니다. 하지만 위와 같이 복잡한 네트워크에서는 A에서 B까지의 최대 유량을 구하는 것이 쉽지 않습니다. 다양한 경로와 잔여 용량을 고려해야 하기 때문입니다. 이를 해결하는 알고리즘이 포드-풀커슨, 에드몬드-카프 알고리즘입니다. 둘 다 원리는 같고 포드-풀커슨은 DFS, 에드몬드-카프는 BFS으로 그래프를 탐색합니다. 2. 에드몬드-카프 알고리즘(Edmonds-Karp..
드디어 4주차에 접어들면서 마무리를 향해 나아가고 있다. 3주차 동안의 주요 성과는 아래와 같다.1. JAVA 언어에 대한 익숙함 JAVA에 좀 더 익숙해지면서 여러 기능과 문법에 대해 익히는 기간이었다. 단순히 문법을 넘어 컬렉션의 특징에 대해서도 여러 공부하게 되었다.2. 책임과 역할 분리에 대한 고민 코드 작성 시 역할과 책임을 명확히 나누는 것에 대해 고민하는 시간이 되었다. 객체지향적 설계는 단순히 성능을 위한 것이 아니라, 협업과 코드 관리에서 큰 차이를 만든다고 생각한다. 역할이 분명해지니, 기능이 명확해지고 가독성 또한 높아졌다.(코드 리뷰 받을라고 더 신경쓰는게 더 크긴 함)3. 테스트 코드 작성 테스트 코드를 작성하는 것은 python언어 쓰면서도 하고는 있었다. 하지만 그 전에는 TD..
1. 일급 컬렉션(First-Class Collection) 일급 컬렉션이란 컬렉션(collection)을 하나의 객체로 감싸서 관리하는 클래스입니다.public class Cars { private final List cars; public Cars(List cars) { this.cars = cars } public List getCars() { return Collections.unmodifiableList(cars); } public 기타 커스텀 메서드(){} ... }위와 같이 Car객체를 담은 ArrayList 컬렉션을 한번 더 클래스로 감싸서 관리하는 것을 일급 컬렉션이라고 합니다. 일급 컬렉션의 정의를 정리하면 다음과 같..
1. 과제 정의경주자동차를 실행하여 우승자를 출력하는 미션이다. 주요 핵심이라고 생각하는 기능들을 보면 다음과 같다.- 입력값 검증- 게임 구현(자동차가 조건에 맞았을 때 전진)- 출력(매 게임마다 진행상황 출력, 결과 출력) 2. 구현 과정이번 미션의 주요 목표는 함수 분리와 테스트 도구 활용이다. 따라서 JUnit5 사용법을 학습했고, 구현부에서는 역할과 책임을 기준으로 기능을 최대한 분리하려고 노력했다. 다음은 구현하면서 고민했던 사항들이다.클래스 분리: 기능 요구 사항에 따라 클래스를 정의하고 역할에 따라 분리하여 각 클래스가 담당하는 기능을 명확히 하기.Car 클래스 도메인 분리: 이름과 전진 횟수를 상태로 가지는 Car를 객체로서, domain으로 따로 빼기.회차별 게임 진행상황 관리: 게임..