빈 문자열을 input하면 예외가 발생하는 지 확인해보는 테스트이다.
@DisplayName("빈 값이면 예외 발생")
@Test
void inputEmpty() {
Assertions.assertThatIllegalArgumentException()
.isThrownBy(() -> new PasswordChecker().check(""));
}
// isEmpty() 사용
public void check(String password) {
if (password.isEmpty()) {
throw new IllegalArgumentException();
}
}
// equals("") 사용
public void check(String password) {
if (password.equals("")) {
throw new IllegalArgumentException();
}
}
해당 코드에서 .equals("")와 .isEmpty()는 같은 기능을 하지만 동작 과정은 다르다.
1. equals()의 내부 코드
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
-> 참조값 비교
-> String 클래스인지 확인
-> 길이가 다른지 확인
-> 길이가 같다면 한 문자씩 내용을 비교
2. isEmpty()의 내부 코드
public boolean isEmpty() {
return value.length == 0;
}
-> 길이만 비교
정리
equals()의 경우 문자열의 내용을 비교하므로 입력받은 ""과 ""의 내용을 비교하는 방식으로 작동하고
isEmpty() 메서드는 문자열의 길이가 0인지만 확인하므로 더 간단하다.
예제 코드와 같이 빈 문자열인지 확인하는 경우에는
.isEmpty() 메서드를 사용하여 보다 더 명시적이고 간단한 방법으로 확인할 수 있다.
'Java' 카테고리의 다른 글
자바(Java) - 예외(Exception) (0) | 2022.08.05 |
---|---|
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2022.08.03 |
[Java] 자바 쓰레드 동기화(Synchronize) (0) | 2022.08.01 |
[Java] String, StringBuilder, StringBuffer의 차이 (0) | 2022.08.01 |
[Java] 문자열 비교와 문자열 풀(String Pool) (0) | 2022.07.31 |