강의
클린코드의 개념과 첫 리팩토링
클린코드의 개념과 필요성에 대해 학습하고, 또 기존에 Controller에서 모든 역할을 수행 했던 것을 Service, Repository를 생성하여 이를 3개의 역할로 분리하는 과정에 대하여 배우고 리팩토링을 진행하였다.
과제
진도표 5일차와 연결됩니다
우리는 <클린 코드>라는 개념을 배웠습니다. <클린 코드>에 대한 감각을 익히기 위해서는 어떤 코드가 좋은 코드이고, 어떤 코드가 좋지 않은 코드인지 이론적인 배경을 학습하는 것도 중요할 뿐 아니라, 다양한 코드를 읽어 보며 어떤 부분이 읽기 쉬웠는지, 어떤 부분이 읽기 어려웠는지, 읽기 어려운 부분은 어떻게 고치면 좋을지 경험해보는 과정이 필요합니다.
이번 과제는 제시된 코드를 읽어보며, 코드를 더 좋은 코드로 고쳐나가는 과정입니다. 구글에 “클린 코드” 혹은 “클린 코드 정리”를 키워드로 검색해보면, 이론적인 배경을 충분히 찾아보실 수 있습니다. 🙂 그러한 내용들을 보며 제시된 코드를 더 좋은 코드로 바꿔보세요! (코드를 바꿀 때 왜 바뀐 코드가 더 좋은 코드인지 다른 사람에게 설명하신다고 생각해보시면 더욱 좋습니다.)
[제시된 코드]
- 여러 함수로 나누어도 좋습니다! 🙂
- 여러 클래스로 나누어도 좋습니다! 🙂
◾문제
◾풀이
🔻Game
public class Game {
public static void main(String[] args) {
DiceGame diceGame = new DiceGame();
diceGame.startGame();
}
}
🔻DiceGame
public class DiceGame {
private static final int DICE_SIZE = 6;
private final int[] results = new int[DICE_SIZE];
public void startGame(){
int playNumber = getPlayNumber(); //사용자 입력받기
playDice(playNumber); // 게임 플레이
new PrintGameInfo().printResults(results); // 결과 출력
}
private int getPlayNumber(){
new PrintGameInfo().printStartInfo();
Scanner scanner = new Scanner(System.in);
return scanner.nextInt();
}
private void playDice(int playNumber){
for (int i = 0; i < playNumber; i++) {
int result = (int) (Math.random() * DICE_SIZE);
results[result]++;
}
}
}
🔻PrintGameInfo
public class PrintGameInfo {
public void printStartInfo(){
System. out.print("주사위를 던질 횟수를 입력하세요 : ");
}
public void printResults(int[] results){
for (int i = 0; i < 6; i++) {
System.out.printf("%d는 %d번 나왔습니다. \n",(i+1),results[i]);
}
}
}
콘솔 출력 결과
🔨리팩토링
print()하는 부분을 분리하면 깔끔할 것 같아 따로 클래스로 만들어 하였는데 DiceGame에서 활용 시 `new 객체.메서드()`와 같이 사용하는 것이 좋은 방법인지는 모르겠다. 클린코드에 대해 더 공부해보고 더 좋은 방향으로 리팩토링 시도해보아야겠다!
잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다❤️
좋은 하루 되세요😊
Reference
자바와 스프링 부트로 생애 최초 서버 만들기 [서버 개발 올인원 패키지] / 최태현 / 인프런 강의
https://dev-coco.tistory.com/182
'activity > 인프런 워밍업 클럽' 카테고리의 다른 글
[인프런 워밍업 클럽 0기] 일곱 번째 과제 - JPA 실습 (0) | 2024.02.27 |
---|---|
[인프런 워밍업 클럽 0기] 여섯 번째 과제 - API 역할 분리(Controller, Service, Repository) (0) | 2024.02.25 |
[인프런 워밍업 클럽 0기] 네 번째 과제 - API 개발하기 (0) | 2024.02.22 |
[인프런 워밍업 클럽 0기] 세 번째 과제 - 익명클래스와 람다식 (0) | 2024.02.21 |
[인프런 워밍업 클럽 0기] 두 번째 과제 - API 만들기 (0) | 2024.02.20 |