Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Step2 #1856

Open
wants to merge 5 commits into
base: hj1115hj
Choose a base branch
from
Open

Step2 #1856

wants to merge 5 commits into from

Conversation

hj1115hj
Copy link

안녕하세요 리뷰어님~

최근에 일이 바빠서 pr을 늦게올리게 되었어요..ㅜㅜ

리뷰 받고싶은 부분

  1. getter 사용을 자제하는것이 좋다고 배웠는데 현재 getter을 클래스의 메시지로 보내게되면 print하는 로직을 구현해야하는 단점이 있어서 사용하게 되었어요 어떻게 생각하시나욤? 저는 getter 정도는 읽기 전용이라 값을 변경하지 않아서 이러한 경우에는 사용하는게 좋다고 생각했습니다.ㅎㅎㅎ

Copy link

@seondongpyo seondongpyo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2단계 미션 잘 작성해주셨네요 👍
다만 핵심 도메인 클래스들에 대한 단위 테스트가 누락되어 있는 것 같아요 😢
몇 가지 코멘트 드렸는데 확인 후 다시 리뷰 요청을 부탁 드리겠습니다 🔥

import java.util.List;
import java.util.Scanner;

public class InputView {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

InputViewPrintvView와 같이 정적 메서드만을 갖는 유틸리티 클래스로 만들어보면 어떨까요?

public List<String> names;
public int ladderHeight = 0;

public void saveInput() {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 하나의 메서드에서 참가자 이름도 입력 받고 사다리 높이도 입력을 받는 두 가지 기능을 수행하고 있는데요,
    각각의 기능별로 메서드를 분리해보면 어떨까요?
  • 사용자로부터 입력 받는 값들을 내부에 상태로 가지기 보다는 메서드에서 바로 반환해도 충분할 것 같습니다.


import java.util.List;

public class PrintView {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정적 메서드만을 포함하는 유틸리티 클래스이니 인스턴스를 생성하지 않아도 사용이 가능합니다만,
누군가는 실수로 생성자를 호출하여 인스턴스를 생성하려고 할 수도 있으니,
private 생성자를 추가하여 불필요한 인스턴스화를 막아보면 어떨까요?

Comment on lines +18 to +20
int padding = 5 - name.length();
String paddedName = name + " ".repeat(padding);
return paddedName;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 부분을 별도의 메서드로 추출해보는 건 어떨까요?
메서드 이름을 통해 어떤 로직을 수행하는지를 보다 쉽게 표현해볼 수 있지 않을까 생각합니다.

}

private static void printRow(boolean point){
if(point){

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번 과정에서는 if-else를 사용하지 않기로 했으니, early return 방식으로 바꿔보시면 좋을 것 같아요.
https://jheloper.github.io/2019/06/write-early-return-code/


public Line(int countOfPerson) {
IntStream.range(0, countOfPerson - 1)
.mapToObj(i -> isInValidPosition(i) ? false : RandomValueGenerator.generate())

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

삼항 연산자 또한 if-else의 축약형이기 때문에, 다른 방식으로 작성해보시면 좋을 것 같습니다.

public static void main(String[] args) {
InputView inputView = new InputView();
inputView.saveInput();
System.out.println(inputView.names);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

중간에 사다리게임 참가자 이름을 출력하는 요구사항은 없기 때문에 제거하셔도 될 것 같습니다.

import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Ladder {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TDD를 중점적으로 학습하는 과정인데, 핵심 도메인 클래스들에 대한 단위 테스트가 작성되어 있지 않네요 😢
Ladder에 대한 단위 테스트를 작성해보면 어떨까요?

public class Ladder {
private List<Line> lines;

public Ladder(int height, int nameSize) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

만약 사다리 높이 값이 음수로 전달된다면 문제가 생길 수 있을 것 같아요.

import java.util.List;
import java.util.stream.IntStream;

public class Line {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line 클래스에 대한 단위 테스트도 작성해보면 어떨까요?

@seondongpyo
Copy link

getter 사용을 자제하는것이 좋다고 배웠는데 현재 getter을 클래스의 메시지로 보내게되면 print하는 로직을 구현해야하는 단점이 있어서 사용하게 되었어요 어떻게 생각하시나욤? 저는 getter 정도는 읽기 전용이라 값을 변경하지 않아서 이러한 경우에는 사용하는게 좋다고 생각했습니다.ㅎㅎㅎ

넵 view에서 도메인 객체 내부의 값을 출력하기 위함이기 때문에 사용하셔도 괜찮습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants