-
Notifications
You must be signed in to change notification settings - Fork 32
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
[시온] step-4 일부 구현 #205
Open
LaStella
wants to merge
24
commits into
codesquad-members-2023:main
Choose a base branch
from
LaStella:step4
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
[시온] step-4 일부 구현 #205
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2차원 boolean 배열로 사다리를 나타내며 라인이 있는 곳은 true, 없는 곳은 false가 저장된다. 라인은 모두 사다리의 열(column)을 기준으로 오른쪽에 존재한다. toString()으로 사다리를 출력하면 2차원 배열 ladder를 순회하며 라인이 있는 곳에는 "-"가 붙으며 없는 곳은 공백문자가 붙는다. 마지막 열은 오른쪽에 열이 존재하지 않으므로 라인이 없다.
gitignore 수정 후 캐시를 삭제하지 않아 추적되는 파일들이 존재하여 캐시 삭제 후 추적되지 않는 파일을 삭제한다.
for문을 향상된 for문을 전환하였습니다. - 배열 전체를 읽고 출력만 하므로 인덱스가 필요없습니다. - 가독성 향상 if문을 삼항연산자로 대체하였습니다. - 코드 축약
입력값이 없을 시 IOException을 날리지 않고 다시 입력을 받도록 재귀호출로 변경하였습니다.
출력문과 제한값을 파라미터로 가지는 inputToValue 메소드를 추가하였습니다. - 사람 수 입력과 사다리 높이 입력은 유사한 코드를 사용하므로 이를 하나의 메소드로 만들어 재사용이 가능합니다. - run()메소드의 코드 축약 parse메소드가 IOException을 던지지않고 에러 방지를 위해 Optional 객체를 사용합니다.
사람 이름을 입력받으므로 사다리 높이 변환과정과 달라 다른 메소드로 분리하였습니다. 사람 이름을 ArrayList로 변환하는 과정에서 유효한 값을 확인하는 메소드isValidPlayer를 추가하였습니다. 사람 이름과 사다리 입력을 각각 서로 다른 메소드가 처리하므로 메소드명을 수정하였습니다. 이름과 좌표(row, col)를 속성으로 가지는 Player를 클래스를 추가하였습니다. 사람을 Player객체로 나타냅니다.
boolean[][] ladder 를 ArrayList<ArrayList<Boolean>> ladder로 변경하였습니다. 라인을 랜덤하게 생성 시 이전 열(col-1)에서 라인이 존재하는 경우 false, 존재하지 않는 경우 임의의 boolean값이 현재 열(col)에 저장됩니다.
3월 13일부터 3월 17일까지 주간 학습 계획 일정을 추가하였습니다.
inputToLadderSize메소드에서 while문을 대신 재귀호출하여 재입력하도록 수정하였습니다. - indent를 줄여 가독성 향상 메소드 사이에 간격을 추가하였습니다.
사람이름을 출력하는 메소드 printPlayerList를 구현하였습니다. - 리스트안에 있는 사람들의 이름을 가운데 정렬하고 하나의 문자열로 출력합니다. 5글자를 기준으로 가운데 정렬하는 메소드 alignCenter를 구현하였습니다. - 5에서 이름의 길이를 뺀 만큼 이름의 앞, 뒤로 공백을 붙여 정렬합니다. player의 속성에 접근하고 변경할 수 있도록 getter와 setter를 추가하였습니다.
사다리가 조건에 맞게 만들어졌는지 테스트합니다. - 라인이 겹치는 곳이 없는지 테스트 - 마지막 열에 라인이 없는지 테스트
최대 이름 길이(MAX_NAME_SIZE)를 상수로 만들어 사용합니다. - 가독성 향상
count를 사용하지않고 allMatch를 사용하여 playersNames의 모든 값이 조건을 충족시키는지 확인합니다.
사다리의 행을 나타내는 객체 Line을 만들었습니다. - Line은 다리 유무를 나타내는 점들의 리스트 points를 가집니다. - 한 점(i)에서 다리 유무를 반환하는 메소드 hasBridge(int i)와 점들의 개수를 반환하는 size()메소드를 가집니다.
사다리의 행을 나타내는 객체 Line을 생성하여 사다리를 생성하도록 수정하였습니다. 테스트 클래스에서 SoftAssertion을 사용하여 테스트를 진행합니다. - 테스트에서 실패하는 케이스가 나와도 이후의 테스트를 모두 진행한 후 결과를 출력합니다.
LadderGame 클래스의 isValidPlayer메소드에서 잘못된 조건식을 수정하였습니다.
UI 관련 클래스는 view 패키지로 분류하였습니다. 그 외 비즈니스 로직을 담당하는 클래스는 domain으로 분류하였습니다.
try-catch에서 재귀호출로 입력을 다시 받지 않게 수정하였습니다. Optional을 사용하여 IOException이 발생하면 비어있는 객체가 반환됩니다. 들여쓰기를 2칸 -> 4칸으로 수정하였습니다.
사람 이름 입력과 사다리 높이 입력에서 잘못된 입력시 재귀호출로 재입력 받지 않도록 수정하였습니다. 사람 이름 입력과 사다리 높이 입력을 while문을 사용하여 올바른 입력을 받을 때까지 반복합니다. 잘못된 입력은 Optional을 사용하여 비어있는 객체를 반환합니다.
사람 이름 입력과 사다리 높이 입력을 while로 재입력 받지 않습니다. 입력값을 players와 ladderSize로 변환하는 메소드에서 재귀호출하여 재입력받습니다. 잘못적은 변수명(LadderSize -> ladderSize)을 수정하였습니다.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
고민한 내용
이전 코드에서 try-catch안에서 재귀호출로 재입력을 받도록 하였습니다. catch블록에서 재귀호출하는 것은 좋지 않다는 피드백을 보았습니다.
이에 Optional을 사용하여 catch블록에서 Optional.empty()를 던지고 호출한 메소드에서 empty를 확인하면 재귀호출하여 재입력 받는 방법을 생각했습니다. 이 경우 Optional 을 사용함으로써 코드가 길어지게 되는 부분이 고민이었습니다.