분류 98

[4주 차] 회고

4주 차 미션이 끝났습니다!!!!!!!!!!!!! 프리코스 끝나면 후련할 줄 알았는데, 마지막 미션에서 테스트 케이스 하나도 통과 못한게 너무 아쉬워서 미련만 남습니다.   솔직히 모든 테스트 통과 할 줄 알았는데, 통과 못한게 너무 충격적이었습니다.  진짜 통과 못한 것만 기억에 남아서, 제출 하고도 계속해서 분석했고 답을 찾아냈습니다. 테스트 통과하지 못한 이유 분석  이번 요구사항 중에, resourse 패키지 안에 들어있는 products.md , promotions.md 파일의 정보를 읽어와 데이터를 읽어들이는 요구사항이 있었습니다. 그래서 저는 해당 파일이 들어있는 경로를 복사하여 객체에 주입함으로서, 데이터를 받도록 하였습니다. 하지만 파일 경로를 제 컴퓨터 경로가 포함된 절대 경로로 설정한..

[3주 차] 회고

어느덧, 벌써 3주 차 미션이 끝났네요. 2주 차 미션과 비교하면 훨씬 어려운 수준이긴 했지만,  그만큼 구현하는 재미가 있었습니다. 제출하고 나면, 부족했던 부분들을 정리하는 시간을 가지는데, 이 시간이 이번 미션에 많은 도움이 되었습니다.정말 돌아보는 시간이 중요하다는 것을 다시 한 번 깨닫게 되는 것 같아요. 이번 미션은, TDD를 도전해 봤습니다. 2주 차 때, 운좋게 박재성님의 TDD 리팩토링 강의를 접하게 되었는데, 이번 프로그램 요구사항에 "테스트 공간을 확보하라" 라는 요구사항을 보며 TDD를 해봐야겠다고 생각했습니다. 못했던 점정말 TDD를 하면서, 도메인을 분석하는 시간이 정말 중요하다는 것을 느꼈습니다. 그냥 도메인을 나누는 것이 아니라, 정말 정말 정말 세세하게 해당 도메인이 무슨 ..

[3주 차] 정적 팩토리 메서드

정적 팩토리 메서드에 대해 학습한 이유2주 차 코드를 다시 한번 리뷰하면서 문제점을 발견하게 되었습니다. CarName과 같이 원시값 포장한 객체의 경우 검증 로직을 생성자 안에 정의하였는데, 생성자의 책임은 객체를 초기화 하는 것에만 있다는 것을 간과하였습니다. 따라서, 검증 로직에 대한 책임도 가지고 있고 생성자를 만들어 낼 수 있는 방법에 대해 찾게 되었고, 정적 팩토리 메서드를 접하게 되었습니다. 정적 팩토리 메서드란 무엇일까?정적 팩토리 메서드란 쉽게 말해 생성자로 인스턴스를 생성하지 않고, static Method를 사용해 인스턴스를 생성하는 방식입니다. 정적 팩토리 메서드를 사용하는 이유정적 팩토리 메서드를 사용하는 이유는 여러 가지가 있습니다. 1. 이름을 가질 수 있기에 명확한 의도를 전..

[3주 차] TDD

TDD 에 대해 학습한 이유3주 차 학습 목표 중 하나가 "클래스와 함수에 대한 단위 테스트를 통해 의도한 대로 정확하게 작동하는 영역을 확보한다." 입니다.해당 문구를 접하였을 때, 함수를 작성할 때마다 테스트 코드를 작성하라는 의미로 파악하였고, 2주 차때 접한 TDD 강의가 생각났습니다.학습 목표에 따라, 목표를 달성하기 위해 TDD 가 무엇인지에 대해 정리하게 되었습니다.  TDD(테스트 주도 개발) 란 무엇인가?TDD란 테스트 주도 개발입니다. 메서드마다 작은 테스트 케이스를 작성하면서 이를 통과하는 코드를 추가해 나갑니다.TDD, 리팩토링 == 운동 : 평생동안 연습하겠다는 마음으로 시작해야 합니다 어떤식으로 테스트 코드를 작성해야 하는가실패하는 테스트 코드를 만듭니다.성공하는 테스트 코드를 ..

[2주 차] 상수에 static 선언을 하는 이유에 대하여 - 1주 차 코드리뷰

1주 차 피드백에 다음과 같은 피드백이 달리게 되었습니다.  해당 부분은 다른 분들도 많이 궁금해하실 것 같아 따로 정리하게 되었습니다!  Staticstatic 키워드는 클래스 단에서 공유되는 요소를 만들기 위해 사용됩니다. 변수를 선언하므로써, 모든 객체가 동일한 변수를 공유할 수 있다는 말입니다.  따라서 static 키워드를 사용하게 되면, 클래스가 처음 로드될 때, 단 한 번만 메모리에 할당되어 변수를 공유할 수 있게 됩니다. static 키워드를 사용하지 않은 변수들은 객체를 생성할 때 마다, 새로운 메모리를 할당하기 때문에 비효율적입니다. fianlfinal 키워드는 할당된 값이 변경되지 않도록 만드는 역할을 합니다.  만일, final 키워드를 이용하여 상수를 선언하면, 초기화 이후 값을 ..

