본문 바로가기

전체 글149

2주차 회고 - 발전하기 1. 개발 목표1주차에서 고민했고, 2주차에서 적용해보고 싶었던 것들이 있었다. 그리고 더 공부해 보고 싶었던 것들이 있었다.검증 부분을 도메인과 합쳐 구현해 보자1주차는 검증 부분을 도메인과 분리하여 개발했었다. 패키지를 분리하였고, 검증 클래스를 각각 만들어 유틸리티 클래스처럼 구현하였다. 클래스 간 결합도가 높아지고 객체지향적인 프로그래밍이 아니라는 판단에 이 부분을 바꾸어 보았다.2주차는 도메인에 검증부분을 녹여냈다. 도메인 객체와 서비스에 검증 기능을 구현했다. 캡슐화 되어 응집도가 높은 코드가 되었다. 또한 입력 검증을 입력 뷰에서 처리하지 않고 서비스와 도메인에서 나눠 처리해주니 입력 뷰와 다른 클래스들 간의 결합도가 낮아져서 좋은 코드가 되었다.dto는 데이터 전송에만 사용하자dto는 계층.. 2024. 11. 4.
13, 14일차 - 완성도 높이기 1. 테스트 코드 작성예외 처리에 중점적으로 테스트 코드를 작성해 보았다. 테스트 코드를 작성하면서 잘못된 구현에 대해 찾아내기도 하였다. 확실히 테스트 중점적으로 코드를 짜게 되면 구현 오류를 찾을 수 있다는 점에서 좋은 것 같다.자동차 입력 검증separator 정상 경우자동차 이름이 없는 경우자동차 이름 5자 보다 큰 경우자동차 이름이 중복되는 경우시도할 횟수 입력 검증시도할 횟수로 숫자가 들어온 정상 경우시도할 횟수로 아무것도 안들어온 경우시도할 횟수로 숫자가 아닌 다른문자가 들어온 경우거의 예외 처리에 대해 테스트 코드를 작성해 보았지만 기능이 잘 돌아가는지에 대한 단위 테스트나 통합 테스트에 대해서는 부족하였다.2. 과제 제출기본 제공 테스트는 잘 통과 되었다. 단위 테스트에 대한 개념을 잡아.. 2024. 11. 1.
11, 12일차 - 기능 구현 해보기 1. 핵심 객체저번 1주차 과제에서는 절차지향적으로 설계하였다. 하지만 2주차부터는 유지보수가 좋은 객체지향적으로 설계해보기 위해 이번 과제에서 핵심적인 객체에 대해 고민해보았다.자동차이름과 전진 횟수전진하기 기능전진 횟수 +1언제 전진하는가?자동차 여러대가 주어지지만 자동차 객체를 만들고 그 자동차 객체를 리스트나 배열 형태로 만들어 놓으면 좋겠다고 생각했다.CarString nameint winStackcar(string name) 생성자this.name = namethis.winStack = 0getternamewinStackplusWinstackthis.winStack++goRound0~9 랜덤으로 뽑아 4이상 나오면 plusWinstack 호출CarNameEmptyValidator자동차 이름이 .. 2024. 11. 1.
10일차 - 구현 기능 목록 작성하기 과제의 README에 들어갈 내용을 아래와 같이 만들었다.구현 기능 목록🎯 경주 자동차 이름 입력✅ 각 자동차에 이름을 부여할 수 있다.✅ 자동차 이름은 쉼표 , 를 기준으로 구분한다.pobi,woni,jun❌ 예외처리✅ 자동차에 이름을 부여하지 않은 경우✅ 자동차 이름은 5자 이하만 가능하다.✅ 자동차 이름이 중복된 경우🎯 시도 횟수 입력✅ 몇 번의 이동을 할 것인지 정수 입력5❌ 예외처리✅ 정수가 아닌 다른 문자가 입력 되었을 경우🎯 경기 실행 기능✅ 전진 하기 (0~9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우)✅ 차수 별 진행상황 출력하기pobi : --woni : ----jun : ---❌ 예외처리🎯 우승자 안내 문구 출력✅ 가장 많이 전진한 자동차를 구한다.✅ 우승 자동.. 2024. 10. 27.
9일차 - 유틸리티 클래스란 유틸리티 클래스란?여러 클래스에서 공통적으로 사용할 수 있는 메서드를 모아 만든 클래스이다. 유틸리티 클래슨 기본적으로 정적 메서드만 구현하여 제공하기 때문에 인스턴스화할 필요가 없다. 유틸리티 클래스를 활용하게 되면 기능만 분할한 절차지향 프로그래밍이다. 결합도가 커지고 의존성을 분리한 단위 테스트를 하기 어렵다.그렇다면 유틸리티 클래스를 활용한 절차지향형 프로그램과 객체지향형 프로그래밍의 구현은 다음과 같다.package com.example.ooptest;// 유틸리티 클래스public class MathUtil { public static int add(int a, int b) { return a + b; } public static int multiply(int a,.. 2024. 10. 25.
8일차 - 코드리뷰하기 1. 코드리뷰본격적으로 1주차 과제에 대한 코드리뷰를 받아볼 수 있었다. “제꺼 코드리뷰 해주세요”라고만 하는 사람들이 많을 것 같았다. 그래서 코드리뷰를 요청해주신 분의 코드를 먼저 리뷰해드리고 내 코드를 리뷰해달라고 요청드렸다.유틸리티 클래스가 많은 절차지향 프로그래밍검증 부분이 하나로 묶여있으면 좋을 것 같다.코드 리뷰를 통해 크게 2가지 단점이 와닿았다. dto라고 만들었던 코드와 검증을 위해 만들었던 “행동”에 해당하는 코드는 모두 유틸리티 클래스에 가까웠다. 나의 프로그래밍 스타일은 유틸리티 클래스를 사용한 절차지향 프로그래밍이였다. 절차지향 프로그래밍과 객체지향 프로그래밍에 대한 이해가 부족했고, 유틸리티 클래스에 대한 이해도 부족했었다. 이부분에 대해 더 공부해야겠다.  추가적으로 받은 디.. 2024. 10. 24.
1주차 회고 - 지나치게 고민하지 말고 일단 해보기 1. 마음가짐OT에서 언급한 메타인지를 떠올리며 나는 어떤 사람이가 생각해봤다. 나는 뭘 하던 잘하고 싶어하는 성격 탓에 시작 단계에서 삽질을 너무 많이한다. 이런 나를 생각하며 과제를 시작하였다.2. 과제 해결하기과제는 문자열을 파싱하는 단순한 알고리즘의 과제였다. 먼저 백준이나 프로그래머스에서 문제를 해결할 때처럼 코드를 짜봤다. 프리코스는 여기서 끝나선 안된다. 문제를 해결할 때 사용한 핵심 로직을 분리하고, 입력받고 출력하는 로직을 분리했다. 그다음 입력에 잘못된 값이 들어간 경우를 걸러주는 검증부를 만들었다.분리한 코드들을 MVC에 맞게 리팩토링해 보았다.viewInputViewOutputViewvalidationmodeldomaindtocontrollerMainController크게 이런 구조.. 2024. 10. 24.
5,6일차 - 과제 제출하기 0. 5일차10월 20일은 정보처리기사 실기 시험날이였다. 시험을 위해 5일차를 전부 시험공부에 갈아넣느라 프리코스를 위한 공부를 하지 않았다.1. 과제 제출pull request를 생성하고, 과제를 제출하였다. pull request 내용으로는 뭘 넣을 지 몰라 README에 있는 내용을 그대로 넣었다. 과제를 제출하고 예제 테스트 진행 결과 다행히 테스트 실패 없이 성공하였다.처음으로 pull request를 해봤었다. 놀랍게도 444번째로 pull request를 진행한 사람이 되었다. 2024. 10. 23.
4일차 - 리팩토링 하기 1. 리팩토링 하기최종적인 파일 계층은 다음과 같다.리팩토링 할 때, 직관적이고 쉽다고 생각하는 부분부터 진행하였다. view와 validation을 먼저 같이 개발하였고, dto와 domain을 그 다음으로 개발하였다. 마무리로 controller를 만들고 Application.java에 탑재하였다. 처음부터 이미지 처럼 구조가 나오지는 않았다. domain부분에서 기능을 재 구현할때 validation을 좀더 깔끔하게 만들 수 있을 것 같은 포인트들을 조금씩 잡아내어 서서히 코드를 수정해 나갔다.코드가 서서히 변화는 과정이 커밋과정에도 들어갔으면 좋았겠지만, 이정도의 리팩토링을 처음하다보니 일단 만들어 보는 것 먼저 하자 라는 생각이 들어서 그 부분이 들어가지 못한 것은 아쉬웠다. 2주차에 기능 구현.. 2024. 10. 22.
3일차 - 제공된 테스트 실행하기 1. 제공된 테스트 돌려보기과제 전 체크 리스트를 보면, 테스트 실행 가이드가 있었다.IDE에서 콘솔창을 하나 열고 gradlew.bat clean test 를 실행해봤지만 아래처럼 한글이 깨지게 나왔다.해결책으론, 윈도우 환경변수 설정에 사용자변수를 하나 만들어줬다.JAVA\_OPTS 이름으로 -Dfile.encoding=UTF-8 를 등록해주고 IDE를 재시작 해주니 문제가 해결되었다.powershell, bash gradlew 한글 깨짐 현상 수정 powershell, bash gradlew 한글 깨짐 현상 수정IntelliJ에서 터미널을 사용하는중 gradlew와 gradlew.bat을 통해 clean test를 실행하려고 하는데, 평소에 잘 나오던 한글 인식을 못해서 컴파일이 불가능한 현상이 나.. 2024. 10. 21.
2일차 - 기능 구조에 대해 고민해보기 1. 대강 기능 만들어보기어제 작성한 README 를 기반으로 기능을 만들어보았다.Application.java 에 한번에 코드를 다 짜보고 잘 돌아가는지 확인해 보았다.처음 부터 view controller model validation 등의 구조로 분리하여 생각하기 힘들어서, 프로그램의 기능이 흘러가는 순서대로 코드를 짰다.코드를 짜다보니 검증과정과 덧셈과정에서 각각 loop를 도는 것이 비효율 적일 것 같아서 하나의 loop문에서 검증과 덧셈을 모두 진행하였다. 하지만 유지보수 측면에서 이 코드는 별로 좋지 않다는 것을 깨달았다. 그리고 검증과 덧셈부문이 결합도가 너무 강하여 따로 분리하기도 힘든 단점이 있었다.분리하여 각각 loop를 적용하기로 하였다. 이렇게 분리하게되면 추가적인 검증 조건이 제.. 2024. 10. 21.
1일차 - 세팅하기, 구현 고민하기 1. 프리코스 대비하기우테코 6기 문제 풀어보기우테코 프리코스 문제로 뭐가 나오는지 궁금하여서 과거의 우테코 6기때는 어떤 문제가 나왔었는지 찾아봤었다. 1주차에는 숫자 야구 게임이 나왔었다. 게임 로직 자체는 쉬워서 난이도는 쉽겠거니 생각했었다. 하지만 합격자들의 코드를 보니, 다들 리팩토링하여 객체지향적으로 코드를 짠 것을 보니 프리코스의 난이도는 과제 알고리즘의 난이도가 다가 아니라고 느껴졌다.2. 구현 기능 고민하기과제의 README에 들어갈 내용을 아래와 같이 만들어봤다.구현 기능 목록🎯 문자열 입력✅ 구분자와 양수로 구성된 문자열을 입력받는다.✅ 기본 구분자인 쉼표 , 또는 콜론 : 을 구분자로 가지는 문자열이 입력된다."", "1,2", "1,2,3", "1,2:3" ✅ 커스텀 구분자를 입.. 2024. 10. 16.