전체 글
[JAVA] 원시값 포장
들어가며 저번 미션부터 원시값 포장에 대한 요구사항들이 많았다. 원시값 포장은 무엇인지에 대해 정리를 해보려고한다. 처음에는 원시값 포장 ? String , int값을 포장한다는 것인가 ? 왜 하지 ? 라는 생각이 많이 들었지만 확실히 원시값 포장을 하는게 더 좋다고 생각이 들었다. 원시값 포장 원시 타입의 변수를 객체로 포장한 것이다. private final String name; public Name(String name) { this.name = name; } public String getName() { return this.name; } 이번 사다리 타기 미션인데 name이라는 단순 문자열을 Name로 포장, 감싸주었다. 이렇게 감싸 주었기 때문에 name을 모아놓는 List또한 변경이 되었다..
[JAVA] equals와 hashCode를 Override 해야하는 이유
들어가며 우테코 사다리타기 미션을 진행하던 중에 값을 비교하기 위해 equals를 사용했다. equals는 단지 값을 비교하기 위해 사용하면 되지 않나 ?' 라는 생각을 가지고 있던 나는 잘못 생각하고 있었다. 그래서 부끄러워서 정리 한번 해보려고 한다. 문제가 되었던 코드 중 하나 private void validateWinner(Names names, String winner) { if (!(names.nameContains(new Name(winner))) { throw new IllegalArgumentException(ExceptionMessage.EXCEPTION_WINNER_RESULT.getExceptionMessage()); } } names내에서 new Name(winner) 로 이루어..
[우아한 테크코스 5기] 사다리 타기 1단계 학습 로그
GitHub 저장소 구현 기능들 궁금한 것 코드 리뷰 후기 📆 기간 : 2023.02.14~ 2023.02.18 GitHub 저장소 사다리타기 1차 PR 깃허브 주소 구현 기능 목록 MVC 패턴으로 진행하였다. 크게는 사람 이름 입력 -> 사다리 높이 입력 -> 결과 출력 으로 구성했다. 사람 Name 모델과 그것을 일급 컬렉션으로 묶는 Names 모델을 만들어 사용하였다. Name과 Names 각자 모델 에서 이름 validation 처리를 진행하였다. 처음에는 InputView에서 검증과 분리를 처리하려 하였으나 이는 Names의 역할인 것 같아서 옮기게 되었다. 사다리 높이 InputView에서 높이를 입력받도록 하였다. 그리고 Int 값을 제외한 예외처리를 Integer.parseInt를 통해 진..
[Database] 동시성 제어
동시성 제어 동시성 제어 트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능 갱신 손실 문제 갱신 손실 두 개의 트랜잭션이 한 개의 데이터를 동시에 갱신할 때 발생하며, DB에서 절대 발생하면 안되는 현상 T1의 갱신이 손실된 갱신손실 문제가 발생락 데이터를 수정중이라는 사실을 알리는 방법의 잠금 장치 락 락의 유형 공유락 ( LS, shared lock) : 트랜잭션이 읽기를 할 때 사용하는 락 배타락( LX, exclusive lock) : 읽고 쓰기를 할 때 사용하는 락 공유락 배타락 규칙 데이터에 락이 걸려있지 않으면 트랜잭션은 데이터에 락을 걸 수 있다. X를 읽기만 할경우 LS(X)를 요청하고 읽거나 쓰기를 할 경우 LX(X)를 요청 다른 트..
[Database] 회복
회복 DB에 장애가 발생했을 때 DB를 일관성 있는 상태로 되돌리는 DBMS의 기능 장애 유형 시스템 충돌, 미디어 장애, 응용소프트웨어오류, 자연재해, 부주의 로그 파일 트랜 잭션이 수행 중이거나 종료후 발생하는 손실을 방지하기 위해 DB기록을 추적하는 로그파일 사용 트랜잭션이 반영한 모든 DB변경사항을 DB에 기록하기전에 미리 기록해두는 별도의 DB로 안전한 하드디스크에 저장되며 기록남음 로그파일 저장된 로그 구조 로그파일 이용 회복 장애 발생하여 시스템 재가동시 DBMS는 로그파일을 먼저 살펴본다. DBMS는 트랜잭션이 종료되었는지 혹은 중단되었는지 여부를 판단한다. 종료된 트랜잭션은 종료를 확정하기 위해 재실행(REDO)를 진행하고, 중단된 트랜잭션은 없던일로 되돌리기 위해 취소(UNDO)를 진행..
[우아한 테크코스 5기] 자동차 경주 2단계 학습 로그
STEP 2 목표 변경 사항 개선할 점 배운 것 📆 기간 : 2023.02.08~ 2022.02.13 STEP 2 목표 2단계 에서는 최대한 객체는 객체답게 능동적으로 자신의 역할만 수행하도록 변경하고자 노력하였다. 또한 MVC 패턴을 조금 더 다듬었다. Car는 car의 역할만. Name은 name의 역할만. Cars는 cars의 역할만. MVC 패턴을 조금 더 상세화 했다. 변경 사항 Validation validation을 InputView에서 검증하는 것이 좋다고 생각하였으나, Test코드를 작성하는데 있어서 어렵다고 생각하게되었다. 그래서 Validation은 원시값을 포장하면서 그 곳에서 검증하였고, 그 외의 값들은 InputView에서 처리하였다. 원시값 포장 Car의 Name 포장을 위해 ..
[개발 패턴] TDD
TEST DRIVE DEVELOPMENT 테스트 주도 개발에 대한 많은 이야기를 들었었다. 쓰레기라느니 좋다느니.. 등등 나는 실제로 와닿지는 않았는데 우아한테크코스를 경험하면서 필요성을 느꼈다. 내가 느낀 필요성은 프로덕션 코드를 작성하고 테스트 코드를 작성하면 테스트하기 너무 힘든 메소드 같은 것들이 생길 때 필요하다고 느꼈다. 먼저 테스트 코드를 짜고 프로덕션을 맞춘다면 충분히 좋게 테스트코드를 짤 수 있다고 생각했다. TDD란 Test First Development + 리팩토링을 의미한다. TEST -> FEAT -> REFACTOR 가 반복된다고 생각한다. TDD 하는 이유 디버깅 시간을 줄여준다. 동작하는 문서 역할을 한다. 변화에 대한 두려움을 줄여준다. TDD 원칙 1. 실패하는 단위 테..
[JAVA] 정규표현식
우아한 테크코스 LV1 사다리 게임을 진행하면서 Validation 처리로 정규표현식을 사용할 일 이 생겼다. 알파벳 외에는 입력받지 않는 것이였는데 이에 정규 표현식을 사용하여 처리하면 쉽게 해결 할 수 있다는 것을 배웠다. 자바 정규 표현식 자바에서는 주로 Pattern 클래스와 Matcher 클래스를 사용하여 자바 정규 표현식을 사용한다. Pattern 이란 주어진 문자열이 정규식에 매칭되는지 테스트 하는 것이며 Matcher란 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 체크할때 사용한다. 자바 정규 표현식 문법 ^ - 정규식의 시작 $ - 정규식의 끝 . - 임의의 한글자가 존재한다 ? - 앞의 문자가 하나이거나 없거나 * - 앞의 문자가 0 ~ 무한한 것 + - 앞의 문자가 1 ~ 무한한..
[Database] 정규화
정규화 정규화 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정 종속성의 유형에따라 등급을 구분 가능하다 릴레이션은 정규형 개념으로 구분하며 정규형이 높을수록 이상현상이 줄어든다 제1정규형 릴레이션의 R의 모든 속성 값(도메인원자값)이 원자값을 가지면 제 1 정규형 취미들의 속성값을 모두 원자값으로 바꿈 비정규형 → 1정규형 제2정규형 R이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전함수 종속일때 2정규형이라고함 후보키가 복합키(다중칼럼)로 설정되어 있을 때 복합키의 일부칼럼에 다른칼럼들이 결정되어서는 안된다는 뜻 완전함수종속 A와 B가 릴레이션R의 속성이고 A→B 종속성이 성립할 때 B가 A의 속성 전체에 함수종속하고 부분집합 속성에 함수종속하지 않을경우 완전함수종속이라고함 종속자가..
[Database] 함수 종속성
함수 종속성의 개념 각 속성 사이에는 의존성이 존재한다. A의 값을 알면 다른 B의 값이 유일하게 정해지는 의존 관계 → 속성 B는 속성 A에 종속한다. 속성 A는 속성B를 결정한다 A를 B의 결정자라고함 A→B라고 표현 함수 종속성 다이어그램 릴레이션의 속성 : 직사각형 속성 간의 함수 종속성 : 화살표 복합속성 : 직사각형으로 묶어서 표현 함수 종속성 규칙 XYZ 가 릴레이션 R 에 포함된 속성의 집합이라고 할 때 함수 종속성은 다음 규칙 성립 함수 종속성과 기본 키 기본키가 어떤 역할을 하는지 알면 이상현상 제거하는 정규화 과정 쉽게이해가능 기본키는 릴레이션 모든 속성에 대해 결정자임 이상현상과 결정자 이상현상 한 개의 릴레이션에 두 개 이상의 정보가 포함되어 있을때 나타난다. 기본키가 아니면서 결..