-
Notifications
You must be signed in to change notification settings - Fork 118
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
[둘리] 2단계 자동차 경주 제출합니다. #68
Changes from 1 commit
3e97c71
cb95bad
89d4dd8
e37d339
affbefb
b6834c8
1b39386
e818230
18e68de
f282093
4e8ad55
90c2b1d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||
---|---|---|---|---|
@@ -1,5 +1,7 @@ | ||||
package util | ||||
|
||||
import view.OutputView | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
domain과 view에 둘 다 접근이 가능한 것은 Controller입니다. |
||||
|
||||
class Validator { | ||||
|
||||
fun checkNames(names: String?) { | ||||
|
@@ -18,34 +20,35 @@ class Validator { | |||
|
||||
fun checkTryNumber(name: String?) { | ||||
checkTryNumberNull(name) | ||||
checkTryNumberIsRight(name) | ||||
checkTryNumberIsRight(name ?: "") | ||||
} | ||||
|
||||
private fun checkNameNull(name: String?) { | ||||
require(name != null) { Constants.INPUT_NAME_NULL_ERROR_MESSAGE } | ||||
require(name != null) { OutputView().outputErrorMessage(Constants.INPUT_NAME_NULL_ERROR_MESSAGE) } | ||||
} | ||||
|
||||
private fun checkNameSize(name: String) { | ||||
require(name.length < 5) { Constants.INPUT_NAME_SIZE_ERROR_MESSAGE } | ||||
require(name.length < 5) { OutputView().outputErrorMessage(Constants.INPUT_NAME_SIZE_ERROR_MESSAGE) } | ||||
} | ||||
|
||||
private fun checkNameEmpty(name: String) { | ||||
require(name != "") { Constants.INPUT_NAME_NULL_ERROR_MESSAGE } | ||||
require(name != "") { OutputView().outputErrorMessage(Constants.INPUT_NAME_NULL_ERROR_MESSAGE) } | ||||
} | ||||
|
||||
private fun checkNameRight(name: String) { | ||||
require(name.contains("^[a-zA-Z가-힣]*$".toRegex())) { Constants.INPUT_NAME_RIGHT_ERROR_MESSAGE } | ||||
require(name.contains("^[a-zA-Z가-힣]*$".toRegex())) { OutputView().outputErrorMessage(Constants.INPUT_NAME_RIGHT_ERROR_MESSAGE) } | ||||
} | ||||
|
||||
private fun checkTryNumberNull(number: String?) { | ||||
require(number != null) { Constants.INPUT_TRY_NUMBER_NULL_ERROR_MESSAGE } | ||||
require(number != null) { OutputView().outputErrorMessage(Constants.INPUT_TRY_NUMBER_NULL_ERROR_MESSAGE) } | ||||
} | ||||
|
||||
private fun checkTryNumberIsRight(number: String?) { | ||||
try { | ||||
number!!.toInt() | ||||
} catch (e: NumberFormatException) { | ||||
throw IllegalArgumentException(Constants.INPUT_TRY_NUMBER_RIGHT_ERROR_MESSAGE) | ||||
private fun checkTryNumberIsRight(number: String) { | ||||
require( | ||||
number.isNotEmpty() && number.chars().allMatch { Character.isDigit(it) }) { | ||||
OutputView().outputErrorMessage( | ||||
Constants.INPUT_TRY_NUMBER_RIGHT_ERROR_MESSAGE | ||||
) | ||||
} | ||||
} | ||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,25 @@ | ||
package view | ||
|
||
import util.Validator | ||
|
||
class InputView { | ||
fun inputCarNames(): String { | ||
return readLine() ?: "" | ||
val input = readlnOrNull() | ||
runCatching { | ||
Validator().checkNames(input) | ||
}.onFailure { | ||
return inputCarNames() | ||
}.getOrNull() | ||
return input ?: inputCarNames() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. input이 null일 경우 자신의 함수를 다시 호출해주고 있네요. |
||
} | ||
|
||
fun inputTryNumber(): String { | ||
return readLine() ?: "" | ||
val input = readlnOrNull() | ||
runCatching { | ||
Validator().checkTryNumber(input) | ||
}.onFailure { | ||
return inputTryNumber() | ||
}.getOrNull() | ||
return input ?: inputTryNumber() | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
함수명만 봤을 때에는 "InputTryNumber를 실행한다"라는 의미로 보여요.
하지만, executeInputTryNumber함수보다는 inputTryNumber라는 함수가 더 잘 이해가 돼요.
executeInputTryNumber함수를 사용하는 것을 "간접 호출"이라고 합니다.
"간접 호출"은 유용한 경우도 많지만, 자칫 잘못하게 되면 과하게 함수를 호출하게 되는 상황을 만들기도 해요.
불필요한 간접 호출을 줄여보면 어떨까요? (이하 관련 내용 동일)