티스토리 뷰
자바7에서 추가된 Objects 클래스는 여러 유틸메서드를 제공하고있다. 이중 유용한 메서드들을 몇가지 알아보자.
1. equals()
null에 대한 방어를 위해 이런코드를 작성한적이 한번쯤 있을것이다.
public void method(String str1, String str2){
if(str1 != null && str1.equals(str2)){
}
}
str2는 인자로 활용되기때문에 null 체크를 굳이 할필요가 없지만 메서드 호출 객체인 str1이 null 이면 NPE가 발생하기때문에 이런식으로 방어코드를 작성하게된다. 이런 코드는 실무에서도 흔히 볼 수 있는데 null 체크는 자칫하면 빼먹기 쉬워 골칫덩이가 되곤한다. Optional로 우아하게 처리하는 방법도 있지만 str1과 str2가 모두 null일때도 처리해야한다면 Optional로는 부족하다. 그럴땐 Objects.equals() 를 이용하자.
public void method(String str1, String str2){
if(Objects.equals(str1, str2)){
}
}
참고로 첫번째 코드는 str1이 null이 아니어야하지만 두번째 코드는 str1이 null이어도 str2가 null이라면 true를 리턴한다. 말그대로 null이든 아니든 str1과 str2가 같은지만 비교하는것이므로 위 예제코드는 if문 조건의 의미가 조금 다르다는것을 유의하자.
2. toString()
equals() 와 마찬가지로 모든 객체는 Object 클래스를 상속받기때문에 toString() 메서드를 갖고있다. 그럼에도 Objects 에 있다는건 위와 마찬가지로 null 에 대응하겠다는 의미로 보면 된다.
public static void main(String[] args) {
String str = null;
System.out.println(Objects.toString(str));
}
null 일때 출력하고싶은 내용이 있다면 오버로딩된 2개인자짜리를 사용할 수도 있다.
public static void main(String[] args) {
String str = null;
System.out.println(Objects.toString(str, "hello"));
}
3. requireNonNull()
인자의 null 체크를 해주고 null이 아닐시 그대로 반환, null 일 경우 NPE를 발생시킨다.
public void method(String str1){
String str2 = Objects.requireNonNull(str1);
}
오버로딩된 메서드가 2가지 더 있는데 NPE 발생시 기본 메세지를 설정한다. 하나는 메세지 자체를 전달하고 하나는 메세지를 반환하는 Supplier 객체를 전달받아 lazy 하게 작동한다.
public void method(String str1){
String str2 = Objects.requireNonNull(str1, "default");
}
public void method(String str1){
String str2 = Objects.requireNonNull(str1, () -> "default");
}
4. isNull(), nonNull()
메서드명에서 드러나듯이 null 체크를 해준다. 개인적으로 애용하는 메서드들인데 그냥 == null 비교하면되지 뭐하러 저걸 만들어놓은건지 이해하기 힘들수도있다. 그냥 가독성을 위한 메서드라고 보면된다.
public void method(String str1){
if(Objects.isNull(str1)){
}
}
public void method(String str1){
if(Objects.nonNull(str1)){
}
}
5. compare
Comparator 인터페이스를 구현하는 경우 해당 객체의 compare() 메서드를 호출해줘야한다. Objects의 compare() 그 호출을 대신해준다. 일단 동일성 검사를 한번하고 호출하기때문에 약간의 최적화도 되는것 같다.
public void method(String str1, String str2){
Objects.compare(str1, str2, (s1, s2) -> s1.length() - s2.length());
}
6. 이 외
hashcode() 호출의 null 체크도 검사해주는 hashCode() 와 같은 메서드도있다. Objects에 있는 메서드들은 어려운 구현을 대신해줬다기보다 코드를 좀 더 추상화시켜 가독성을 향상시키거나 간단하지만 실수할 수 있는 부분들을 도와주는 클래스이므로 누구나 구현은 할 수 있지만 유용히 사용하자.
'Java' 카테고리의 다른 글
Builder Pattern (0) | 2017.12.31 |
---|---|
Jackson Serialize 시 클래스 정보가 필요할때 (0) | 2017.12.28 |
이름 재사용 관련된 용어들 (0) | 2017.11.08 |
nio 패키지를 이용한 텍스트 파일 입출력 (0) | 2017.10.09 |
중첩 try with resources 는 어떻게 작동할까? (5) | 2017.09.26 |
- Total
- Today
- Yesterday
- db
- spring cloud
- backend개발환경
- frontend개발환경
- TEST
- Git
- JavaScript Core
- clean code
- EffectiveJava
- frontcode
- JPA
- java
- javascript
- MySQL
- 정규표현식
- programming
- Design Pattern
- servlet
- OOP
- generics
- java8
- Jackson
- Kotlin
- http
- go-core
- toby
- DesignPattern
- Spring
- code
- mariadb
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |