1. 최종 소감 드디어 5일 전쯤에 끝난 마지막 4주차 프로젝트가 마무리되었다. 주말에 자격증 시험이 있어서 끝나자마자 시험 준비하느라 후기가 좀 늦었다. 결론부터 말하자면, 마지막 미션은 정말 어려운 난이도였다.(어떤 사람은 그냥 포기하기까지;) 미션의 요구사항은 편의점 시뮬레이션처럼 구현하는 것이었는데, 요구사항이 너무 많아서 이를 다 구현하고 나서도 어떻게 리팩토링할지 감이 잡히지 않았다. 요구사항이 많다 보니 마지막에 아쉽게도 1개의 조건을 빼먹었다.(분명히 README에 기능요구사항 정리할 때 적었는데; 그만큼 혼이 많이 빠졌다.) 처음에는 기능을 머리속에 그리는 것부터가 어려웠다. 그래서 프로젝트를 시작하고 약 2~3일 정도는 문서 작업만 하며 최대한 기능 요구사항을 자세히 적으려고 노력했..
드디어 4주차에 접어들면서 마무리를 향해 나아가고 있다. 3주차 동안의 주요 성과는 아래와 같다.1. JAVA 언어에 대한 익숙함 JAVA에 좀 더 익숙해지면서 여러 기능과 문법에 대해 익히는 기간이었다. 단순히 문법을 넘어 컬렉션의 특징에 대해서도 여러 공부하게 되었다.2. 책임과 역할 분리에 대한 고민 코드 작성 시 역할과 책임을 명확히 나누는 것에 대해 고민하는 시간이 되었다. 객체지향적 설계는 단순히 성능을 위한 것이 아니라, 협업과 코드 관리에서 큰 차이를 만든다고 생각한다. 역할이 분명해지니, 기능이 명확해지고 가독성 또한 높아졌다.(코드 리뷰 받을라고 더 신경쓰는게 더 크긴 함)3. 테스트 코드 작성 테스트 코드를 작성하는 것은 python언어 쓰면서도 하고는 있었다. 하지만 그 전에는 TD..
1. 과제 정의경주자동차를 실행하여 우승자를 출력하는 미션이다. 주요 핵심이라고 생각하는 기능들을 보면 다음과 같다.- 입력값 검증- 게임 구현(자동차가 조건에 맞았을 때 전진)- 출력(매 게임마다 진행상황 출력, 결과 출력) 2. 구현 과정이번 미션의 주요 목표는 함수 분리와 테스트 도구 활용이다. 따라서 JUnit5 사용법을 학습했고, 구현부에서는 역할과 책임을 기준으로 기능을 최대한 분리하려고 노력했다. 다음은 구현하면서 고민했던 사항들이다.클래스 분리: 기능 요구 사항에 따라 클래스를 정의하고 역할에 따라 분리하여 각 클래스가 담당하는 기능을 명확히 하기.Car 클래스 도메인 분리: 이름과 전진 횟수를 상태로 가지는 Car를 객체로서, domain으로 따로 빼기.회차별 게임 진행상황 관리: 게임..
1. 과제 정의 과제는 전반적으로 단순했지만, 예외 처리에 많은 신경을 써야하는 문제처럼 느꼈다. 1주차 과제의 주된 목적은 개발 환경과 언어에 익숙해지는 것이었기 때문에 비교적 간단한 과제가 주어진 것 같다. 2. 구현 과정입력 (Reader)사용자의 입력을 받는 기능으로, 데이터를 처리하기 위한 첫 단계.입력 검증 (Validation)입력된 데이터가 올바른 형식인지 확인하고, 잘못된 입력에 대해 예외를 처리하는 과정.문자열 분할 (Split)입력된 문자열을 필요에 따라 분할하여 계산을 위한 준비 단계.계산 (Calculate)분할된 데이터를 기반으로 원하는 계산을 수행하는 핵심 로직.출력 (Print)계산 결과를 출력하는 단계. 절차지향적 구조에서 각 기능별로 테스트 코드를 짜고 구현하고, 테스트..
1. 정규화를 배우기 전의 사전 지식들 1) 키(Key) 데이터베이스에서 키는 각 레코드를 고유하게 식별하거나 테이블 간의 관계를 정의하는 데 중요한 역할을 합니다. 다음은 다양한 키의 종류와 예시입니다. 1.1) 슈퍼키 (Super Key)테이블 내에서 유일성을 보장하는 하나 이상의 속성(컬럼) 집합입니다. 최소성은 보장하지 않습니다.고객 테이블에 있는 {고객 아이디, 고객 이름}, {고객 아이디}, {고객 아이디, 고객 이메일} 모두 슈퍼키가 될 수 있습니다.{고객 아이디, 고객 이름}은 고객을 고유하게 식별할 수 있지만, 고객 아이디만으로도 고유성이 보장되므로 최소성을 갖추지 못한 슈퍼키입니다. 1.2) 후보키 (Candidate Key) 테이블에서 유일성과 최소성을 모두 만족하는 키입니다. 즉, ..