테스트 코드를 작성했을 때의 장점 중에 더 좋은 설계, 더 낮은 결합도를 가진 코드를 만들 수 있다는 내용이 있었다. 더 낮은 결합도는 보통 내부에서 생성자를 통해 생성하는 것이 아닌 외부로부터 값을 주입 받는 식의 DI를 통해 해결할 수 있다. 그 과정을 실제 코드를 통해 기록을 남겨놓으면 더 이해가 쉬울 것 같아 적어본다. 테스트 상황 0~12 사이의 랜덤한 길이를 가진 패스워드를 생성하는 코드를 테스트 하고싶다. 잘못된 테스트 코드 작성 예시 @DisplayName("패스워드를 초기화한다.") @Test void passwordTest(){ //given User user = new User(); //when user.initPassword(); //then assertThat(user.getPas..
기초 지식 네트워크 네트워크란 두대 이상의 컴퓨터가 연결된 환경이며, 단순히 컴퓨터 2대를 케이블로 연결해도 그것은 네트워크이다. 인터넷은 전 세계의 네트워크가 연결된 환경으로 인공 위성과 광케이블 등 전 세계의 데이터를 통신하기 위한 물리적 환경과 ISP(Internet Service Provider)에 의해 구축되었다. ISP의 예시로 SKT, KT, U+와 같은 통신사가 있다. 패킷 패킷은 네트워크를 통해 전송되는 데이터의 조각이다. 큰 데이터를 한번에 보내지 않고 패킷으로 작게 나눠 보내는 이유는 너무 큰 데이터를 그대로 보내면 네트워크의 대역폭을 너무 많이 점유하기 때문에 다른 패킷의 흐름을 막을 수도 있기 때문이다. 작은 조각으로 나눠서 보내기 때문에 데이터를 받는 목적지(라우터)에서는 패킷을..
서론 3주 차 미션은 Enum과 테스트 코드 작성 요구사항이 추가되었다. 2주 차부터 테스트 코드 작성을 연습했지만, 여전히 테스트 코드 작성은 너무 어려웠다. 그 이유는 아무래도 어디까지 테스트해야 하는가? 테스트 코드가 프로덕션 코드에 영향을 미쳐도 괜찮은가? 테스트하기 좋은 코드를 만들기 위해 클래스 분리하는 방법 등에 대한 고민 때문이었다. 하지만 2주 차 회고에서 말했다시피 3주 차가 끝나고 공통 피드백을 통해 어느 정도 의문을 해결할 수 있었다. 그래서 오늘은 Enum을 중심으로 회고해 볼 생각이다. (다 쓰고보니 그냥 Enum 설명 글이다..) Enum의 장점 편리한 상수 관리 Enum은 상수를 정의하기 위한 열거형으로써 객체보다는 값 타입으로 선언하는 상수가 여러 가지 값을 가질 수 있다...
서론 2주 차 우테코 문제는 1주 차에서 들여쓰기 제한과 삼항 연산자 제한 등의 가독성을 높이기 위한 요구사항이 추가되었다. 1주 차와 크게 달라진 점은 없었기 때문에 이전 포스팅에서 언급했던 MVC에 대해 연습해야겠다고 생각했고, 우테코 단톡방과 디스코드 커뮤니티에서 다른 사람들이 테스트 코드를 작성한다는 이야기를 보고 나도 테스트 코드를 작성해 봐야겠다는 생각에 2주 차에는 테스트 코드 작성 방법에 대해 공부하여 TDD 방식으로 개발을 진행해 보았다. 테스트 코드를 작성하면서 어려웠던 점 되돌아보면 2주 차 "레이싱 카" 문제는 구현해야 할 기능이 많지 않았기 때문에 단위 테스트 연습이 수월했던 것 같다. 테스트 코드를 작성하면서 가장 어려웠던 점은 테스트 코드 작성 과정에서 테스트를 위한 코드가 t..
서론 우테코 프리코스를 처음 참여하게 되어 다른 사람들은 어떤 식으로 코드를 작성하는지에 대한 궁금증이 있었다. 인터넷에 우테코 프리코스 회고를 정리해 놓은 블로그들이 많이 있었고, 다른 사람들의 코드를 찾아본 결과 대부분의 사람들이 MVC 패턴으로 개발을 진행하는 것을 보고 나도 MVC로 개발을 해봐야겠다는 생각에 MVC를 찾아보게 되었다. 프리코스 이전에는 MVC가 무엇인지는 알고 있었지만, 왜 써야 하는 것인지 어떻게 사용하는 것인지 정확하게 모르고 스프링에서 MVC로 개발하는 레퍼런스들을 보면서 따라만 했던 것 같다. 그래서 이번 기회에 MVC를 왜 사용하는가? 어떻게 적용하는가? 에 대해서 고민해 보았고, 4주 차 프리코스를 마친 현재의 내가 생각하는 MVC에 대해 기록해 본다. MVC가 무엇이..
테스트 코드가 필요한 이유 코드의 변경 사항이 생겼을 때 문제가 발생하더라도 정의해놓은 테스트에서 에러가 발생하기 때문에 어디서 문제가 생겼는지 파악하기가 수월하다. 즉, 유지보수와 확장성 측면에서 장점을 가질 수 있고, 테스트 코드를 통해 해당 기능의 다양한 사용 케이스를 볼 수 있으므로 일종의 문서 역할을 한다. 또한 자동화된 배포에서도 테스트 코드가 있다면 자동으로 전체 테스트 코드를 실행하여 성공 시에만 배포하여 안정성을 가질 수 있다. 물론 단점도 존재하는데, 테스트 코드 작성하는 법을 따로 공부해야 한다는 점과 테스트 코드를 짜는 시간이 추가적으로 소요된다는 점이다. 하지만 테스트 코드 작성법을 공부했을 때 가져갈 수 있는 이점과 초반에 시간을 투자 했을 때 이후에 얻을 수 있는 시간 단축 효..