전체 글
[JAVA] VO(Value Object) 란 무엇인가 ?
들어가며 VO란 값 객체로만 알고 있었다. 값을 가진 무언가? 라는 개념으로 이해했는데 이에 대해 조금 더 자세히 알고 싶어서 정리해보게 되었다. VO란 ? VO란 값을 가지는 객체. 즉 값 자체로 의미를 갖는 객체이다. 속성 값이 모두 같으면 객체이다. 불변이다. VO를 사용하는 이유 원시값 타입이 도메인 객체를 모델링 하기에 충분하지 않기에 사용한다. 도메인에서 의미있는 값으로 VO를 묶어서 사용해야 한다. 여기서 든 의문은 원시값 포장과 다른점이 뭐지? 라는 것이였다. VO 의 필수조건은 먼저 equals & hashCode 메서드를 재정의 수정할 수 없는 불변 이다. 그러므로 변수를 수정하는 로직이 있다면 이는 VO가 아니다. 원시 타입의 기능을 사용하지 않기에 VO를 사용한다. private f..
[우아한 테크코스 5기] 블랙잭 1단계 학습 로그
들어가며 GitHub 저장소 구현 기능들 궁금한 것 코드 리뷰 후기 📆 기간 : 2023.02.28~ 2023.03.02 들어가며 이번 블랙잭 미션은 페어 루쿠와 함께 진행하게 되었다. 초반에는 잘 진행하였으나 중후반 들어서 서로 의견이 대립되는 경우가 많아졌고 나와 페어는 미션기능 구현을 빠르게 마쳐야 된다는 생각에 제대로 요구사항을 만족시키지 못했던 것 같다. Shuffle, 상속, 도메인 등등.. 에서 대립이 되었지만 조급해지다 보니 지금은 넘어가고 나중 리팩토링 때 하자 라는 말로 계속 뒤로 미뤘던 것 같다. TDD로 잘 작성하였으나 구조 설계에서 문제가 있었던 것 같다. GitHub 저장소 블랙잭 1단계 PR 깃허브 주소 구현 기능 목록 Card 카드 Number와 카드 Pattern을 가지고 ..
[JAVA] 제네릭 Generic
들어가며 우테코에서 Generic 관련 미니 미션을 수행하게 되었다. 수행을 하면서 느낀 것은 제네릭에 대해서 대충은 알고 있었지만 자세히 모른다고 생각하게 되었고 한번 정리해볼 필요가 있다고 느꼈다. 제네릭 제네릭이란 클래스를 정의 할 때 구체적인 타입을 적지 않고 변수로 적는 것이다. 제네릭은 모든 종류의 타입을 다룰 수 있도록, 클래스나 메소드를 타입 매개변수를 이용하여 선언하는 기법이다. 타입 매개변수란 타입을 변수로 표시하는 것을 의미한다. 즉 타입을 어떤 클래스의 매개변수로 보는 것이다. 내부 데이터 타입을 외부에서 지정하는 것. 제네릭이 없었다면 ? public class Test{ private Object data; public void set(Object data){ this.data ..
[디자인 패턴] 전략 패턴
들어가며 우테코에서 사다리타기 게임을 하면서 사다리 게임을 직접 실행하는 Game 도메인을 만들었다. 하지만 이 도메인은 하는일이 게임실행 + 결과값 저장 및 도출 기능을 가지고 있는 매우매우 비대한 사이즈의 도메인이였다. 그래서 이 도메인을 줄이기 위해 고민을 했었는데 카프카가 사다리타기 문제에 전략 패턴을 접목할 수 있다고 하여 알아보게 되었다. 사다리타기 클래스를 외부에서 주입해주고 테스트 할 때는 테스트용 사다리타기 클래스를 주입하여 더 간단하게 사용할 수 있을 것 같았다. 전략 패턴 정의 전략 패턴이란 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 여기서 말하는 알고리즘은 하나의 전략 이라고 생각하면 된다. 로직 실행은 인터페이스에 의존을 시키고 인터페이스를 구현한..
[JAVA] 예외 처리
들어가며 나는 지금까지 예외처리에 대해서 깊게 생각해 본적이 없는 것 같다. 단순하게 ‘문제가 생기면 예외를 던진다.’ 라고 생각하며 살아왔던 것 같다. 하지만 우테코에서 예외처리 강의를 듣고 한번 생각 정리를 할 필요가 있을 것 같아서 정리해보게 되었다. 예외(Exception) 와 에러(Error) 예외를 알아보기 전에 먼저 에러와 예외를 구분할 필요가있다. 에러는 코드로 복구 될 수 없는 오류를 의미한다. 개발자가 미리 예측하여 방지할 수 없다. OutOfMemoryError, StackOverflowError 등이 발생한다. 예외는 개발자가 직접 예측하여 막을 수 있는 오류를 의미한다. 개발자의 코드, 로직, 사용자 에 의해 발생 가능하며 방지할 수 있다. 하단 그림은 에러와 예외의 상속 관계이다..
[우아한 테크코스 5기] 사다리 타기 2단계 학습 로그
GitHub 저장소 STEP 2 목표 변경 사항 개선할 점 배운 점 궁금한 점 후기 📆 기간 : 2023.02.18~ 2022.02.25 GitHub 저장소 사다리타기 2차 PR 깃허브 주소 STEP 2 목표 추가된 요구사항 사다리 실행 결과를 출력해야 한다. 개인별 이름을 입력하면 개인별 결과를 출력하고, "all"을 입력하면 전체 참여자의 실행 결과를 출력한다. 최대한 객체지향적으로 작성하고자 노력하였다. Step1에서는 레이어의 무게가 너무 무거웠던 것 같다. 다른 레이어에 책임을 분할하면서 얇게 하려고 노력하였다. 변경 사항 Game private Map prizeResult; 값을 갖는 Game 클래스이다. 처음에는 Game 클래스에서 사다리를 받아서 게임을 실행하고 결과값을 저장하여 후에 사용..
[JAVA] 일급 컬렉션
들어가며 우테코 미션을 진행하면서 일급 컬렉션에 대해서 엄청엄청 많이 들어보았다. 그래서 정리를 해보고자 한다. 일급 컬렉션 일급 컬렉션이란 값 객체(Value Object)를 포함하고 있는 컬렉션이다. 값 객체란 값 그 자체로 의미가 있으며, 변경 불가능하다는 특징을 가지고 있는 것이다. 일급 컬렉션은 이러한 값 객체들을 모아서 하나의 객체로 다루는 것을 의미한다. Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 한다. 일급 컬렉션의 장점 코드 가독성의 향상 값 객체가 포함된 컬렉션을 변수로 사용하는 것보다, 일급 컬렉션으로 묶어서 사용하는 것이 가독성이 더 좋다. 의미 전달력의 향상 일급 컬렉션을 사용하면, 컬렉션의 용도와 의미를 명확하게 전달할 수 ..