분류 전체보기69 상수 값 추출에 대하여 클린 코딩에 관심이 있는 개발자라면 모두 다음의 문장을 읽어본 적이 있을 것 같습니다. "매직 넘버, 매직 스트링을 상수로 선언하라." 상수 추출을 하는 이유 코드의 역할이 무엇인가? 그렇다면, 왜 매직 넘버, 매직 스트링을 지양하고 해당 값을 상수로 선언해야 하는 것일까요? 아래의 코드로 그 이유를 한번 살펴봅시다! private void validateNumberRange(int number) { if (number 45) { throw new IllegalArgumentException(); } } 해당 코드의 역할이 무엇인지 짐작이 가나요? "숫자가 1 ~ 45 사이의 값인지를 검증해 주는 코드입니다." 라고 한다면, 그건 프로그램을 조금이라도 다뤄 봤던 사람이라면 모.. 2023. 12. 3. [Java / enum] - 왜 enum이 상수 클래스보다 더 좋은건데?? 서론 안녕하세요, 우테코 6기 백엔드 지원자 Zangsu 입니다! 우선, 글을 작성하기 전 미리 말씀 드리자면, 저는 대부분의 상수를 별도의 클래스를 생성해 관리하고 있었는데요. 그 이유는 다음과 같습니다. 1. 열거형은 하나의 논리적인 그룹에 포함되는 값들을 열거하기 위해 사용해야 한다. 모든 상수를 하나의 'enum'에 몰아 둔다면, 서로 관심사가 어중간하게 다른 값들이 하나의 "열거형" 이라는 그룹에 위치하게 되는데, 이는 올바른 책임 분리라고 생각하지 않았습니다. 2. 'enum'을 사용하게 되면 상수 클래스에 비해 값을 가지고 오는 코드가 길어진다. 이건 정말 사소한 취향인데요. 상수 클래스를 사용한다면 값을 가지고 오는 코드는 다음과 같을겁니다. 'ClassName.constName' 반면, .. 2023. 11. 15. [1주차/숫자야구] 3. getter을 사용하는 대신 객체에 메시지를 전달하기 이번 포스팅은 리팩토링 과정을 담았다. 리팩토링 이전 리팩토링을 진행하기 전의 한 번의 게임 흐름을 간단하게 살펴보자. //Game.java public void play() { Result result; computer.init(); do { System.out.print("숫자를 입력해주세요 : "); List input = player.getInput(); result = computer.getResult(input); System.out.println(result); } while (result.getStrike() != 3); System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); } 우리는 Computer 객체와 Player 객체의 각각의 메서드를 호출하며 전체 .. 2023. 10. 23. [1주차/숫자야구] 2. 테스트코드로 입력에 대한 예외 처리 하기 Player 클래스에서 Consoles 클래스로 사용자의 입력을 처리하고, 잘못된 입력에 대해선 IllegalArgumentException을 발생시켜 주었다. 이제, 내 로직이 예상과 같이 동작하는지 확인하기 위해 테스트 코드를 작성할 차례이다. 그런데, 테스트 코드를 실행할 때 마다 직접 입력을 넣어주는 것은 비효율적이기에, 테스트코드 자체적으로 사용자의 입력을 대신할 입력 처리를 해 주어야 했다. 처음 시도했던 것은 System.setIn() 메서드를 통해 직접 입력을 처리해 주는 것이었다. 그런데, setIn() 메서드가 익숙하지 않은 탓인지, 첫 번째로 실행되는 테스트를 제외한 모든 테스트가 입력을 정상적으로 처리해 주지 못했다. 즉, Consoles.nextLine()을 통해 값을 가지고 와야.. 2023. 10. 21. 이전 1 2 3 4 5 6 ··· 18 다음