[2주 차] 회고

저번 주에는 정말 정신이 없어서, 지금에서야 2주 차 회고를 하게 되었습니다. 사실 미리 작성해 두긴 했는데, 지금에서야 올려요 ㅎㅎ..  2주 차 미션은 자동차 경주 미션이였습니다. 되돌아보면, 뭔가 슥슥 빠르게 작성은 되었는데, 디테일한 부분을 많이 놓친 느낌입니다. 저는 스프링을 시작한지는 겨우 2달이 되었고, 자바를 시작한 지는 6개월 정도 된 것 같습니다. 본격적으로 시작한거요!기본적으로 자바도 스프링처럼 MVC 패턴으로 작성하고자 했습니다. 이런식으로요! 그래서 MVC 패턴에 대해서도 다시 공부하고, 1주 차 코드를 보면서 어떤 부분을 고쳐야 할지 많이 고민했던 것 같습니다. 특히 신경썼던 점은, 의존성을 많이 끊어내려고 노력했습니다. 의존하게 된다면 MVC 패턴으로 구현하는 이유가 없다고 생..

[2주 차] Junit5 Parameterized Test

Junit5 Parameterized Test 1. 첫 번째 예제@ParameterizedTest@ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // 6개의 정수void isOdd_ShouldReturnTrueForOddNumbers(int number) { assertTrue(Numbers.isOdd(number));}해당 테스트 메서드는 총 6번 실행됩니다.각 실행시 ValueSource 의 값을 매개 변수로 받습니다.  2. 인수 소스 2.1 간단한 값@ParameterizedTest@ValueSource(strings = {"", " "})void isBlank_ShouldReturnTrueForNullOrBlankStrings(Str..

[2주 차] AssertJ를 활용한 예외검증

AssertJ를 활용한 예외검증Java 8을 사용하면 AssertJ와 람다 표현식을 통해 예외 검증을 간단하게 할 수 있습니다. 1. assertThatThrownBy() 사용하기assertThatThrownBy(() -> { List list = Arrays.asList("String one", "String two"); list.get(2);}).isInstanceOf(IndexOutOfBoundsException.class) .hasMessageContaining("Index: 2, Size: 2");리스트의 범위를 벗어난 항목에 접근할 때 IndexOutOfBoundsException이 발생하는지 확인할 수 있습니다..hasMessage("Index: %s, Size: %s", 2, ..

[2주 차] 원시값 포장

원시값 포장 학습하게 된 이유1주 차 피드백을 참고하다 보니, 객체 지향 생활 체조 원칙에 대해 학습할 수 있었고, 이 원칙 중에 원시값 포장이 있었습니다. 2주 차 미션은 객체 지향 생활 체조 원칙에 따라 작성할 것이기에, 원시값 포장을 학습할 필요가 있었습니다. 원시값 포장이란 무엇인가?원시 값 포장이란, 원시 타입이나 문자열을 객체로 감싸는 작업입니다. 왜 원시 값 포장을 사용해야 하는가?의미를 명확히 할 수 있기 때문입니다. int, String 같은 원시 타입을 그대로 쓰면, 코드에서 정확한 의미를 나타내기 힘듭니다. 하지만 Age, Name 클래스를 만들어 원시값을 포장할 경우, 그 의미가 더 명확해집니다.데이터 무결성을 보장할 수 있습니다. Age 클래스에 0보다 큰 값만 가진다는 검증 로직..

[2주 차] 객체 지향 생활 체조 원칙

객체 지향 생활 체조 원칙학습하게 된 이유1주 차 피드백을 샅샅히 보다보니, "축약하지 않는다" 밑에 객체 지향 생활 체조 원칙이 있었습니다.그래서 객체 지향 생활 체조 원칙에 대해 찾아보니, 정말 좋은 내용들이 많았습니다. 객체 지향 생활 체조 원칙이란 무엇인가?객체 지향 생활 체조 원칙은 소트웍스 앤솔러지에서 다루고 있는 내용으로 객체 지향 프로그래밍을 잘하기 위한 9가지 원칙이라고 합니다.한국에서는 우테코 교장선생님이신 박재성님이 해당 내용으로 강연도 하시더라고요. 그래서 저도 찾아보며 조금 봤습니다 ㅋㅋ 밑에 링크 남겨놓았으니, 참고하시면 좋을 것 같아요.  1.  한 메서드에 오직 한 단계의 들여쓰기만 한다.메서드 내에서 여러 단계로 중첩된 조건문이나 반복문을 사용하지 않도록 권장합니다. 한 단..