안녕하세요, Brad입니다! 오늘은 '로또' 미션 step3를 진행하고 알고리즘 문제를 하나 풀면서 하루를 보냈네요. 우선 피드백 받은 내용부터 정리해볼게요.
Main
클래스의 업무 과다rank.getWinningMoney()
사용 피하기 →getter()
사용 피하기Lotto
번호를Integer
대신LottoNum
처럼 추상화하기 → VO만들어 적용해보기LottoGame
에 DIP원칙 적용해보기
피드백은 위와 같이 받았구요. 위 과정을 진행하면서 잔잔한 수정사항이 있었습니다.
- 예외처리, 상수들을 한 클래스로 몰아서 처리하는 것 분리하기
이전에 구현할 때는 이게 몰아서 있는데 좋다고 생각했었습니다. 왜냐하면 뭔가 변경사항이 있을 때 모여있는 곳에서 찾아서 변경하는게 더 편리할 것이라 생각했기 때문입니다. 그리고 LOTTO_SIZE
나 LOTTO_PRICE
처럼 여러 클래스에서 사용되는 값이라면 굳이 한 클래스에 있어서 그 상수값을 가져와야할까 라는 생각도 들었습니다. 그런데 오늘 오후 멀리서 Pobi가 이렇게 몰아서 사용하는게 좋지 않은 것이라고 하더라구요. 그래서 '왜 몰아서 쓰는데 좋지 않을까?' 생각을 해봤습니다. 바로 깨달음이 오지 않아 늘 그랬든 Pobi가 추천하는대로 해보면서 고민해봤는데요. 몇 가지 든 생각이 있습니다.
- 상태값이나 상수값이나 그 값을 이용하는 것들은 최대한 가까이에 있을 것이 좋다
LOTTO_SIZE
의 경우Lotto
클래스에,LOTTO_PRICE
의 경우Money
라는 클래스에 있는 것이 오히려 더 자연스럽다는 생각이 들었습니다. 왜 그런 생각이 안들었을까..- 하나의 모듈(그 자체로 기능을 하는 단위)을 만든다고 생각한다면 멀리 떨어져 있는 것보다 그 안에서 기능을 수행하는 것이 맞다. 그런 점에서 예외처리, 상수도 처리하는 곳 쪽에 위치해야 한다.
몰아서 쓴 것은 저의 짧은 생각이었다는 것을 느꼈습니다.
오늘 피드백 받은 내용 중 DIP 원칙을 적용해보는 것 이외엔 모두 반영해보았는데요. 그 부분에 대한 정리는 내일 해볼려고 합니다. 대신 최근 며칠간, 특히 오늘 step을 진행하면서 Intellij gradle이 제대로 작동하지 않아 문제가 발생하였었는데요. 이 부분에 대해 왜 그런지, 또 어떤 기능을 하는지 아직 자세히는 모르지만 다음에 또 문제가 발생할 경우를 생각해서 해결방법만 기록해두려 합니다.
maven으로 import한 프로젝트가 테스트 코드에서 아무런 반응이 없을 때
다음과 같은 경우입니다.
이 경우 아래와 같이 pom.xml
파일을 우클릭하여 Maven > Reimport 를 하니까 다시 생기(?!)를 되찾더라구요.
짠!! 다시 부활했어요.
gradle으로 import한 프로젝트가 테스트 코드에서 아무런 반응이 없을 때 또는 해당 jar 안가져올 때
윗 부분 maven으로 import한 것은 gradle로 하려고 했는데 안되어서 피치못하게 maven으로 import했었는데요. 근데 gradle로 안되어서 참 찝찝했습니다. 결국 이 문제 때문에 고민하게 될 날이 올 것이라 확신하기 때문에.. 이 상황은 제가 미처 캡쳐를 하지 못해서 이미지가 없네요. 간략하게 상황을 좀 더 부연설명하면 다음과 같을 때 입니다.
- 프로덕션 코드, 테스트 코드 모두 클래스 파일, 폴더 파일 색이 다 제대로 나오지만 테스트 코드 내 jar을 안가져와 @test, assertThat 부분이 모두 빨간색 컴파일 오류가 뜬다
- External Libraries에 Gradle: 또는 Maven: 로 시작하는 Library들은 없고 Java Library 밖에 없다.
그래서 여러 시도를 해봤습니다. 각각 시도해본 것들과 최종 성공한 것까지 정리해볼께요.
Java 8로 다운그레이드 하기(현재 Java 10 사용 중)
- 대부분 Java 8로 맞춰져 있는 것이 많기 때문에 혹시나 해봤습니다.
- 결과는 변화없음
Gradle Wrapper 이용하기
- Intellij 터미널에
gradle wrapper --gradle-version 4.8
입력하여 해당 버전으로 Gradle Project 빌드해봤습니다. - 결론적으로 생기가 없는 상황(클래스 파일 옆 파란색 없고 테스트 코드 및 프로덕션 코드 폴더 초록색, 파란색 없을 때)은 이를 통해 해결해줍니다. 하지만 Gradle: library들을 가져오지 않아 테스트 코드 내 온통 컴파일 오류입니다..
- Intellij 터미널에
특정 jar 다운 받아서 Project Structure > Libraries 에 수동으로 추가해주기
테스트 코드 내 컴파일 오류를 해결하고 실제 테스트 코드를 작동하기 위해 다음과 같은 jar 파일들이 필요하였습니다.
assertj-core-3.9.0.jar
,hamcrest-core-1.3.jar
,junit-4.12.jar
실제로 이를 추가하고 돌려보니 제대로 작동되었습니다. 하지만.. Intellij를 종료하고 다시 켜면 다시 수동으로 추가해야 합니다. 이렇게는 못 삽니다..
이 외 여러 방법을 도전해봤지만 이 정도가 제일 기억에 남네요. 이젠 최종 해결방법1입니다. 생각보다 허무하게 간단하게 해결 가능하더라구요. 제가 생각하기론 Maven 또는 Gradle 프로젝트가 제대로 Provoke가 되지 않아서 생기는 문제인 것 같습니다. 따라서 이 두 친구 중 적어도 한 개라도 깨워서 Exteral Libraries 안에 Maven: 또는 Gradle: 로 시작하는 Library들이 채워지는 것에 초점을 두어야 합니다. 그래서 Gradle을 이렇게 깨웠습니다.
우측 상단에 있는 Gradle버튼을 누릅니다.
해당 영역에 우클릭하여 'Refresh Gradle Project'를 선택합니다.
기존에 External Libraries에 Java Library 밖에 없었다면 다음과 같이 미친듯이 Gradle Library를 다운 받고 있다는 것을 하단에 상태표시줄에서 볼 수 있습니다.
최종적으로 External Libraries에 Gradle Library가 추가된 모습을 볼 수 있습니다. 물론 테스트 코드 내 컴파일 오류로 인한 빨간색 줄도 모두 없어지구요!
아 그리고 혹시 여기에 Gradle 기본 Library 이외 사용자에 의해 추가적으로 import되는 Library 명세가 build.gradle
파일에 있는 것 같아요. 따라서 이 파일이 혹시 없다면 다른 프로젝트에서 사용하던 파일을 그대로 복사와서 붙여넣고 위와 같은 과정을 하니 제대로 실행이 되네요!
오늘 추가적으로 공부한 부분
'TIL' 카테고리의 다른 글
Today's Dev Notes(2018-11-01) (0) | 2018.11.01 |
---|---|
Today's Dev Notes(2018-10-31) (0) | 2018.10.31 |
Today's Dev Notes(2018-10-28) (0) | 2018.10.29 |
Today's Dev Notes(2018-10-25) (0) | 2018.10.25 |
Today's Dev Notes(2018-10-24) (6) | 2018.10.24 |