2주차를 쓰다가 올해 초 생각이나서 첨부해본다.
사실 난 이전에 동아리에서 자동차 경주, 로또 게임을 한 번 풀어본 경험이 있다. 난 사실 전혀 백엔드쪽을 몰랐다보니 동아리에서 우테코 출신분이 있었다고 할때도 다른애들은 우와아하고 있을때 난 사실 우테코도 처음 들어봤어서 전혀 감흥이 안생겼으나 이제 나도 우와아 할 것 같다.. ㅋㅋ 그리고 그걸 내가 도전하게 될 줄이야..
https://github.com/TEAM-ALOM/java-racingcar/pull/18/files
https://github.com/TEAM-ALOM/java-lotto/pull/30/files
올해 3월 내가 백엔드를 시작하고 작성한 코드들이다.. ㅋㅋㅋ 아예 객체지향, 클린코드, 책임 그런걸 전혀 모르고 짠 코드들이다.
public class LottoController {
public void lottoStart(){
int buyMoney;
int bonusNumber;
List<Integer> winLottoList;
List<List<Integer>> lottoNumberList = new ArrayList<>();
Scanner sc = new Scanner(System.in);
System.out.println("구입금액을 입력");
buyMoney = sc.nextInt();
LottoGenerator lottoGenerator = new LottoGenerator(buyMoney); //로또 생성기
lottoNumberList.add(Arrays.asList(8, 21, 23, 41, 42, 43));
lottoNumberList.add(Arrays.asList(3, 5, 11, 16, 32, 38));
lottoNumberList.add(Arrays.asList(7, 11, 16, 35, 36, 44));
lottoNumberList.add(Arrays.asList(1, 8, 11, 31, 41, 42));
lottoNumberList.add(Arrays.asList(13, 14, 16, 38, 42, 45));
lottoNumberList.add(Arrays.asList(7, 11, 30, 40, 42, 43));
lottoNumberList.add(Arrays.asList(2, 13, 22, 32, 38, 45));
lottoNumberList.add(Arrays.asList(1, 3, 5, 14, 22, 45));
System.out.printf("%d개를 구매했습니다.\n",lottoGenerator.lottoQuantity);
// for (int i=0; i<lottoGenerator.lottoQuantity; i++){
// lottoNumberList.add(lottoGenerator.generateLottos());
// }
System.out.println(lottoNumberList);
System.out.println("당첨 번호를 입력해 주세요.");
winLottoList =Arrays.stream(sc.next().split(","))
.map(Integer::parseInt)
.collect(Collectors.toList());
System.out.println("보너스 번호를 입력해 주세요.");
bonusNumber = sc.nextInt();
// 결과 카운터
int threeMatches = 0;
int fourMatches = 0;
int fiveMatches = 0;
int fivePlusBonusMatches = 0;
int sixMatches = 0;
for (List<Integer> lottoNumbers : lottoNumberList) {
int matchCount = 0;
boolean bonusMatch = false;
for (int num : lottoNumbers) {
if (winLottoList.contains(num)) {
matchCount++;
} else if (num == bonusNumber) {
bonusMatch = true;
}
}
// 결과 업데이트
if (matchCount == 3) {
threeMatches++;
} else if (matchCount == 4) {
fourMatches++;
} else if (matchCount == 5) {
if (bonusMatch) {
fivePlusBonusMatches++;
} else {
fiveMatches++;
}
} else if (matchCount == 6) {
sixMatches++;
}
}
float profit;
// 결과 출력
System.out.println("3개 일치 (5,000원) - " + threeMatches + "개");
System.out.println("4개 일치 (50,000원) - " + fourMatches + "개");
System.out.println("5개 일치 (1,500,000원) - " + fiveMatches + "개");
System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원) - " + fivePlusBonusMatches + "개");
System.out.println("6개 일치 (2,000,000,000원) - " + sixMatches + "개");
profit = (float) (threeMatches * 5000 + fourMatches * 50000 + fiveMatches * 1500000 + fivePlusBonusMatches * 30000000 + sixMatches * 2000000000) /buyMoney*100;
System.out.println("총 수익률은 " + profit + "%입니다.");
}
}
참고로 난 ㄹㅇ 잘짠줄 알았다. 혼자 뿌듯했는데 웃기긴했다.
https://github.com/woowacourse-precourse/java-racingcar-7/pull/825/files
이번에 제출한 코드이다.
물론 아직 많이 부족하지만 몇달전에 비해서 많이 좋아진 것 같아서 기분은 좋다. 진행하면서 많이 배우고 성장한게 느껴져 이 기간이 즐거운 것 같다.
아래는 회고록이다.
2주차 미션을 진행하면서 가장 큰 어려움은 주어진 테스트 코드를 수정하지 않으면서, 요구사항을 철저히 지키는 것이었습니다. 마지막에 테스트가 통과되지 않아 급하게 여러 번 커밋을 진행했던 점이 후회로 남습니다. 특히, 기존 테스트에서 발생한 IOException 처리가 문제였는데, 우테코 라이브러리의 Console.readline() 대신 BufferedReader로 입력을 받아서 발생한 상황이었습니다. 그로 인해 한참을 수정하고 커밋하면서 어려움을 겪었지만, 제출 전 문제를 해결해 다행이었고 만족스러웠습니다. 또한, 이번에 JUnit을 활용해 코드의 안정성을 높이면서 작업할 수 있었고, 이를 통해 자신감도 얻었습니다. 이 과정에서 TDD 방법론에 대해 배우게 되었고, 앞으로 적용해보고 싶은 욕심이 생겼습니다.
가장 어려웠던 부분 중 하나는 “하나의 함수가 하나의 기능만 수행해야 한다”는 원칙을 지키는 것이었습니다. 이 원칙을 지키기 위해 객체 생성 단위까지 고민하게 되었고, 처음에는 Car 클래스만을 구현하려고 했습니다. 그러나 검증 로직이 들어가면서 Car 클래스가 복잡해졌고, 중복 처리를 피하기 위해 CarNames 클래스를 추가하게 되었습니다. Cars 클래스를 만드는 것도 고려했지만, GameData 클래스에서 충분히 코드 가독성을 유지할 수 있다고 판단해 추가 생성은 하지 않았습니다.
또한, 이번 과정을 통해 테스트하기 좋은 코드와 그렇지 않은 코드의 차이를 알게 되었습니다. void 반환값을 가지는 메서드는 테스트하기가 쉽지 않고, 지나치게 많은 생성자를 가져 외부에서 값을 주입받기 어려운 코드 역시 테스트하기 어려웠습니다. 이에 생성자 주입 방식을 도입해 코드를 개선했는데, 이를 통해 생성자 주입 방식의 장점을 이해하게 되었고, 검색을 통해 이 방식이 Spring까지 이어진다는 것을 배우기도 했습니다.
이번 주차 과제를 통해 많은 것을 배울 수 있었고, 다음 과제도 매우 기대가 됩니다. 보람찬 한 주를 보낼 수 있게 해주셔서 감사합니다!
'etc' 카테고리의 다른 글
[우아한테크코스] 프리코스 3주차 (1) | 2024.11.04 |
---|---|
[우아한테크코스] 프리코스 1주차 (4) | 2024.10.22 |
[투자] 금리인하 후 주가 변동성 (0) | 2024.10.04 |
예비창업패키지 - 창업중심대학 후기 (1) | 2024.03.27 |