๐ ํ
์คํธ ์ฝ๋์ ๋ํ ๊ฐ๋จ ๋ด์ฉ
ํ
์คํธ ์ฝ๋๋ฅผ ์ ํ์ฉํ์ง ์์ ๊ฐ์๋ฅผ ํตํด ๊ธฐ์ด๋ฅผ ๋ค์ก๋ค.
๐ ํ
์คํธ ์ฝ๋ ์ค์ต
์ด ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์์ ํ์๋๋ฐ ๋ ์ ์ด๊ฒ์ ๋ณด๊ณ ๋ ์๋ฌด๊ฒ๋ ๋๋ ๊ฒ์ด ์์๋ ์ถ์๋ค.
ํ
์คํธ ์ฝ๋ ์ค์ต ์ค๋ฐ๋ถ๋ฅผ ๋ค์ด์๊ณ ์์ผ๋ก ๊นจ๋ฌ์์ ๊ธ์ ๊ณผ ํจ๊ป ํ
์คํธ ์ฝ๋์ ์ค์์ฑ์ ์ ์ ์์๋ค.
๐ ํ์ฉ ๋จ์ถํค
Alt + Ins(Insert): Generate ๋ฉ์๋ ์์ฑ
Alt + Enter: ์์ง ์์ฑํ์ง ์์ ํด๋์ค ์ด๋ฆ์ ์ปค์๋ฅผ ๋๊ณ ๋จ์ถํค ์คํ(=> ํด๋์ค ์์ฑ)
Ctrl + Alt + V: ๊ฐ์ ๋ด์ฉ์ ๋์ผํ ์ฝ๋ ํ ๋ถ๋ถ์ ๋๋๊ทธ ํ ๋จ์ถํค ์คํ(=> 2๊ฐ ์ด์์ ํญ๋ชฉ์ ๋ฐ๊พธ๊ธฐ ์ ํ, ๋ณ์ ์์ฑ)
Ctrl + Alt + C: " " ์์ ๋ฌธ์์ด์ ๋๋๊ทธ ํ ๋จ์ถํค ์คํ(=> ๋ฌธ์์ด์ ๋ํ ์๋ก์ด String ๋ณ์ ์ ์)
๐ Test fails
์คํ์ 100% ์คํจ : 'PasswordValidator.class' ๋ฅผ ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ ์คํจ
/**
* ๋น๋ฐ๋ฒํธ๋ ์ต์ 8์ ์ด์ 12์ ์ดํ์ฌ์ผ ํ๋ค.
* ๋น๋ฐ๋ฒํธ๊ฐ 8์ ๋ฏธ๋ง ๋๋ 12์ ์ด๊ณผ์ธ ๊ฒฝ์ฐ IllegalArgumentException ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
* ๊ฒฝ๊ณ์กฐ๊ฑด์ ๋ํด ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
*/
public class PasswordValidatorTest {
@DisplayName("๋น๋ฐ๋ฒํธ๊ฐ ์ต์ 8์ ์ด์, 12์ ์ดํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.")
@Test
void validatePasswordTest() {
assertThatCode(() -> PasswordValidator.validate("serverwizard"))
.doesNotThrowAnyException();
}
}
๐ Test passes
ํต๊ณผํ๊ธฐ ์ํ ์ฝ๋ ์์ฑ: 'PasswordValidator.class' ์์ฑ
ํ
์คํธ ํ์ผ์์ ๋ค์ ์คํ ํ ์คํจ/ํต๊ณผ ํ์ธ
public class PasswordValidator {
public static void validate(String password) {
if(password.length() < 8 || password.length() > 12) {
throw new IllegalArgumentException("๋น๋ฐ๋ฒํธ๋ ์ต์ 8์ ์ด์ 12์ ์ดํ์ฌ์ผ ํ๋ค.");
}
}
}
๐ Refactor
์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ์ ์ง๋ณด์์ ์ฉ์ดํ๊ธฐ ์ํด ๊ทธ๋ฆฌ๊ณ ๊ฐ์์์ ๊ฐ์กฐํ๋ ์ฌ๋ฆฌ์ ์์ ๊ฐ์ ์ฃผ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฌ์กฐ์ ํ๋ค.
public class PasswordValidator {
public static final String WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE
= "๋น๋ฐ๋ฒํธ๋ ์ต์ 8์ ์ด์ 12์ ์ดํ์ฌ์ผ ํ๋ค.";
public static void validate(String password) {
int length = password.length();
if(length < 8 || length > 12) {
throw new IllegalArgumentException(WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE);
}
}
}
์ถ์ฒ | hyeonseok Ahn